關鍵字:

top、awk、sed、mpstat

⚠️ 注意事項

🎯 TLDR

  • AirNet系統CPU使用率使用glibtop的api的返回值:cpu超限告警沒有確認週期,超限立即告。

1、獲取CPU使用率;計算:  100 - CPU空閒百分比 = CPU使用率

top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8"%"}'

這個命令的工作原理是:

  1. top -bn1 - 以批處理模式(-b)運行一次(-n1)top命令,獲取系統狀態的快照
  2. grep "Cpu(s)" - 過濾出包含"Cpu(s)"的行,這一行顯示了總體CPU使用率信息
  3. awk '{print 100 - $8"%"}' - 使用awk提取第8個字段($8),這個字段表示CPU空閒(idle)百分比,然後用100減去它得到CPU使用率
  4. 總體平均使用率 - 默認情況下, top -bn1 | grep "Cpu(s)" 顯示的是所有CPU核心的平均使用率。在輸出中,"Cpu(s)"行的統計數據是所有核心的總和平均
top -bn1 | grep "Cpu(s)" | sed 's/.*, *\([0-9.]*\)%* id.*/\1/' | awk '{print 100 - $1"%"}'
  • top -bn1
  • -b : 以批處理模式運行,適合輸出到文件或管道
  • -n1 : 只執行一次更新,而不是連續更新
  • 這個命令生成系統狀態的快照,包含CPU、內存等資源使用信息
  • grep "Cpu(s)"
  • 過濾出包含"Cpu(s)"的行,這一行顯示了總體CPU使用率信息
  • 例如,這一行可能看起來像: Cpu(s): 20.5%us, 15.3%sy, 0.0%ni, 63.7%id, 0.0%wa, 0.0%hi, 0.5%si, 0.0%st
  • sed 's/. , ([0-9.] )% id.*/\1/'
  • 這是一個sed替換命令,使用正則表達式提取空閒CPU百分比
  • .*, * : 匹配任何字符直到最後一個逗號和後面可能的空格
  • \([0-9.]*\) : 捕獲組,匹配數字和小數點組成的數字(即空閒百分比的值)
  • %* id.* : 匹配可能的百分號、空格、"id"和後面的所有字符
  • \1 : 替換為捕獲組的內容(即空閒百分比的數值)
  • 例如,從上面的示例中,這會提取出"63.7"
  • awk '{print 100 - $1"%"}'
  • 接收sed輸出的空閒百分比數值
  • 用100減去這個數值,得到CPU使用率
  • 添加百分號並輸出結果
  • 在這個例子中,100 - 63.7 = 36.3%(注意:這裏的數值只是示例,實際輸出取決於系統狀態)

2、使用mpstat工具(sysstat包的一部分)可以獲取每個核心的詳細信息。

  • mpstat -P ALL 是一個用於監控多核CPU性能的強大命令。它屬於 sysstat 包,提供了每個CPU核心(包括所有核心的平均值)的詳細性能統計信息。功能説明
  • mpstat :Multi-Processor Statistics 的縮寫,專門用於報告CPU相關統計信息
  • -P ALL :參數表示顯示所有CPU核心的統計數據,包括總體平均值
[root@FDP1 config]# mpstat -P ALL
Linux 3.10.0-862.el7.x86_64 (FDP1)      2025年11月25日  _x86_64_        (8 CPU)
13時24分21秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
13時24分21秒  all   18.21    0.00   10.13    0.28    0.00    1.60    0.00    0.00    0.00   69.78
13時24分21秒    0   30.93    0.00    8.09    0.16    0.00    9.82    0.00    0.00    0.00   51.00
13時24分21秒    1   15.93    0.00   10.13    0.30    0.00    0.74    0.00    0.00    0.00   72.89
13時24分21秒    2   16.41    0.00   10.42    0.30    0.00    0.51    0.00    0.00    0.00   72.37
13時24分21秒    3   15.95    0.00   10.55    0.30    0.00    0.39    0.00    0.00    0.00   72.81
13時24分21秒    4   16.35    0.00   10.55    0.30    0.00    0.33    0.00    0.00    0.00   72.48
13時24分21秒    5   16.59    0.00   10.49    0.30    0.00    0.30    0.00    0.00    0.00   72.32
13時24分21秒    6   16.56    0.00   10.44    0.30    0.00    0.28    0.00    0.00    0.00   72.42
13時24分21秒    7   16.70    0.00   10.38    0.30    0.00    0.26    0.00    0.00    0.00   72.36