在“ps”命令輸出欄位中,%CPU不是程序的實際CPU使用率嗎?
例如,此 BSD 風格命令的輸出欄位之一
ps aux
是“%CPU”。替代命令ps -efl
輸出“C”(或 CP)欄位。根據
ps
手冊頁:
- %CPU是“##.#”格式的程序的cpu使用率。目前,它是使用的 CPU 時間除以程序已執行的時間(cputime/realtime 比率),以百分比表示。
- C本質上是 %CPU 表示為一個整數
這就是
ps
手冊頁詳細說明 %CPU 或 C 的方式。但網際網路上的大多數書籍和網站都簡單地說,%CPU or C is CPU usage of a process
.有人會認為這意味著一個程序使用的 CPU 處理能力佔 CPU 總可用處理能力的百分比。還是只有我一個人?
CPU 時間與實時的比率(以多種合理方式之一計算)是衡量一個程序使用的 CPU 處理能力佔 CPU 可用總處理能力的百分比。
系統中的每個程序都可以處於兩種狀態:它要麼在處理器上執行,要麼正在等待(現實情況比這要復雜一些,並且有更多的程序狀態,但為了簡單起見,這個答案沒有t 區分非執行狀態,如可執行、可中斷等待、不可中斷等待等)。
普通程序通常會在處理器上執行一些時間,然後等待事件發生(例如,數據到達網路連接、磁碟 I/O 完成、鎖定可用、CPU 在可執行程序完成後再次可用用完它的時間量)。
一個程序在某個時間間隔內在處理器上執行的時間與這個間隔長度的比率是一個非常有趣的特性。程序在這個特性上可能會有很大的不同,例如,一個執行科學計算程序的程序很可能最終會使用大量的 CPU 和很少的 I/O,而您的 shell 主要等待 I/O 並偶爾進行一些處理。
在理想情況下(沒有來自調度程序的成本,沒有中斷等)並且通過完美的測量,系統上每個程序在一秒鐘內使用的 CPU 時間總和將小於一秒,剩餘時間是空閒 CPU 時間。隨著您添加更多程序,尤其是受 CPU 限制的程序,空閒 CPU 時間比例會縮小,並且所有程序在每秒內使用的總 CPU 時間量接近一秒。此時,添加額外程序可能會導致可執行程序等待 CPU,從而增加執行隊列長度(從而增加平均負載)並最終減慢系統速度。
請注意,將程序的整個 CPU 時間與自啟動以來所用時間的簡單比率最終代表程序的平均CPU 使用率。由於某些程序在執行時會改變行為(例如,等待查詢的數據庫伺服器與執行許多複雜查詢的同一數據庫伺服器),因此了解最近的 CPU 使用率通常更有趣。出於這個原因,某些系統(例如 FreeBSD、Mac OS X)根據此手冊頁採用衰減平均值:
程序的CPU使用率;這是之前(實際)時間最多一分鐘的衰減平均值。由於計算它的時間基數不同(因為程序可能非常年輕),所有 %cpu 欄位的總和可能超過 100%。
Linux 有一個簡化的記帳,可以根據此手冊頁為您提供 CPU 使用率:
CPU 使用率目前表示為在程序的整個生命週期中執行所花費的時間百分比。這並不理想,並且不符合 ps 在其他方面符合的標準。CPU 使用率加起來不太可能達到 100%。