Linux系统性能监控命令

Linux系统性能监控命令

Posted by A Chang on February 26, 2020

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压力高)