• 【运维】CPU负载


    最近对我的本本(4核8线程)用top命令看系统状况出现了CPU利用率超过200%的情况,非常诧异,查了下相关资料,把这个问题弄清楚了。
    首先来分析下CPU Load

    load average: 0.09, 0.05, 0.01

    分别是1分钟、5分钟、15分钟的平均Load。
    Load这个东西怎么理解呢,就像一条马路,有N个车道,如果N个进程进入车道,那么正好一人一个,再多一辆车就占不到车道,要等有一个车空出车道。
    在CPU中可以理解为CPU可以并行处理的任务数,那么就是“CPU个数 * 核数”,如果CPU Load = CPU个数 * 核数 那么就是说CPU正好满负载,再多一点,可能就要出问题了,有任务不能被及时分配处理器,那么保证性能的话,最好是小于CPU个数 * 核数 *0.7。

    查看CPU核数可以通过:grep ‘model name’ /proc/cpuinfo

    那么以哪个平均值为准呢?如果1分钟平均出现大于CPU个数 * 核数的情况,还不用担心,如果5分钟平均也是,那就要警惕了,15分钟平均也是这样,就要分析哪里出问题了,防范于未然
    CPU利用率超过100%的问题,也是差不多,top命令应该是把每个核的CPU占用率加起来,算一个和,于是多核情况下会出现超过100%。

    另外Context Switch Rate也是个非常值得注意的值,因为线程间切换的代价也是非常高的。

    引用一个公式:Context Switch Rate = Interrupt Rate + TPS* N

    对于一个多线程的程序,我觉得准备一个控制线程来调度任务是非常必要的,免得线程过于高并发,导致资源的争用和线程切换带来性能问题,最好控制并发的线程数基本等于CPU的总核数,减少这个N,获得更好的处理器性能。

    参考了如下几篇文章:
    压力测试衡量CPU的三个指标:CPU Utilization、Load Average和Context Switch Rate
    理解Load Average做好压力测试
    理解 Linux 的处理器负载均值
    高性能服务器架构

    复制代码
    # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 
    # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
    
    # 查看物理CPU个数
    cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
    
    # 查看每个物理CPU中core的个数(即核数)
    cat /proc/cpuinfo| grep "cpu cores"| uniq
    
    # 查看逻辑CPU的个数
    cat /proc/cpuinfo| grep "processor"| wc -l
    复制代码

     查看CPU信息(型号)
    cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

    查看内 存信息
    # cat /proc/meminfo

  • 相关阅读:
    SpringBoot--实现Mybatis的多数据源切换和动态数据源切换
    云服务器查看外网IP地址方法
    Linux性能调优方法总结
    rsyslog配置
    Linux网络优化
    Reversoir sampling
    SQL 中的 NULL 小结
    Go by Example: HTTP Servers
    Linux 在 TOP 命令中切换内存的显示单位
    kubernetes informer 原理解析二
  • 原文地址:https://www.cnblogs.com/Dhouse/p/6839725.html
Copyright © 2020-2023  润新知