linux系統下top命令的詳細用法、引數詳解、以及模式配置
用過linux系統的人都知道top命令,它是Linux下一個最常用的效能分析工具,能夠實時顯示系統中各個程序的資源佔用狀況,類似於Windows的工作管理員。
top顯示系統當前的程序和其他狀況,是一個動態顯示過程,即可以通過使用者按鍵來不斷重新整理當前狀態。如果在前臺執行該命令,它將獨佔前臺直到使用者終止該程式為止。比較準確的說,top命令提供了實時的對系統處理器的狀態監視。它顯示系統中CPU最“敏感”的任務列表,並可以按CPU使用、記憶體使用和執行時間對任務進行排序;而且該命令的很多特性都可以通過互動式命令或者在個人定製檔案中進行設定。下面就一一道來。
一、命令用法
首先解釋一下該命令的具體用法。
top使用格式:
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
引數說明:
- d 指定每兩次螢幕資訊重新整理之間的時間間隔;
- p 通過指定監控程序ID來僅僅監控某個程序的狀態;
- q 該選項將使top沒有任何延遲的進行重新整理。如果呼叫程式有超級使用者許可權,那麼top將以儘可能高的優先順序執行;
- S 指定累計模式;
- s 使top命令在安全模式中執行。這將去除互動命令所帶來的潛在危險;
- i 使top不顯示任何閒置或者僵死程序;
- c 顯示整個命令列而不只是顯示命令名;
比如:
top // 每隔5秒顯式所有程序的資源佔用情況; top -d 2 // 每隔2秒顯式所有程序的資源佔用情況; top -c // 每隔5秒顯式程序的資源佔用情況,並顯示程序的命令列引數(預設只有程序名); top -p 12345 -p 6789 // 每隔5秒顯示pid是12345和pid是6789的兩個程序的資源佔用情況; top -d 2 -c -p 123456 // 每隔2秒顯示pid是12345的程序的資源使用情況,並顯式該程序啟動的命令列引數;
二、例項解讀
然後,我們結合實際的例子,來聊一聊該命令執行過程中所輸出的資訊,如何進行解讀:
第一行:執行概覽
top - 09:15:56 up 31 min, 2 users, load average: 0.01, 0.03, 0.05
內容 | 含義 |
---|---|
09:15:56 | 當前系統時間 |
up 31 min | 系統已經運行了31分鐘(在這期間沒有重啟過) |
2 users | 當前有2個使用者登入系統 |
load average: 0.01, 0.03, 0.05 | 過去1分鐘、5分鐘、15分鐘內系統的負載情況 |
注:load average資料是每隔5秒鐘檢查一次活躍的程序數,然後按特定演算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。
第二行:任務概覽
Tasks: 191 total, 2 running, 189 sleeping, 0 stopped, 0 zombie
這一行比較簡單,就不多解釋了,只說明一點,zombie表示殭屍程序,不理解的可自行百度。
第三行:CPU狀態
%Cpu(s): 0.7 us, 0.5 sy, 0.0 ni, 98.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
內容 | 含義 |
---|---|
0.7 us | 使用者空間所佔百分比 |
0.5 sy | 核心空間所佔百分比 |
0.0 ni | 改變過優先順序的程序所佔百分比 |
98.8 id | 空閒程序所佔百分比 |
0.0 wa | IO等待程序所佔百分比 |
0.0 hi | 硬中斷(Hardware IRQ)所佔百分比 |
0.0 si | 軟中斷(Software Interrupts)所佔百分比 |
0.0 st | 虛擬機器所佔百分比 |
同樣也要說明一點,這裡CPU的使用比率和windows概念不同,如果你不理解使用者空間和核心空間,自行百度吧。
第四行:記憶體狀態
KiB Mem: 3081144 total, 1445648 used, 1635496 free, 323064 buffers
KiB Swap: 4191228 total, 0 used, 4191228 free. 527176 cached Mem
內容 | 含義 |
---|---|
3081144 total | 實體記憶體總量(3G) |
1445648 used | 使用中的記憶體總量(1.38GB) |
1635496 free | 空閒記憶體總量(1.56G) |
323064 buffers | 快取的記憶體量 (315M) |
4191228 total | 交換分割槽總量(4G) |
0 used | 已使用的交換分割槽(0) |
4191228 free | 空閒狀態的交換分割槽(4G) |
527176 cached Mem | 緩衝狀態的交換分割槽(514K) |
這裡要說明一下,我們不能用windows的記憶體概念來理解這些資料,Linux的記憶體管理有其特殊性,複雜點需要一本書來說明,這裡只是簡單說點和我們傳統概念(windows)的不同。
MEM一行中使用中的記憶體總量(used)指的是現在系統核心控制的記憶體數,空閒記憶體總量(free)是核心還未納入其管控範圍的數量。納入核心管理的記憶體不見得都在使用中,還包括過去使用過的現在可以被重複利用的記憶體,核心並不把這些可被重新使用的記憶體交還到free中去,因此在linux上free記憶體會越來越少,但不用為此擔心。
對於記憶體監控,在top裡我們要時刻監控SWAP一行中的已用數值used,如果這個數值在不斷的變化,說明核心在不斷進行記憶體和swap的資料交換,這是真正的記憶體不夠用了。
剩餘行:程序詳情
首先說明一點,上述命令的顯示狀態,是在Ubuntu 14.04(64位)系統的預設狀態下所顯示的。在其他的系統下,或者同一個系統的不同設定狀態下,top命令所顯示出來的列專案是有所區別的,有可能與上述圖片中的不一樣。換句話說,top命令其實能顯示非常多的專案資訊,遠不止上述圖片中所述,究竟有哪些呢,如下表所述:
序號 | 名稱 | 含義 |
---|---|---|
a | PID | 程序id |
b | PPID | 父程序id |
c | RUSER | Real user name |
d | UID | 程序所有者的使用者id |
e | USER | 程序所有者的使用者名稱 |
f | GROUP | 程序所有者的組名 |
g | TTY | 啟動程序的終端名。不是從終端啟動的程序則顯示為? |
h | PR | 優先順序 |
i | NI | nice值。負值表示高優先順序,正值表示低優先順序 |
j | P | 最後使用的CPU,僅在多CPU環境下有意義 |
k | %CPU | 上次更新到現在的CPU時間佔用百分比 |
l | TIME | 程序使用的CPU時間總計,單位秒 |
m | TIME+ | 程序使用的CPU時間總計,單位1/100秒 |
n | %MEM | 程序使用的實體記憶體百分比 |
o | VIRT | 程序使用的虛擬記憶體總量,單位kb。VIRT=SWAP+RES |
p | SWAP | 程序使用的虛擬記憶體中,被換出的大小,單位kb |
q | RES | 程序使用的、未被換出的實體記憶體大小,單位kb。RES=CODE+DATA |
r | CODE | 可執行程式碼佔用的實體記憶體大小,單位kb |
s | DATA | 可執行程式碼以外的部分(資料段+棧)佔用的實體記憶體大小,單位kb |
t | SHR | 共享記憶體大小,單位kb |
u | nFLT | 頁面錯誤次數 |
v | nDRT | 最後一次寫入到現在,被修改過的頁面數 |
w | S | 程序狀態(D=不可中斷的睡眠狀態,R=執行,S=睡眠,T=跟蹤/停止,Z=殭屍程序) |
x | COMMAND | 命令名/命令列 |
y | WCHAN | 若該程序在睡眠,則顯示睡眠中的系統函式名 |
z | Flags | 任務標誌,參考 sched.h |
從上表可以看出,其實top命令可以顯示的資訊列最多有26列,每一列的代號分別對應為a-z,只不過在預設狀態下,系統只顯示其中比較重要的【PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND】列,而使用者是完全通過指定的方式可以進行隨意增減的。同時,在top命令執行的過程中,還可以進行一些其他的自定義設定,包括重新整理速度、排序方式等,那麼,究竟應該如何操作呢?請看下節:
三、個性化設定
上文說到,可以在輸入top命令的時候攜帶一些引數來進行配置,可是有時候,輸入top命令的時候,並不很清楚它的執行狀態,有些引數也不知道如何設定,比如排序模式、需要顯示的列等,而是要等到top命令執行起來了,才好進行設定。因此,有沒有一種方法是在top命令執行的過程中,能夠對其顯示的模式、內容等進行臨時的設定呢?
答案當然是有的!下面就介紹一下在top命令執行過程中可以使用的一些互動命令。從使用角度來看,熟練的掌握這些命令比掌握選項還重要一些。
- h或者? 顯示幫助畫面,給出一些簡短的命令總結說明;
- k 終止一個程序。系統將提示使用者輸入需要終止的程序PID,以及需要傳送給該程序什麼樣的訊號。一般的終止程序可以使用15訊號;如果不能正常結束那就使用訊號9強制結束該程序。預設值是訊號15。在安全模式中此命令被遮蔽;
- i 忽略閒置和僵死程序。這是一個開關式命令;
- q 退出程式;
- r 重新安排一個程序的優先級別。系統提示使用者輸入需要改變的程序PID以及需要設定的程序優先順序值。輸入一個正值將使優先順序降低,反之則可以使該程序擁有更高的優先權。預設值是10;
- S 切換到累計模式;
- s 改變兩次重新整理之間的延遲時間。系統將提示使用者輸入新的時間,單位為s。如果有小數,就換算成ms。輸入0值則系統將不斷重新整理,預設值是5s;
- f或者F 從當前顯示中新增或者刪除專案。按下此鍵之後,系統會進入配置介面,顯示出目前所能支援的全部條目,使用者可以進行自定義的刪減和配置;
- o或者O 改變顯示專案的順序;
- l 切換顯示平均負載和啟動時間資訊;
- m 切換顯示記憶體資訊;
- t 切換要不要顯示程序和CPU狀態資訊這兩行;
- c 切換顯示命令名稱和完整命令列;
- M 根據記憶體大小進行排序;
- P 根據CPU使用百分比大小進行排序;
- T 根據時間/累計時間進行排序;
- W 將當前設定寫入~/.toprc檔案中。這是寫top配置檔案的推薦方法;
怎麼樣,是不是非常靈活?自己去試試吧?