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\n" 線程號 命令輸出該線程號對應的 16 進制數字;

4、通過 jstack 進程號 | grep 16進制線程號  -A 10 命令找到 CPU 消耗最多的線程方法堆棧。

 

《Perf -- Linux下的系統性能調優工具》

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM