vmstat可以对操作系统的内存信息、进程状态、 CPU 活动、磁盘等信息进行监控, 不足之处是无法对某个进程进行深入分析。
[root@besttest ~]# vmstat 2 1 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 760648 11708 93028 0 0 9 1 16 18 0 0 100 0 0
2表示每个两秒采集一次服务器状态,1表示只采集一次。
实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:
[sdk_test@ssdk1 server]$ vmstat 2 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 168416 252324 12417400 0 0 2 8 0 1 0 0 99 0 0 0 0 0 169144 252324 12417484 0 0 0 0 1127 1277 1 1 99 0 0 0 0 0 170632 252324 12417596 0 0 0 28 1246 1383 1 1 98 0 0 0 0 0 169556 252324 12417700 0 0 0 20 1446 1565 1 0 98 0 0 0 0 0 169928 252324 12417828 0 0 0 24 1286 1469 1 1 98 0 0 0 0 0 170168 252324 12417928 0 0 0 64 1328 1513 1 1 98 0 0
这表示vmstat每2秒采集数据,一直采集,直到我结束程序,这里采集了6次数据我就结束了程序
好了,命令介绍完毕,现在开始实战讲解每个参数的意思
procs
R 列表示运行和等待 CPU 时间片的进程数, 这个值如果长期大于系统 CPU 个数, 说明CPU 不足,需要增加 CPU。
B 列表示在等待资源的进程数,比如正在等待 I/O 或者内存交换等。
memory
swpd 列表示切换到内存交换区的内存大小(单位 KB),通俗讲就是虚拟内存的大小。如果 swap 值不为 0 或者比较大, 只要 si、 so 的值长期为 0.这种情况一般属于正常情况。
free 列表示当前空闲的物理内存(单位 KB)。
Buff列表示 baffers cached 内存大小,也就是缓冲大小,一般对块设备的读写才需要缓冲。
Cache 列表示 page cached 的内存大小, 也就是缓存大小, 一般作为文件系统进行缓冲,频繁访问的文件都会被缓存,如果 cache 值非常大说明缓存文件比较多,如果此时 io中的 bi 比较小,说明文件系统效率比较好。
swap
Si 列表示由磁盘调入内存,也就是内存进入内存交换区的内存大小。
so 列表示由内存进入磁盘,也就是有内存交换区进入内存的内存大小。
一般情况下, si、 so 的值都为 0,如果 si、 so 的值长期不为 0,则说明系统内存不足,需要增加系统内存。
io
bi 列表示由块设备读入数据的总量,即读磁盘,单位 kb/s。
bo 列表示写到块设备数据的总量,即写磁盘,单位 kb/s。
如果 bi+bo 值过大,且 wa 值较大,则表示系统磁盘 IO 瓶颈。
system
in 列表示某一时间间隔内观测到的每秒设备中断数。
cs 列表示每秒产生的上下文切换次数。这 2 个值越大,则由内核消耗的 CPU 就越多。
cpu
us 列表示用户进程消耗的 CPU 时间百分比, us 值越高, 说明用户进程消耗 cpu 时间越多,如果长期大于 50%,则需要考虑优化程序或者算法。
sy 列表示系统内核进程消耗的 CPU 时间百分比,一般来说 us+sy 应该小于 80%,如果大于 80%,说明可能处女座 CPU 瓶颈。
id 列表示 CPU 处在空闲状态的时间百分比。
wa 列表示 IP 等待所占的 CPU 时间百分比, wa 值越高,说明 I/O 等待越严重,根据经验 wa 的参考值为 20%,如果超过 20%,说明 I/O 等待严重,引起 I/O 等待的原因可能是磁盘大量随机读写造成的, 也可能是磁盘或者此哦按监控器的贷款瓶颈(主要是块操作)造成的。
综上所述, 如果评估 CPU, 需要重点关注 procs 项的 r 列值和 CPU 项的 us、 sy、 wa 列的值。