Linux top命令用於實時顯示 process 的動態。
使用許可權:所有使用者。
top [選項]
選項:
-d 秒數:指定 top 命令每隔幾秒更新。預設是 3 秒;
-b:使用批處理模式輸出。一般和”-n”選項合用,用於把 top 命令重定向到檔案中;
-n 次數:指定 top 命令執行的次數。一般和”-“選項合用;
-p 程式PID:僅檢視指定 ID 的程式;
-s:使 top 命令在安全模式中執行,避免在互動模式中出現錯誤;
-u 使用者名稱:只監聽某個使用者的程式;
-q : 沒有任何延遲的進行重新整理,如果呼叫程式有超級使用者許可權,那麼top將以儘可能高的優先順序執行;
-c : 切換顯示模式,共有兩種模式,一是隻顯示執行檔的名稱,另一種是顯示完整的路徑與名稱S : 累積模式,會將己完成或消失的子行程 ( dead child process ) 的 CPU time 累積起來;
-i : 不顯示任何閒置 (idle) 或僵死 (zombie) 的行程
在 top 命令的顯示視窗中,還可以使用如下按鍵進行互動操作:
- h:顯示幫助畫面,給出一些簡短的命令總結說明
- k: 終止一個程式。
- i: 忽略閒置和僵死程式。這是一個開關式命令。
- q: 退出程式
- r: 重新安排一個程式的優先順序別
- S: 切換到累計模式
- s: 改變兩次重新整理之間的延遲時間(單位為s
- f:或者F 從當前顯示中新增或者刪除專案
- o或者O: 改變顯示專案的順序
- l: 切換顯示平均負載和啟動時間資訊
- m:切換顯示記憶體資訊
- t: 切換顯示程式和CPU狀態資訊
- c: 切換顯示命令名稱和完整命令列
- M:根據駐留記憶體大小進行排序
- P: 根據CPU使用百分比大小進行排序
- T: 根據時間/累計時間進行排序
- W:將當前設定寫入~/.toprc檔案中
- q:退出 top 命令;
統計資訊區前五行是系統整體的統計資訊。
第一行為任務佇列資訊
top - 12:08:29【當前時間】 up 343 days, 14:59【系統執行時間】, 2 users【當前登入使用者數】, load average: 0.00, 0.01, 0.05【系統負載】
系統負載,即任務佇列的平均長度。 三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。如果 CPU 是單核的,則這個數值超過 1 就是高負載:如果 CPU 是四核的,則這個數值超過 4 就是高負載
第二行為程式資訊
Tasks: 72 total【程式總數】, 1 running【正在執行的程式數】, 70 sleeping【睡眠的程式數】, 1 stopped【停止的程式數】, 0 zombie【殭屍程式數】
第三行為CPU的資訊
%Cpu(s): 0.3 us【使用者空間佔用CPU百分比】, 0.3 sy【核心空間佔用CPU百分比】, 0.0 ni【改變過優先順序的程式佔用CPU的百分比】, 99.3 id【空閒CPU百分比】, 0.0 wa【IO等待佔用CPU的百分比】, 0.0 hi【硬中斷(Hardware IRQ)佔用CPU的百分比】, 0.0 si【軟中斷(Software Interrupts)佔用CPU的百分比】, 0.0 st【虛擬時間百分比】
當有多個CPU時,這些內容可能會不止一行。
st(steal time)意為虛擬時間百分比,就是當有虛擬機器時,虛擬 CPU 等待實際 CPU 的時間百分比
第四行為實體記憶體使用資訊
KiB Mem : 1883724 total【實體記憶體總量】, 126704 free【空閒記憶體總量】, 827496 used【使用的實體記憶體總量】, 929524 buff/cache【用作核心快取的記憶體量】
第五行為虛擬記憶體使用(交換空間) 資訊
KiB Swap: 0 total【交換區總量】, 0 free【空閒交換區總量】, 0 used【使用的交換區總量】. 882208 avail Mem 【緩衝的交換區總量】
緩衝(buffer)和(cache)的區別:
- 快取(cache)是在讀取硬碟中的資料時,把最常用的資料儲存在記憶體的快取區中,再次讀取該資料時,就不去硬碟中讀取了,而在快取中讀取。
- 緩衝(buffer)是在向硬碟寫入資料時,先把資料放入緩衝區,然後再一起向硬碟寫入,把分散的寫操作集中進行,減少磁碟碎片和硬碟的反覆尋道,從而提高系統效能。
簡單來說,快取(cache)是用來加速資料從硬碟中”讀取”的,而緩衝(buffer)是用來加速資料”寫入”硬碟的。
可用記憶體=free + buffer + cached
對於記憶體監控,在top裡我們要時刻監控第五行swap交換分割槽的used,如果這個數值在不斷的變化,說明核心在不斷進行記憶體和swap的資料交換,這是真正的記憶體不夠用了。
PID【程式id】 USER【程式所有者的使用者名稱】 PR【優先順序】 NI【nice值】 VIRT【程式使用的虛擬記憶體總量】 RES【程式使用的、未被換出的實體記憶體大小】 SHR【共享記憶體大小】 S【程式狀態】 %CPU【上次更新到現在的CPU時間佔用百分比】 %MEM【程式使用的實體記憶體百分比】 TIME+【程式使用的CPU時間總計】 COMMAND【命令名/命令列】
更多列資訊如下表所示。
列名 | 含義 |
---|---|
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 |
# 監控java執行緒數
ps -eLf | grep java | wc -l
# 監控網路客戶連線數
netstat -n | grep tcp | grep 偵聽埠 | wc -l
本作品採用《CC 協議》,轉載必須註明作者和本文連結