• CPU 使用率和平均负载


    参考:https://mp.weixin.qq.com/s/3I5kkNIGKkjQFazwvS4GIQ

    一块 CPU 芯片可能包含多个物理核,每个物理核都是一个实打实的运算核心
    超线程(Hyper-Threading)技术可以让一个物理核在单位时间内同时处理两个线程,变成两个逻辑核。但它不会拥有传统单核 2 倍的处理能力,也不可能提供完整的并行处理能力。

    单核 CPU 1s 内非空闲态运行时间为 0.8s,那么它的 CPU 使用率就是 80%;双核 CPU 1s 内非空闲态运行时间分别为 0.4s 和 0.6s,那么,总体 CPU 使用率就是 (0.4s + 0.6s) / (1s * 2) = 50%,其中 2 表示 CPU 核数

    由于 CPU 有多种非空闲态,因此,CPU 使用率计算公式可以总结为:CPU 使用率 = (1 - 空闲态运行时间/总运行时间) * 100%

    平均负载(Load Average)是指单位时间内,系统处于 可运行状态(Running / Runnable) 和 不可中断态 的平均进程数,也就是 平均活跃进程数

    平均负载不仅包括正在使用 CPU 的进程,还包括等待 CPU 或 I/O 的进程。

    top 命令查看平均负载,load average: 1.09, 1.12, 1.52

    这 3 个数字分别表示 1分钟、5分钟、15分钟内系统的平均负载。该值越小,表示系统工作量越少,负荷越低;反之负荷越高。

    理想情况下,平均负载 = CPU 逻辑核数。

    • 当平均负载持续大于 0.7 * CPU 逻辑核数,就需要开始调查原因,防止系统恶化;
    • 当平均负载持续大于 1.0 * CPU 逻辑核数,必须寻找解决办法,降低平均负载;
    • 当平均负载持续大于 5.0 * CPU 逻辑核数,表明系统已出现严重问题,长时间未响应,或者接近死机

    CPU 使用率是单位时间内 CPU 繁忙程度的统计。

    • CPU 密集型应用,大量进程在等待或使用 CPU,此时 CPU 使用率与平均负载呈正相关状态。

    • I/O 密集型应用,大量进程在等待 I/O,此时平均负载会升高,但 CPU 使用率不一定很高。

    1、通过 top 命令找到 CPU 消耗最多的进程号;

    2、通过 top -Hp 进程号 命令找到 CPU 消耗最多的线程号(列名仍然为 PID);

    3、通过printf "%x " 线程号 命令输出该线程号对应的 16 进制数字;

    4、通过 jstack 进程号 | grep 16进制线程号  -A 10 命令找到 CPU 消耗最多的线程方法堆栈。

    《Perf -- Linux下的系统性能调优工具》

    《如何迅速分析出系统CPU的瓶颈在哪里?》

  • 相关阅读:
    博客园第一篇随笔css3动画(奔跑的小杨)
    Python输出菱形
    Android开发经验总结
    Android中Activity共享变量的另一方法:Application context
    system()与execv()函数使用详解
    Sublime Text2 编译和运行C/C++程序(windows)
    Android View.post(Runnable )
    Android图像处理之Bitmap类
    android中dip、dp、px、sp和屏幕密度
    System.setProperty and System.getProperty
  • 原文地址:https://www.cnblogs.com/testzcy/p/12704832.html
Copyright © 2020-2023  润新知