本文主要是介绍vmstat 机器CPU和进程性能监控,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
vmstat 使用(Sm使得输出对齐)
vmstat 2 -Sm
例子里命令行的 2 表示每隔 2 秒钟显示一次
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st1 0 0 60321892 15646228 35570828 0 0 15 35 0 0 6 2 91 0 00 0 0 60322340 15646228 35570872 0 0 0 8 4429 5000 0 0 100 0 01 0 0 60322208 15646228 35570872 0 0 0 4 3857 4588 0 0 100 0 00 0 0 60322224 15646236 35570864 0 0 0 88 4328 5450 0 0 100 0 0
第一行表示了这一次启动以来的各项指标,我们可以暂时忽略掉第一行。
需要查看的指标:
* r:处在 runnable 状态的任务,包括正在运行的任务和等待运行的任务。这个值比平均负载能更好地看出 CPU 是否饱和。这个值不包含等待 io 相关的任务。当 r 的值比当前 CPU 个数要大的时候,系统就处于饱和状态了。* free:以 KB 计算的空闲内存大小。Swap
* si: 换入的内存页
* so:换出的内存页。如果这两个值非零,表示内存不够了。IO
* bi: 收到块设备的block数目
* bo: 发送到快设备的block数目系统
* in : 系统每秒的中断次数,(包括时钟的中断)。IO繁忙的系统(数据库系统),进程经常性等待IO中断进入内核态运行,所以设备中断比较高。
* cs : 系统的上下文切换。 CPU繁忙的系统(web系统)上下文切换较多,可以调整进程/线程数比或者通过进程复用的方法来降低上下文切换总量。CPU:
* us(用户)所有进程用户态消耗CPU的时间百分比, 如果长期大于50%,需要考虑优化应用程序。
* sy(内核), 所有进程内核态消耗CPU的时间百分比, sy值比较高时,说明进程内核态消耗的CPU时间多;如果us+sy超过80%,就表明CPU资源存在不足。
* id(空闲时间)
* wa(等待io). 进程IO等待所占CPU时间百分比。wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重
* st(偷取时间)
CPU 时间的各项指标(对所有 CPU 取均值),分别表示:用户态时间,内核态时间,空闲时间,等待 io,偷取时间(在虚拟化环境下系统在其它租户上的开销)
把用户态 CPU 时间(us)和内核态 CPU 时间(sy)加起来,我们可以进一步确认 CPU 是否繁忙。等待 IO 的时间 (wa)高的话,表示磁盘是瓶颈;注意,这个也被包含在空闲时间。系统处理 IO 的时候,肯定是会消耗内核态时间(sy)的。如果内核态时间较多的话,比如超过 20%,我们需要进一步分析,也许内核对 IO 的处理效率不高。
例子:
procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st
34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 0
32 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 0
32 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 0
32 0 0 200889568 73712 591856 0 0 0 48 11900 2459 99 0 0 0 0
32 0 0 200890208 73712 591860 0 0 0 0 15898 4840 98 1 1 0 0
^C这个例子里,CPU 时间大部分都消耗在了用户态,表明主要是应用层的代码在使用 CPU。CPU 利用率 (us + sy)也超过了 90%,这不一定是一个问题;我们可以通过 r 和 CPU 个数确定 CPU 的饱和度。
这篇关于vmstat 机器CPU和进程性能监控的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!