美文网首页
linux性能调优-平均负载

linux性能调优-平均负载

作者: 等哈哈咯 | 来源:发表于2018-12-29 10:41 被阅读0次

    uptime 命令最后3列:分别表示过去1分钟,5分钟,15分钟的平均负载


    image.png

    那什么是平均负载呢?

    简单来说就是单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。(和cup使用率没有直接关系)

    • 可运行状态进程
      指正在被cpu或者等待cpu的进程。也就是我们常用的ps查看的R状态的进程
    • 不可中断状态进程
      指正在处于内核态关键流程的进程,这些流程不可以被打断,比如等待硬件I/O响应,ps查看是D状态的进程。(disk sleep)

    通过平均负载能得到什么信息?

    首先应该先查看当前机器的cpu核数(逻辑核数,而不是物理核数)

    grep 'model name' /proc/cpuinfo |wc -l
    

    比如当前平均负载是2:
    在2个cpu的机器上,意味着所有的cpu都刚好被完全占有
    在4个cpu的机器上,意味着有cpu有50%空闲
    在1个cpu的机器上,意味着有一半的进程得不到cpu

    我们通过1,5,15分钟的平均负载,可以看到当前系统的负载趋势。
    例如:单cpu的机器: 1.73 0.63 7.9
    那么说明系统在过去1分钟有73%的超载,15分钟时候690%的超载。整体趋势是平均负载下降。

    根据经验,当系统超过负载 70%的时候,就应该要排查高负载问题。(大牛的经验)

    平均负载和cpu使用率

    cpu和平均负载没有直接关系

    • cpu密集型环境,cpu使用率高,平均负载高
    • IO密集型环境,cpu使用率不一定高,平均负载高
    • 大量等待cpu的进程调度,也会使cpu提高,平均负载也高

    案例模拟

    安装stress和sysstat。stress的centos版本较老,显示的时候会没有%wait列。有需要可以选择源码安装

    场景1

    模拟cpu密集(打开3个终端)

    终端1:
    stress --cpu 1 --timeout 600
    
    终端2::
    watch -d uptime
    
    终端3:
    mpstat -P ALL 5 
    
    mpstat

    可以看到,用户态的cpu使用率为100%。由此可以确定是用户进程导致的cpu升高,具体是哪个进程呢?

    pidstat -u 5 1
    
    pidstat

    由此,找到了进程id是10184,进程名为stress。是我们刚刚的压力模拟进程。

    场景2
    stress -i 1 --timeout 600
    
    mpstat -P ALL 5
    
    mpstat

    观察后发现,%sys 和 %idle加起来几乎占满了cpu。

    pidstat -u 5 
    

    为什么没有看到iowait升高。反而是cpu等升高了呢,原因是stress的原理是使用sync()系统调用,是刷新缓冲区到磁盘,新机器往往缓存区较小。无法产生较大的io。所以只看到了系统使用率升高等。应该使用下一代的stress-ng,支持更丰富的选项。如:stress-ng -i 1 --hdd 1 --timeout 600(-hdd表示读写临时文件)

    pidstat没有%wait项,原因是centos默认的sysstat版本较老,在11.5.5以后才加入,我尝试了11.5.5后发现版本有问题,有了%iowait列,但是内容为空。最后从git上换了12.x.x版本后就好了

    相关文章

      网友评论

          本文标题:linux性能调优-平均负载

          本文链接:https://www.haomeiwen.com/subject/azoelqtx.html