Linux CPU監控指標
Linux提供了非常豐富的命令可以進行CPU相關數據進行監控,例如:top、vmstat等命令。top是一個動態顯示過程,即可以通過用戶按鍵來不斷刷新當前狀態。如果在前台執行該命令,它將獨占前台,直到用戶終止該程序為止,比較准確的說,top命令提供了實時的對系統處理器的狀態監視,它將顯示系統中 CPU 最“敏感”的任務列表。該命令可以按 CPU 使用,內存使用和執行時間對任務進行排序;而且該命令的很多特性都可以通過交互式命令或者在個人定制文件中進行設定。
top命令提供如下參數:
top [-] [d delay] [p pid] [q] [c] [C] [S] [s] [i] [n iter] [b]
選項名 稱 | 說明 |
d delay | 指定每兩次屏幕信息刷新之間的時間間隔(delay 即為具體的間隔時間數值,它的單位是秒),可以使用 s交互命令來改變之。 |
p pid | 通過指定監控進程 ID(pid)來僅僅監控某個進程的狀態。 |
q | 該選項將使 top 沒有任何延遲的進行刷新。如果調用程序有超級用戶權限,那么 top 將以盡可能高的優先級運行。 |
c | 顯示整個命令行而不只是顯示命令名。 |
C | 顯示 CPU 總體信息而取代分別顯示每個 CPU 的信息,此參數僅對SMP 系統有效。 |
S | 指定累計模式。 |
s | 使 top 命令在安全模式中運行。這將去除交互命令所帶來的潛在危險。 |
i | 使 top 不顯示任何閑置或者僵死進程。 |
n iter | 指定 top命令迭代輸出的次數,iter為具體的迭代次數值。 |
b | "Batch"方式運行top,在這種方式下,所有來自終端的輸入都將被忽略(當然除了ctrl+c),該參數可以結合參數“n"運行指定迭代次數退出或者該進程被殺死。這是運行top輸出到啞終端或輸到非終端的默認運行方式 |
示例一
在控制台輸入“top”,回車如下:

top命令輸出信息包含兩部分內容:
第一部分為統計信息,包含五行數據信息;第二部分為詳細信息,顯示了各個進程的詳細信息。
有必要了解下統計信息部分的輸出信息內容的含義:
輸出信息 | 說明 |
19:47:24 | 當前時間 |
up 15 min | 系統運行時間 |
2 users | 當前登錄用戶數,這里是jzhou和root |
load average:0.02 , 0.14 , 0.21 | 系統負載,即任務隊列的平均長度。三個數值分別為1分鍾、5分鍾、15分鍾前到現在的平均值,即0.02,0.14,0.21 |
Tasks:122 total, 1 running,120 sleeping,0 stopped,1 zombie | 122個進程(任務),其中有2個處於運行狀態,120個處於睡眠狀態,沒有停止的進程,有1個僵屍進程 |
Cpus:0.7%us,0.7%sy,0.0%ni,97.6%id,0.0%wa,0.7%hi,0.3%si,0.0%st | Cpu運行狀態,用戶進程(user)占用CPU的0.7%,系統進程(system)占用CPU的0.7%,用戶進程沒有改變過優先級的進程,所以user nice值為0.0%,97.6%的CPU處於空閑狀態(idle),沒有等待的輸入輸出,所以iowait的值也為0.0%,硬件請求終端時間(hardware interrupt)占CPU的0.7%,軟終端請求時間占CPU的0.3%,st代表steal time,具體作用不是很清楚,網上說是為其它CPU預留的,不清楚 |
Mem:1035244k total,537528k used,497716k free,25816k buffers | 內存總量為1035244k,已使用的內存總量為537528k,497716k為空閑內存總量,25816k用作內核緩存的內存總量。(這是虛擬機的情況,物理機好像還有其它參數) |
Swap:0k total,0k used,0k free,351392k cached | 交換分區總量為0k,使用的交換分區總量為0k,空閑交換分區總量為0k,351392k為緩沖的交換區總量(cached)、內存中的內容被患處到交換區,而后又被換入到內存,但使用過的交換區尚未被覆蓋,該數值即為這些內容已存在於內存中的交換區的大小。相應的內存再次被換出時可不必再對交換區寫入。 |
輸出信息 | 說明 |
PID | 進程標識符 |
USER | 進程所有者用戶名 |
PR/PRI | 進程執行的優先級 |
NI | NICE值,負值表示高優先級,正值表示低優先級 |
VIRT | 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES |
RES | 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA |
SHR | 共享內存大小,單位kb |
S/STAT | 進程狀態 D:不可中斷的睡眠狀態 R:正在運行,或在隊列中的進程 S:處於休眠狀態 T:停止或被追蹤 Z:僵屍進程 W:進入內存交換 X:死掉的進程 |
%CPU | 上次更新到現在的CPU時間占用百分比 |
%MEN | 進程使用的物理內存百分比 |
TIME+ | 進程使用的CPU時間總計,單位1/100s |
COMMAND | 進程被執行的命令名稱 |
示例二
vmstat 命令,可以使您能夠在同一行看到系統的內存、CPU 等使用情況,通常您可以用該命令來查看CPU 的利用率和飽和度。
先連接兩個概念:
CPU利用率:CPU利用率可以使用 vmstat通過從 100減去 id 或者 us與 sy之和來計算CPU 利用率
CPU飽和度:CPU 飽和度可以通過 vmstat 命令的“procs:r”來作為衡量標准,由於它是所有 cpu 運行隊列的合計值,因此將 procs:r 除以 CPU 數目所得到的值可與其他服務器相比較。
任何持續不變的非零值都會引起性能的下降,但性能的下降是逐漸的。
vmstat命令參數如下:
vmstat [-n] [delay [count]]
也有必要了解下vmstat命令參數的含義:
參數名稱 | 說明 |
n | 通過這個開關參數,如果啟用它則僅顯示一次表頭信息 |
delay | 指定每兩次屏幕信息刷新之間的時間間隔,單位:s |
count | 在結合delay參數使用時,如果給指定數值,則運行指定的次數后退出,否則將無限次運行 |
在控制台輸入“vmstat –n 1”,回車執行后,該命令即為僅顯示一次標頭信息,每隔 1 秒鍾顯示一次 vmstat監控信息

然后了解下輸出信息內容各部分代表的含義:


示例三
還可以通過“uptime”命令來獲得 CPU 平均負載的情況。平均負載的計算通常描述為可運行和運行線程的平均數目。舉例來說,如果一枚單CPU 服務器上有1 個運行線程占用了 CPU,有3 個運行進程在調度程序隊列中,那么平均負載即為 1+3=4。對於一枚 16CPU 的服務器,負載是16 個運行線程,有 24 個運行進程在調度程序隊列中,那么平均負載是 40。如果平均負載始終高於CPU 的數目,則可能導致應用程序性能的下降。需要說明的是平均負載只適用於CPU 負載的初始估算,深入的分析我們還需要借助於其他工具來做。再對 CPU平均負載有一個初步了解以后,讓我們來看看該命令是如何使用的,它的輸出內容又包含那些內容。
因為“uptime”命令僅提供了一個可選參數項“V”,即:顯示該命令的版本信息,所以不用敘述了。
在控制台輸入“uptime”,回車執行后,運行結果:

可以看到“load average:0.53,0.65,0.34”即為 CPU 平均負載對應系統在第 1分鍾,5 分鍾和 15 分鍾的平均負載值。同時它們也代表 CPU 利用率和飽和度。如果 CPU 數目和平均負載的值相等,通常代表 100%的 CPU利用率,小於 CPU數目,則表示利用率小於 100%,大於 CPU數目需要用飽和度來衡量。