vmstat 是一个查看系统虚拟内存使用情况的命令,通过这个命令,可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息。
什么是Linux的虚拟内存
在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。
当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。
其输出各个字段如下所示如下:
vmstat 5 5(每隔5秒采样一次,一共5次)
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 10868 18276 6956 2116176 0 0 5 4 0 0 2 1 96 0
2 0 10868 17636 6972 2116420 0 0 0 195 1598 1593 4 2 93 0
1 0 10868 17764 6988 2116924 0 0 0 166 1566 1544 4 2 93 0
2 0 10868 17332 7016 2117416 0 0 1 202 1649 1706 4 2 94 0
0 0 10868 16628 7024 2117668 0 0 0 186 1957 1820 5 3 92 0
下面针对各项输出进行解释,并附上一些相应的经验值
procs
r:在运行队列中等待的进程数,展示了正在执行和等待CPU资源的任务个数。当这个值超过了CPU数目,就会出现相应的CPU瓶颈了
b:在等待io的进程数
memoy
swpd:正在使用的swap大小(单位KB),即:进入到虚拟内存的内存数量,该值大于0,表示物理内存不足;不过如果该值比较大了,但是si、so的值长期为0,表示系统性能还是正常。
free:空闲的物理内存空间(单位KB)
buff: 已使用的buff大小,对块设备的读写进行缓冲(单位:KB)
cache:已使用的cache大小,文件系统的cache(单位:KB)
swap
si: 从磁盘交换到内存的交换页数量,单位:KB/秒
so: 从内存交换到磁盘的交换页数量,单位:KB/秒
io
bi: 从块设备读入的数据总量(读磁盘) (KB/s)
bo: 写入到块设备的数据总理(写磁盘) (KB/s)
system
in: 每秒的中断数,包括时钟中断
cs: 每秒的环境(上下文)转换次数
cpu
us:用户进程消耗的CPU时间百分比
us的值越高,说明用户进程消耗的CPU时间越多。但是如果长期超过50%的话,应该考虑用户应用程序的优化
sy:内核进程消耗的CPU时间百分比
一般来说,如果sy的值长期处于高位,尽管其他指标也运行正常,但是这个并非系统运行良好的情况,需要进一步分析原因
id:cpu空闲以百分比
wa:io等待消耗的CPU时间百分比
wa的值比较高,说明IO等待比较严重,可能的原因:1)磁盘大量的随机访问;2)磁盘的带宽出现瓶颈
vmstat的瓶颈:无法对某一个进程进行深入分析。
关于CPU监控这块,需要结合上面的几个指标来一起分析:
1)运行队列,单个CPU极限运行不超过3
2)CPU满负荷运行,其分布符合:
a) User Time:65%~70%
b) System Time:30%~35%
c) Idle:0%~5%
3)上下文切换,如果CPU符合上述70/30规则,则大量的上下文切换也没关系