一、对CPU密集型进程进行模拟,具体如下:
第一个终端
在第一个终端运行 stress 命令,模拟一个 CPU 使用率 100% 的场景:stress --cpu 1 -- timeout 600
第二个终端
运行 uptime 查看系统平均负载情况,watch -d 参数表示高亮显示变化的区域:watch -d uptime
1 分钟的平均负载会慢慢增加到 1以上。
第三个终端
运行 mpstat 查看 CPU 使用率的变化情况:mpstat -P ALL 5 (-P ALL 表示监控所有 CPU,后面数字 5 表示间隔 5 秒后输出一组数据)
仅有一个 CPU 的使用率接近 100%,但它的 iowait 只有 0,这说明,平均负载的升高正是由于 CPU 使用率为 100%。
二、分析具体导致CPU使用率这么高的进程
通过模拟,我们知道导致CPU使用率这么高的进程就是stress,但是在实际生产中就得通过pidstat工具进行查询了。下面就利用该工具进行查询过程的解析:
首先简述下pidstat的选项功能:
# pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]
# -u:默认的参数,显示各个进程的cpu使用统计
# -r:显示各个进程的内存使用统计
# -d:显示各个进程的IO使用情况
# -p:指定进程号
# -w:显示每个进程的上下文切换情况
# -t:显示选择任务的线程的统计信息外的额外信息
详细功能通过man pidstat可以查阅:
本案例中使用pidstat 5 1
通过上图可以分析出CPU使用%98以上的是pid=5870的命令stress。
综合上述,通过sysstat工具集,可以明确分析出CPU密集型进程导致CPU平均负载率处于高水位线的“罪魁祸首”。