Cpu

如何在 Linux 上獲取整體 CPU 使用率(例如 57%)

  • January 16, 2022

例如,我想知道如何獲取系統 CPU 使用率並使用 bash 以百分比表示。

樣本輸出:

57%

如果有多個核心,最好能計算出平均百分比。

這樣做可以查看整體 CPU 使用率。這呼叫python3並使用了跨平台psutil模組

printf "%b" "import psutil\nprint('{}%'.format(psutil.cpu_percent(interval=2)))" | python3

interval=2部分錶示要在 2 秒的阻塞時間內測量總 CPU 負載。

樣本輸出:

9.4%

它包含的python程序是這樣的:

import psutil

print('{}%'.format(psutil.cpu_percent(interval=2)))

放在time呼叫前面證明在這種情況下它需要大約2秒的指定間隔時間。這是呼叫和輸出:

$ time printf "%b" "import psutil\nprint('{}%'.format(psutil.cpu_percent(interval=2)))" | python3
9.5%

real    0m2.127s
user    0m0.119s
sys 0m0.008s

要查看單個核心的輸出,讓我們使用下面的這個 python 程序。首先,我獲得“per CPU”資訊的python 列表(數組),然後對該列表中的所有內容進行平均以獲得“total % CPU”類型值。然後我列印總和單個核心百分比。

蟒蛇程序:

import psutil

cpu_percent_cores = psutil.cpu_percent(interval=2, percpu=True)
avg = sum(cpu_percent_cores)/len(cpu_percent_cores)
cpu_percent_total_str = ('%.2f' % avg) + '%'
cpu_percent_cores_str = [('%.2f' % x) + '%' for x in cpu_percent_cores]
print('Total: {}'.format(cpu_percent_total_str))
print('Individual CPUs: {}'.format('  '.join(cpu_percent_cores_str)))

如果您願意,可以將其包裝成一個非常醜陋的 1 行 bash 腳本,就像這樣。我必須確保在 Python 程序中只使用單引號''""

printf "%b" "import psutil\n\
cpu_percent_cores = psutil.cpu_percent(interval=2, percpu=True)\n\
avg = sum(cpu_percent_cores)/len(cpu_percent_cores)\n\
cpu_percent_total_str = ('%.2f' % avg) + '%'\n\
cpu_percent_cores_str = [('%.2f' % x) + '%' for x in cpu_percent_cores]\n\
print('Total: {}'.format(cpu_percent_total_str))\n\
print('Individual CPUs: {}'.format('  '.join(cpu_percent_cores_str)))\n\
" | python3

範例輸出:請注意我有 8 個核心,因此“Individual CPUs:”後面有 8 個數字:

Total: 10.15%
Individual CPUs: 11.00%  8.50%  11.90%  8.50%  9.90%  7.60%  11.50%  12.30%

有關python 呼叫****如何工作的更多資訊psutil.cpu_percent(interval=2),請參閱此處的官方psutil.cpu_percent(interval=None, percpu=False)文件

psutil.cpu_percent(interval=None, percpu=False)

返回一個浮點數,以百分比表示目前系統範圍的 CPU 使用率。當間隔為 > 時,0.0比較間隔之前和之後經過的系統 CPU 時間(阻塞)。當間隔是0.0None比較自上次呼叫或模組導入以來經過的系統 CPU 時間時,立即返回。這意味著第一次呼叫它時,它會返回一個0.0你應該忽略的無意義的值。在這種情況下,為了準確起見,建議在兩次呼叫之間至少0.1間隔幾秒鐘呼叫此函式。當 percpu 為 True 時,返回一個浮點列表,表示每個 CPU 的使用率百分比。列表的第一個元素指的是第一個 CPU,第二個元素指的是第二個 CPU,依此類推。列表的順序在呼叫之間是一致的。

**警告:**第一次使用間隔 = 呼叫此函式時0.0None它將返回一個0.0您應該忽略的無意義值。

參考:

  1. Stack Overflow:如何在 Python 中獲取目前的 CPU 和 RAM 使用情況?
  2. 堆棧溢出:在單行命令行中執行多行語句?
  3. https://stackoverflow.com/questions/6149006/how-to-display-a-float-with-two-decimal-places
  4. https://stackoverflow.com/questions/9039961/finding-the-average-of-a-list/9040000#9040000

引用自:https://unix.stackexchange.com/questions/686424