Linux 性能优化之平均负载( 二 )


67.53% 。这说明,平均负载的升?是由于 iowait 的升? 。
那么到底是哪个进程,导致 iowait 这么?呢?我们还是? pidstat 来查询:# 间隔5秒后输出?组数据,-u表示CPU指标
$ pidstat -u 5 1Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU)13:42:08 UID PID %usr %system %guest %wait %CPU CPU Command13:42:13 0 104 0.00 3.39 0.00 0.00 3.39 1 kworker/1:1H13:42:13 0 109 0.00 0.40 0.00 0.00 0.40 0 kworker/0:1H13:42:13 0 2997 2.00 35.53 0.00 3.99 37.52 1 stress13:42:13 0 3057 0.00 0.40 0.00 0.00 0.40 0 pidstat可以发现,还是 stress 进程导致的 。
场景三:?量进程的场景
当系统中运?进程超出 CPU 运?能?时,就会出现等待 CPU 的进程 。
?如,我们还是使? stress,但这次模拟的是 8 个进程:
$ stress -c 8 --timeout 600
由于系统只有 2 个CPU,明显? 8 个进程要少得多,因?,系统的 CPU 处于严重过载状态,平均负载?达7.97:
$ uptime..., load average: 7.97, 5.93, 3.02接着再运?pidstat来看?下进程的情况:
# 间隔5秒后输出?组数据
$ pidstat -u 5 114:23:25 UID PID %usr %system %guest %wait %CPU CPU Command14:23:30 0 3190 25.00 0.00 0.00 74.80 25.00 0 stress14:23:30 0 3191 25.00 0.00 0.00 75.20 25.00 0 stress14:23:30 0 3192 25.00 0.00 0.00 74.80 25.00 1 stress14:23:30 0 3193 25.00 0.00 0.00 75.00 25.00 1 stress14:23:30 0 3194 24.80 0.00 0.00 74.60 24.80 0 stress14:23:30 0 3195 24.80 0.00 0.00 75.00 24.80 0 stress14:23:30 0 3196 24.80 0.00 0.00 74.60 24.80 1 stress14:23:30 0 3197 24.80 0.00 0.00 74.80 24.80 1 stress14:23:30 0 3200 0.00 0.20 0.00 0.20 0.20 0 pidstat可以看出,8 个进程在争抢 2 个 CPU,每个进程等待 CPU 的时间(也就是代码块中的 %wait 列)?达 75% 。这些超出 CPU
计算能?的进程,最终导致 CPU 过载 。
总结分析完这三个案例,我再来归纳总结下平均负载的理解 。平均负载提供了一个快速查看系统整体性能的?段,反映了整体的负载情况 。但只看平均负载本身,我们并不能直接发现,到
底是哪?出现了瓶颈 。所以,在理解平均负载时,也要注意:
平均负载?有可能是 CPU 密集型进程导致的;
平均负载?并不?定代表 CPU 使?率?,还有可能是 I/O 更繁忙了;
当发现负载?的时候,你可以使? mpstat、pidstat 等?具,辅助分析负载的来源 。




推荐阅读