性能分析

linux.jpg

Analysis tools.png

vmstat

其含义为虚拟内存状态,属于sysstat包。用于监控系统的虚拟内存、进程、CPU 和 I/O 等性能信息

1
2
3
4
5
6
7
 ~]# vmstat 1  4  
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 434196 2124 379168 0 0 8 3 105 195 0 1 98 0 0
3 0 0 434196 2124 379168 0 0 0 0 74 168 1 1 98 0 0
2 0 0 434208 2124 379168 0 0 0 0 114 204 0 1 99 0 0
1 0 0 434200 2124 379168 0 0 0 0 102 181 0 2 98 0 0

每1秒检测一次,检测四次。

1
2
3
4
5
6
Usage:
vmstat [options] [采样间隔 [次数]]

Options:
-a 显示活动和非活动内存
-f

字段说明

procs 字段

  • r:运行队列中进程数量
  • b:等待IO的进程数量

memory 字段

  • swpd:使用虚拟内存大小
  • free:空闲物理内存大小
  • buff:用作缓冲内存的大小
  • cache:用作缓存的大小

swap

  • si:每秒从交换区写到内存的大小,由磁盘调入内存
  • so:每秒写入交换区的内存大小,由内存调入磁盘

IO

  • bi:每秒读取的块数
  • bo:每秒写入的块数

system
in:每秒中断数,包括时钟中断
cs:每秒上下文切换数

cpu
us:用户进程执行时间百分比
sy:内核系统进程执行时间百分比
id:空闲时间百分比
wa:IO等待时间百分比

iostat

属于sysstat包,用于监视系统输入输出设备和CPU的IO情况,是查看IO最基本的工具

1
2
3
4
5
6
7
8
~]# iostat -x /dev/sda1
Linux 3.10.0-957.el7.x86_64 (test3) 2022年06月08日 _x86_64_ (1 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0.39 0.00 1.14 0.03 0.00 98.44

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda1 0.00 0.00 0.01 0.00 0.12 0.04 31.63 0.00 1.83 1.05 41.40 1.71 0.00

字段说明

Device rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
设备名称 每秒需要读取需求 每秒需要写入需求 实际读取需求 实际写入需求 实际读取的大小 实际写入的大小 等待IO IO需求完成的平均时间 IO消耗的CPU百分比

dstat

属于dstat包,需要先进行安装yum install -y dstat,可以同时显示 CPU 使用率、内存使用、磁盘 I/O、网络流量、系统负载、进程状态等信息,使你能够全面了解系统的健康状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
~]# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 0 100 0 0 0|1630B 4924B| 0 0 | 0 2B| 31 50
1 0 99 0 0 0| 0 0 | 60B 914B| 0 0 | 41 65

~]# dstat -c #查看CPU使用情况
----total-cpu-usage----
usr sys idl wai hiq siq
0 0 100 0 0 0
0 1 99 0 0 0
# usr:用户进程使用的比例
# sys:系统调用使用的比例
# idl:空闲比例
# wai:等待IO操作比例
# hiq:硬中断比例
# siq:软中断比例

~]# dstat -d # 查看磁盘IO情况
-dsk/total-
read writ
1629B 4922B
0 0
0 0
# read:硬盘读取速率
# writ:硬盘写入速率

~]# dstat -m # 查看内存使用情况
------memory-usage-----
used buff cach free
218M 672k 550M 76.0M
218M 672k 550M 76.0M
# used:内存使用量
# buff:缓存页缓存内存量
# free:空闲内存量
# total:总内存量

~]# dstat -n # 显示网络情况
-net/total-
recv send
0 0
60B 234B
60B 194B
# recv:接收网络流量速率
# send:发送数据包速率

~]# dstat -p # 查看进程情况
---procs---
run blk new
0 0 0.8
0 0 1.0
# run:运行的进程数
# blk:阻塞的进程数
# new:新建的进程数

dstat还有一些插件可以使用,可以使用man dstat进行查看使用
常用的有:
–disk-util 显示某一时间磁盘的忙碌状况
–freespace 显示当前磁盘空间使用率
–proc-count 显示正在运行的程序数量
–top-bio 显示块I/O最大的进程
–top-cpu 显示CPU占用最大的进程
–top-io 显示正常I/O最大的进程
–top-mem 显示占用最多内存的进程

iotop

安装iotop,yum install -y iotop

1
2
3
4
5
6
Total DISK READ :	0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
18925 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.03 % [kwo~/0:2]
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % syst~ze 22
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]

字段解释:
Total DISK READ:从磁盘中读取的总速率
Total DISK WRITE:往磁盘里写入的总速率
Actual DISK READ:从磁盘中读取的实际速率
Actual DISK WRITE:往磁盘里写入的实际速率
TID:线程ID,按p可转换成进程ID
PRIO:优先级
USER:线程所有者
DISK READ:从磁盘中读取的速率
DISK WRITE:往磁盘里写入的速率
SWAPIN:swap交换百分比
IO>:IO等待所占用的百分比
COMMAND:具体的进程命令

选项
-o :只显示使用IO的进程
-b :非交互模式,相当于记录IO日志
-n :设定循环次数
-d :设定循环间隔
-p :查看指定PID进程
-u :查看指定user
-a :显示累计的IO,而不是带宽

交互按键
左右方向键:以选中行作为排序行
o:只显示使用IO的进程
a:显示累计的IO,而不是带宽
p:显示进程,从TID(线程)转换显示为PID(进程)

pidstat

安装sysstat,yum install -y pidstat,用于监控和报告进程级别的 CPU 使用率、内存使用率、I/O 和上下文切换等信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
~]# pidstat
Linux 3.10.0-957.el7.x86_64 (localhost.localdomain) 2023年08月02日 _x86_64_ (1 CPU)

17时34分06秒 UID PID %usr %system %guest %CPU CPU Command
17时34分06秒 0 1 0.00 0.00 0.00 0.00 0 systemd
# UID:用户ID
# PID:进程编号
# %usr:用户态 CPU 使用率
# %system:内核态 CPU 使用率
# %guest:运行虚拟机 CPU 使用率
# CPU:进程运行的CPU编号

# -d :查看进程IO情况
# -r:查看进程内存使用情况
# -p:指定进程号
# -W:显示进程上下文切换情况

top

htop

安装htop

mpstat

安装sysstat

netstat

ps

strace

安装strace

uptime

lsof

perf