引言
本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。。
我们之前介绍了平均负载,相信大家已经对此有了一些了解,但是在实际的生成环境中,平均负载高于多少时,才值得我们关注呢?高于60%?70%?实际上我们应该把平均负载监控起来,然后根据历史数据,进行平均负载趋势的查看,当发现平均负载明显升高时,就要进行分析了。
cpu使用率
平均负载不单单指cpu的使用率,我们再来回顾一下平均负载的定义:是指单位时间内处于正在运行状态或者处于不可中断状态下进程的平均值,就是说平均负载不仅包括了正在运行的进程还包括等待cpu和I/O的进程。
比如说cpu占用率高的情况,都是占cpu的进程,那这时候这个平均负载高是能证明进程占用cpu率高的,但是如果是I/O的进程很多的情况下也会导致平均负载过高,但这时候cpu的占有率并不高,另外就是大量等待cpu进程的情况,也会导致cpu占有率过高。
模拟场景
模拟cpu占比过高
用stress
搞一个cpu使用率百分之百的场景,用stress --cpu 3 --timeout 600
:
我们看一下平均负载的情况:
可以看出平均负载飙升,接着我们输入 mpstat -P ALL 5
指令,-P ALL
:表示监控所有cpu
,5代表每5秒打印一次。
%user
用户态的CPU%nice
负进程的CPU%sys
内核%iowait
硬盘IO等待%irq
硬中断%soft
软中断
可以看出平均负载过高,是因为cpu
的使用率,让我们来看看是哪个进程导致的:
明显可以看到是stress
进程导致的,然后我们关掉stress
进程看看: 可以看出平均负载明显减小。
模拟I/O过高
用stress
搞一个I/O过载的场景, stress -i 1 --timeout 600
。
我们看一下平均负载的情况:
可以看出平均负载飙升,接着我们输入 mpstat -P ALL 5
指令,-P ALL
:表示监控所有cpu
,5代表每5秒打印一次。
可以看出平均负载过高,是因为iowait
高导致的,让我们来看看是哪个进程导致的:
明显可以看到是stress
进程导致的。
模拟多进程
4核cpu,我们搞8
个进程试试,stress -c 8 --timeout 600
同样用uptime
命令,查看平均负载,可以看出平均负载飙升:
明显可以看到还是stress
进程导致的。
总结
今天学习了平均负载,并用压测工具模拟了Load过高的三种场景,然后我们就知道了平均负载只是总体的反应了系统的运行情况,并不一定是cpu占比过高导致的,还有可能是I/O
更繁忙了,在实际的情况处理中我们要结合分析工具mpstat、pidstat
等帮我们分析Load
高的原因。