linux系統進程狀態查看命令

top

top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,監控linux的系統狀況,類似於Windows的任務管理器。
在這裏插入圖片描述

統計信息

前五行是系統整體的統計信息。

第一行是任務隊列信息,同 uptime 命令的執行結果。
第二、三行爲進程和CPU的信息。當有多個CPU時,這些內容可能會超過兩行。
最後兩行爲內存信息。具體內容如下:
在這裏插入圖片描述

在numa架構下,top後按3即可查看相應的numa上的cpu信息。意義如下:

us: is meaning of "user CPU time" 用戶空間佔用CPU百分比
sy: is meaning of "system CPU time"  內核空間佔用CPU百分比
ni: is meaning of" nice CPU time"  用戶進程空間內改變過優先級的進程佔用CPU百分比
id: is meaning of "idle" 空閒CPU百分比
wa: is meaning of "iowait" 等待輸入輸出的CPU時間百分比
hi:is meaning of "hardware irq" 硬件中斷
si : is meaning of "software irq" 軟件中斷
st : is meaning of "steal time" 是當 hypervisor 服務另一個虛擬處理器時,虛擬 CPU 等待實際 CPU 的時間的百分比

進程信息

統計信息下方類似表格區域顯示的是各個進程的詳細信息,默認5秒刷新一次。在top命令中按f按可以查看顯示的列信息,按對應字母來開啓/關閉列,大寫字母表示開啓,小寫字母表示關閉。帶*號的是默認列。

A: PID = (Process Id) 進程Id;
E: USER = (User Name) 進程所有者的用戶名;
H: PR = (Priority) 優先級
I: NI = (Nice value) nice值。負值表示高優先級,正值表示低優先級
O: VIRT = (Virtual Image (kb)) 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
Q: RES = (Resident size (kb)) 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
T: SHR = (Shared Mem size (kb)) 共享內存大小,單位kb
W: S = (Process Status) 進程狀態。D=不可中斷的睡眠狀態,R=運行,S=睡眠,T=跟蹤/停止,Z=殭屍進程
K: %CPU = (CPU usage) 上次更新到現在的CPU時間佔用百分比
N: %MEM = (Memory usage (RES)) 進程使用的物理內存百分比
M: TIME+ = (CPU Time, hundredths) 進程使用的CPU時間總計,單位1/100秒 
b: PPID = (Parent Process Pid) 父進程Id 
c: RUSER = (Real user name) 
d: UID = (User Id) 進程所有者的用戶id 
f: GROUP = (Group Name) 進程所有者的組名 
g: TTY = (Controlling Tty) 啓動進程的終端名。不是從終端啓動的進程則顯示爲 ? 
j: P = (Last used cpu (SMP)) 最後使用的CPU,僅在多CPU環境下有意義 
p: SWAP = (Swapped size (kb)) 進程使用的虛擬內存中,被換出的大小,單位kb 
l: TIME = (CPU Time) 進程使用的CPU時間總計,單位秒 
r: CODE = (Code size (kb)) 可執行代碼佔用的物理內存大小,單位kb 
s: DATA = (Data+Stack size (kb)) 可執行代碼以外的部分(數據段+棧)佔用的物理內存大小,單位kb 
u: nFLT = (Page Fault count) 頁面錯誤次數 
v: nDRT = (Dirty Pages count) 最後一次寫入到現在,被修改過的頁面數 
y: WCHAN = (Sleeping in Function) 若該進程在睡眠,則顯示睡眠中的系統函數名 
z: Flags = (Task Flags <sched.h>) 任務標誌,參考 sched.h
X: COMMAND = (Command name/line) 命令名/命令行

查看進程下的線程信息

top -H -p PID

perf

排查導致cpu利用率過高的函數

當我們需要排查cpu利用率過高的原因時,也可以用perf命令

// 查看某個進程各函數佔用
perf top -p PID

//使用下列命令可以看到函數的調用棧
perf record -ga sleep 5
perf report --no-children --sort=symbol
第一項敲回車打開調用棧

分析程序的cpu cache miss現象

perf stat -e L1-dcache-load-misses ./a.out

ps

查看進程佔用的cpu,mem大小

# ps -ef   顯示所有進程   
# ps -eo comm,pcpu  //顯示所有命令佔用的cpu的大小 
 e顯示所有進程,o指定命令的名字
# ps -eo comm,pmem  //顯示所有命令佔用的mem的大小
# ps -eo 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'  //顯示內存佔用等信息
ps aux
USER    PID   %CPU   %MEM     VSZ     RSS     TTY    STAT   START TIME COMMAND
smmsp   3521   0.0    0.7     6556    1616    ?      Ss      20:40 0:00 sendmail: Queue runner@01:00:00 f
root    3532   0.0    0.2     2428    452     ?      Ss      20:40 0:00 gpm -m /dev/input/mice -t imps2
dbus    3655   0.0    0.5     13840   1084    ?      Ssl     20:41 0:00 dbus-daemon-1 --system
....................................
解釋如下:
VSZ–進程的虛擬大小
RSS–駐留集的大小,可以理解爲當前實際佔用的物理內存(kb)
TTY–控制終端的ID
STAT–當前進程的狀態
STRAT–該進程啓動的時間
TIME–進程已經消耗的CPU時間,注意是消耗CPU的時間
COMMOND–命令的名稱和參數

STAT中的參數意義如下:
D 不可中斷 Uninterruptible(usually IO)
R 正在運行,或在隊列中的進程
S 處於休眠狀態
T 停止或被追蹤
Z 殭屍進程
W 進入內存交換(從內核2.6開始無效)
X   死掉的進程

< 高優先級
N 低優先級
L 有些頁被鎖進內存
s 包含子進程
+ 位於後臺的進程組
l 多線程,克隆線程

查看可用物理內存:

free -g
或
cat /proc/meminfo

查看進程啓動時間

ps -p PID -o lstart
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章