Linux系统性能监控命令
top命令
achang@achang-Lenovo-G480:~$ top
top - 11:37:13 up 3 days, 1:22, 1 user, load average: 1.47, 1.46, 1.53
Tasks: 309 total, 2 running, 253 sleeping, 0 stopped, 0 zombie
%Cpu(s): 12.5 us, 3.8 sy, 0.0 ni, 79.1 id, 4.5 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 8009108 total, 230512 free, 6419964 used, 1358632 buff/cache
KiB Swap: 7811068 total, 5775620 free, 2035448 used. 742884 avail Mem
…………….
对第三行的解释:
- us(user cpu time):用户态使用的cpu时间比。该值较高时,说明用户进程消耗的 CPU 时间比较多,比如,如果该值长期超过 50%,则需要对程序算法或代码等进行优化。
- sy(system cpu time):系统态使用的cpu时间比。
- ni(user nice cpu time):用做nice加权的进程分配的用户态cpu时间比
- id(idle cpu time):空闲的cpu时间比。如果该值持续为0,同时sy是us的两倍,则通常说明系统则面临着 CPU 资源的短缺。
- wa(wait):等待使用CPU的时间。
- hi(hardware irq):硬中断消耗时间
- si(software irq):软中断消耗时间
- st(steal time):虚拟机偷取时间
以上解释的这些参数的值加起来是100%
vmstat命令
achang@achang-Lenovo-G480:~$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 2035448 236664 161456 1194480 1 2 13 111 16 27 13 4 79 4 0
解释说明:
-
procs部分的解释
- r 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。
- b列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。
-
cpu部分的解释
- us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
- sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
- wa 列显示了等待CPU时间的百分比。这里wa的参考值为5%,如果wa超过5%,说明CPU等待严重
- id 列显示了cpu处在空闲状态的时间百分比
-
system部分的解释
- in 列表示在某一时间间隔中观测到的每秒设备中断数。
- cs列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
-
memory部分的解释
- swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常
- free 当前的空闲页面列表中内存数量(k表示)
- buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
- cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。
-
swap部分的解释
- si 由内存进入内存交换区数量。
- so由内存交换区进入内存数量。
-
IO部分的解释
- bi 从块设备读入数据的总量(读磁盘)(每秒kb)。
- bo 块设备写入数据的总量(写磁盘)(每秒kb)
使用iostat查看IO负载
achang@achang-Lenovo-G480:~$ iostat 1 1
Linux 4.15.0-88-generic (achang-Lenovo-G480) 2020年02月26日 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
12.47 0.03 3.89 4.45 0.00 79.15
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 27.23 51.62 434.03 13592184 114279108
解释说明:
-
avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值
- %user: 在用户级别运行所使用的CPU的百分比.
- %nice: nice操作所使用的CPU的百分比.
- %sys: 在系统级别(kernel)运行所使用CPU的百分比.
- %iowait: CPU等待硬件I/O时,所占用CPU百分比.
- %idle: CPU空闲时间的百分比.
-
Device段:各磁盘设备的IO统计信息
- tps: 每秒钟发送到的I/O请求数.
- Blk_read /s: 每秒读取的block数.
- Blk_wrtn/s: 每秒写入的block数.
- Blk_read: 读入的block总数.
- Blk_wrtn: 写入的block总数.
achang@achang-Lenovo-G480:~$ iostat -x -k -d 1
Linux 4.15.0-88-generic (achang-Lenovo-G480) 2020年02月26日 _x86_64_ (4 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.85 62.88 2.51 24.74 51.64 434.27 35.66 0.31 11.35 9.89 11.49 7.04 19.18
解释说明:
- rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
- wrqm/s: 每秒对该设备的写请求被合并次数
- r/s: 每秒完成的读次数
- w/s: 每秒完成的写次数
- rkB/s: 每秒读数据量(kB为单位)
- wkB/s: 每秒写数据量(kB为单位)
- avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
- avgqu-sz: 平均等待处理的IO请求队列长度
- await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
- svctm: 平均每次IO请求的处理时间(毫秒为单位)
- %util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
idle小于70% IO压力就较大了,一般读取速度有较多的wait。
同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)