細講top命令

Brewin發表於2020-09-25

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

Linux top命令

Linux top命令的用法詳細詳解

Linux top命令詳解:持續監聽程式執行狀態

本作品採用《CC 協議》,轉載必須註明作者和本文連結