【掘力星-性能技巧3】Linux操作系统的负载分析

引言

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。。

我们之前介绍了平均负载,相信大家已经对此有了一些了解,但是在实际的生成环境中,平均负载高于多少时,才值得我们关注呢?高于60%?70%?实际上我们应该把平均负载监控起来,然后根据历史数据,进行平均负载趋势的查看,当发现平均负载明显升高时,就要进行分析了。

cpu使用率

平均负载不单单指cpu的使用率,我们再来回顾一下平均负载的定义:是指单位时间内处于正在运行状态或者处于不可中断状态下进程的平均值,就是说平均负载不仅包括了正在运行的进程还包括等待cpuI/O的进程。

比如说cpu占用率高的情况,都是占cpu的进程,那这时候这个平均负载高是能证明进程占用cpu率高的,但是如果是I/O的进程很多的情况下也会导致平均负载过高,但这时候cpu的占有率并不高,另外就是大量等待cpu进程的情况,也会导致cpu占有率过高。

模拟场景

模拟cpu占比过高

stress搞一个cpu使用率百分之百的场景,用stress --cpu 3 --timeout 600

我们看一下平均负载的情况:

image.png

可以看出平均负载飙升,接着我们输入 mpstat -P ALL 5指令,-P ALL:表示监控所有cpu,5代表每5秒打印一次。

image.png

  • %user 用户态的CPU
  • %nice 负进程的CPU
  • %sys 内核
  • %iowait 硬盘IO等待
  • %irq 硬中断
  • %soft 软中断

可以看出平均负载过高,是因为cpu的使用率,让我们来看看是哪个进程导致的:

image.png 明显可以看到是stress进程导致的,然后我们关掉stress进程看看: image.png 可以看出平均负载明显减小。

模拟I/O过高

stress搞一个I/O过载的场景, stress -i 1 --timeout 600

我们看一下平均负载的情况: image.png

可以看出平均负载飙升,接着我们输入 mpstat -P ALL 5指令,-P ALL:表示监控所有cpu,5代表每5秒打印一次。 image.png

可以看出平均负载过高,是因为iowait高导致的,让我们来看看是哪个进程导致的: image.png

明显可以看到是stress进程导致的。

模拟多进程

4核cpu,我们搞8个进程试试,stress -c 8 --timeout 600

同样用uptime命令,查看平均负载,可以看出平均负载飙升: image.png

明显可以看到还是stress进程导致的。 image.png

总结

今天学习了平均负载,并用压测工具模拟了Load过高的三种场景,然后我们就知道了平均负载只是总体的反应了系统的运行情况,并不一定是cpu占比过高导致的,还有可能是I/O更繁忙了,在实际的情况处理中我们要结合分析工具mpstat、pidstat 等帮我们分析Load高的原因。

猜你喜欢

转载自juejin.im/post/7015449882894794788