top
Linux top命令用於實時顯示 process 的動態。
參數說明:
- d : 改變顯示的更新速度,或是在交談式指令列( interactive command)按 s
- q : 沒有任何延遲的顯示速度,如果使用者是有 superuser 的權限,則 top 將會以最高的優先序執行
- c : 切換顯示模式,共有兩種模式,一是隻顯示執行檔的名稱,另一種是顯示完整的路徑與名稱S : 累積模式,會將己完成或消失的子行程 (
dead child process ) 的 CPU time 累積起來 - s : 安全模式,將交談式指令取消, 避免潛在的危機
- i : 不顯示任何閒置 (idle) 或無用 (zombie) 的行程
- n : 更新的次數,完成後將會退出 top
- b : 批次檔模式,搭配 “n” 參數一起使用,可以用來將 top 的結果輸出到檔案內
常見用法
顯示更新十次後退出
top -n 10
顯示特定的進程信息
top -p {pid_id}
選擇展示top的常用指標
進入top頁面,按f鍵
指標詳解
load average:顯示的是最近1分鐘、5分鐘和15分鐘的系統平均負載,即任務隊列的平均長度。
監控標準:單個CPU的平均負載= load average / CPU核心數
- 單個CPU的平均負載在0.7的上下時,應該考慮就去花時間調查原因。
- 系統負載長期徘徊於 1.00,那麼就應該馬上解決這個問題
Tasks: 29 total 進程總數爲29
1 running 正在運行的進程數
28 sleeping 睡眠的進程數
0 stopped 停止的進程數
0 zombie 殭屍進程數
Cpu(s):0.3% us 用戶空間佔用CPU百分比
1.0% sy 內核空間佔用CPU百分比
0.0% ni 用戶進程空間內改變過優先級的進程佔用CPU百分比
98.7% id 空閒CPU百分比
0.0% wa 等待輸入輸出的CPU時間百分比
0.0% hi 硬件中斷
0.0% si 軟件中斷
Mem表示具體的物理內存
swap 交換區總量
拓展延伸: 交換空間(swap space)# swap space 是磁盤上的一塊區域,可以是一個分區,也可以是一個文件。所以具體的實現可以是
swap 分區也可以是 swap
文件。當系統物理內存喫緊時(所謂的喫緊,應該是指當釋放了Cache和Buffer的內存,內存還是不夠用~),Linux
會將內存中不常訪問的數據保存到 swap 上,這樣系統就有更多的物理內存爲各個進程服務,而當系統需要訪問 swap 上存儲的內容時,再將
swap
上的數據加載到內存中,這就是常說的換出和換入。交換空間可以在一定程度上緩解內存不足的情況,但是它需要讀寫磁盤數據,所以性能不是很高。現在的機器一般都不太缺內存,如果系統默認還是使用了 swap
是不是會拖累系統的性能?理論上是的,但實際上可能性並不是很大。並且內核提供了一個叫做 swappiness
的參數,用於配置需要將內存中不常用的數據移到 swap 中去的緊迫程度。這個參數的取值範圍是 0~100,0
告訴內核儘可能的不要將內存數據移到 swap 中,也即只有在迫不得已的情況下才這麼做,而 100
告訴內核只要有可能,儘量的將內存中不常訪問的數據移到 swap 中。在 ubuntu 系統中,swappiness 的默認值是
60。如果我們覺着內存充足,可以在 /etc/sysctl.conf 文件中設置 swappiness:
vm.swappiness=10
如果系統的內存不足,則需要根據物理內存的大小來設置交換空間的大小。
內存統計的維度的含義如下:
total:總計物理內存的大小。
used:已使用的物理內存的大小。
free:可用物理內存有多少。
shared:多個進程共享的內存總額。
buffers:寫入磁盤內存緩衝區的大小(經常進行磁盤IO的效率比較低,所以先將要寫入磁盤的文件進行一定數量的緩衝,等緩衝數據到達一定大小是一次性寫進磁盤,提升效率)
cached:從磁盤中讀取內容的緩存大小(原理差不多)。
進程信息區統計信息區域的下方顯示了各個進程的詳細信息。首先來認識一下各列的含義
列名 | 含義 |
---|---|
PID | 進程id |
PPID | 父進程id |
RUSER | Real user name |
UID | 進程所有者的用戶id |
USER | 進程所有者的用戶名 |
GROUP | 進程所有者的組名 |
TTY | 啓動進程的終端名。不是從終端啓動的進程則顯示爲 ? |
PR | 優先級 |
NI | nice值。負值表示高優先級,正值表示低優先級 |
P | 最後使用的CPU,僅在多CPU環境下有意義 |
%CPU | 上次更新到現在的CPU時間佔用百分比 |
TIME | 進程使用的CPU時間總計,單位秒 |
TIME+ | 進程使用的CPU時間總計,單位1/100秒 |
%MEM | 進程使用的物理內存百分比 |
VIRT | 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES |
SWAP | 進程使用的虛擬內存中,被換出的大小,單位kb。 |
RES | 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA |
CODE | 可執行代碼佔用的物理內存大小,單位kb |
DATA | 可執行代碼以外的部分(數據段+棧)佔用的物理內存大小,單位kb |
SHR | 共享內存大小,單位kb |
nFLT | 頁面錯誤次數 |
nDRT | 最後一次寫入到現在,被修改過的頁面數。 |
S | 進程狀態。 |
進程狀態知識延伸
D | 不可中斷的睡眠狀態 |
R | 運行 |
S | 睡眠 |
T | 跟蹤/停止 |
Z | 殭屍進程 |
COMMAND | 命令名/命令行 |
WCHAN | 若該進程在睡眠,則顯示睡眠中的系統函數名 |
Flags | 任務標誌,參考 sched.h |