天天看點

linux性能分析指令-ps

1. 簡介

ps 為我們提供了程序的一次性的檢視,它所提供的檢視結果并不動态連續的;如果想對程序時間監控,應該用 top 工具。

2. 指令參數

ps a 顯示現行終端機下的所有程式,包括其他使用者的程式。
ps -A 顯示所有程序。
ps c 列出程式時,顯示每個程式真正的指令名稱,而不包含路徑,參數或常駐服務的标示。
ps -e 此參數的效果和指定"A"參數相同。
ps e 列出程式時,顯示每個程式所使用的環境變量。
ps f 用ASCII字元顯示樹狀結構,表達程式間的互相關系。
ps -H 顯示樹狀結構,表示程式間的互相關系。
ps j 用任務格式來顯示程序;
ps l 長格式輸出;
ps -N 顯示所有的程式,除了執行ps指令終端機下的程式之外。
ps r 顯示運作中的程序;
ps s 采用程式信号的格式顯示程式狀況。
ps S 列出程式時,包括已中斷的子程式資料。
ps -t<終端機編号>  指定終端機編号,并列出屬于該終端機的程式的狀況。
ps u  按使用者名和啟動時間的順序來顯示程序。
ps x  顯示無控制終端的程序。
ps ww 避免詳細參數被截斷;
最常用的方法是ps -aux,然後再利用一個管道符号導向到grep去查找特定的程序,然後再對特定的程序進行操作。      

我們常用的選項是組合是 aux 或 lax,還有參數 f 的應用。

3. 輸出說明

運作 ps aux 的到如下資訊:

$ 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
htt    3563    0.0    0.0    2956    196    ?    Ss    20:41    0:00    /usr/sbin/htt -retryonerror 0
htt    3564    0.0    1.7    29460    3704    ?    Sl    20:41    0:00    htt_server -nodaemon
root    3574    0.0    0.4    5236    992    ?    Ss    20:41    0:00    crond
xfs    3617    0.0    1.3    13572    2804    ?    Ss    20:41    0:00    xfs -droppriv -daemon
root    3627    0.0    0.2    3448    552    ?    SNs    20:41    0:00    anacron -s
root    3636    0.0    0.1    2304    420    ?    Ss    20:41    0:00    /usr/sbin/atd
dbus    3655    0.0    0.5    13840    1084    ?    Ssl    20:41    0:00    dbus-daemon-1 --system      

Head标頭:

USER    使用者名
UID    使用者ID(User ID)
PID    程序ID(Process ID)
PPID    父程序的程序ID(Parent Process id)
SID    會話ID(Session id)
%CPU    程序的cpu占用率
%MEM    程序的記憶體占用率
VSZ    程序所使用的虛存的大小(Virtual Size)
RSS    程序使用的駐留集大小或者是實際記憶體的大小,Kbytes位元組。
TTY    與程序關聯的終端(tty)

STAT    程序的狀态:程序狀态使用字元表示的(STAT的狀态碼)
R 運作    Runnable (on run queue)            正在運作或在運作隊列中等待。
S 睡眠    Sleeping                休眠中, 受阻, 在等待某個條件的形成或接受到信号。
I 空閑    Idle
Z 僵死    Zombie(a defunct process)        程序已終止, 但程序描述符存在, 直到父程序調用wait4()系統調用後釋放。
D 不可中斷    Uninterruptible sleep (ususally IO)    收到信号不喚醒和不可運作, 程序必須等待直到有中斷發生。
T 終止    Terminate                程序收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号後停止運作運作。

P 等待交換頁
W 無駐留頁    has no resident pages        沒有足夠的記憶體分頁可配置設定。
X 死掉的程序
< 高優先級程序                    高優先序的程序
N 低優先    級程序                    低優先序的程序
L 記憶體鎖頁    Lock                有記憶體分頁配置設定并縮在記憶體内
s 程序的上司者(在它之下有子程序);
l 多程序的(使用 CLONE_THREAD, 類似 NPTL pthreads)
+ 位于背景的程序組 
START    程序啟動時間和日期
TIME    程序使用的總cpu時間
COMMAND    正在執行的指令行指令
NI    優先級(Nice)
PRI    程序優先級編号(Priority)
WCHAN    程序正在睡眠的核心函數名稱;該函數的名稱是從/root/system.map檔案中獲得的。
FLAGS    與程序相關的數字辨別
args 指令參數      

4. 示例

檢視目前系統程序的uid,pid,stat,pri, 以uid号排序.
ps -eo pid,stat,pri,uid –sort uid

檢視目前系統程序的user,pid,stat,rss,args, 以rss排序.
ps -eo user,pid,stat,rss,args –sort rss

檢視所有程序詳細展示
ps axHww -o psr,user,pid,ppid,tid,tty,stat,%cpu,%mem,rss,vsz,wchan,args

檢視已經停止的程序
ps -A -ostat,ppid,pid,cmd | grep -e '^[T]'      

5. 殺死程序

kill 終止(殺死)程序,有十幾種控制程序的方法,下面是一些常用的方法:

$ kill -STOP [pid]      

發送SIGSTOP (17,19,23)停止一個程序,而并不消滅這個程序。

$ kill -CONT [pid]      

發送SIGCONT (19,18,25)重新開始一個停止的程序。

$ kill -KILL [pid]      
$ kill -9 -1      

繼續閱讀