1、ps 有很多參數,不需要全部記住,只需要記住最有用的那些參數。
unix風格的參數
比如:ps -ef查看系統上運行的所有進程 ps -l 會產生一個長格式的輸出
》UID:啟動這些進程的用戶
》PID:進程ID
》PPID:父進程的進程ID,如果該進程是由另一個進程啟動的
》C:進程生命周期中的CPU利用率
》STIME:進程啟動時的系統時間
》TTY:進程啟動時的終端設備
》TIME:運行進程需要的累計CPU時間
》CMD:啟動的程序名稱
ps -V顯示ps命令的版本號
BSD類型的參數 ,參數前面都是不加破折號-的
》VSZ:進程在內存中的大小,以千字節KB為單位
》RSS:進程在未換出時占用的物理內存
》STAT:代表當前進程狀態的雙字符狀態碼,比unix風格輸出的單字符狀態碼(就是S列)更清楚的表示進程的當前狀態,+:該進程運行在前台,<該進程運行在高優先級上,N該進程運行在低優先級上,L該進程有頁面鎖定在內存中,s該進程是控制進程,l該進程是多線程的
GNU長參數
可以和unix和BSD格式的參數混合使用,最常用的命令就是ps --forest顯示進程的層級信息,並用ASCII字符繪出可愛的圖案
第一行:當前時間,系統的運行時間,登錄的用戶數以及系統的平均負載,平均負載有3個:最近1分鍾,最近5分鍾,最近15分鍾,值越大說明負載越高,由於進程短期的突發性活動,出現最近1分鍾的高負載值也很常見,但是如果最近15分鍾內的平均負載都很高,就說明系統可能有問題。負載值取決於系統額硬件配置以及系統上通常運行的程序,通常系統的負載值超過2,就說明負系統比較繁忙了。
us: user cpu time (or) % CPU time spent in user space
sy: system cpu time (or) % CPU time spent in kernel space
ni: user nice cpu time (or) % CPU time spent on low priority processes
id: idle cpu time (or) % CPU time spent idle
wa: io wait cpu time (or) % CPU time spent in wait (on disk)
hi: hardware irq (or) % CPU time spent servicing/handling hardware interrupts
si: software irq (or) % CPU time spent servicing/handling software interrupts
st: steal time - - % CPU time in involuntary wait by virtual cpu while hypervisor is servicing another processor (or) % CPU time stolen from a virtual machine
翻譯一下:
us:用戶態使用的cpu時間比
sy:系統態使用的cpu時間比
ni:用做nice加權的進程分配的用戶態cpu時間比
id:空閑的cpu時間比
wa:cpu等待磁盤寫入完成時間
hi:硬中斷消耗時間
si:軟中斷消耗時間
st:虛擬機偷取時間
cpu消耗在kernel space的時候就是sy(系統態使用的cpu百分比),cpu消耗在user space的時候就是us(用戶態使用的cpu百分比)
如果程序都沒什么問題,那么是沒有hi和si的,但是實際上有個硬中斷和軟中斷的概念。比如硬中斷,cpu在執行程序的時候,突然外設硬件(比如硬盤出現問題了)機器需要立刻通知cpu進行現場保存工作。這個時候會cpu會出現上下文切換。就是cpu會有一部分時間會被硬中斷占用了,這個時間就是hi。相類似,si是軟中斷的cpu占用時間,軟中斷是由軟件的指令方式觸發的。
ni是nice的意思,nice是什么呢,每個linux進程都有個優先級,優先級高的進程有優先執行的權利,這個叫做pri。進程除了優先級外,還有個優先級的修正值。即比如你原先的優先級是20,然后修正值為-2,那么你最后的進程優先級為18。這個修正值就叫做進程的nice值。
wa指的是CPU等待磁盤寫入完成的時間,就是說前提是要進行IO操作,在進行IO操作的時候,CPU等待時間。比如上面那個程序,最后一步,從系統空間到dst硬盤空間的時候,如果程序是阻塞的,那么這個時候cpu就要等待數據寫入磁盤才能完成寫操作了。所以這個時候cpu等待的時間就是wa。
所以如果一台機器看到wa特別高,那么一般說明是磁盤IO出現問題,可以使用iostat等命令繼續進行詳細分析。
st的名字很生動,偷取。。。是專門對虛擬機來說的,一台物理是可以虛擬化出幾台虛擬機的。在其中一台虛擬機上用top查看發現st不為0,就說明本來有這么多個cpu時間是安排給我這個虛擬機的,但是由於某種虛擬技術,把這個cpu時間分配給了其他的虛擬機了。這就叫做偷取。
剩下的id就是除了上面那么多cpu處理上下文以外的cpu時間片。當然在這些時間片上,cpu是空閑的。top的所有這些cpu時間應該是相加為100%的。
PID:進程ID
USER:進程所屬主的名字
PR:進程的優先級
NI:進程的謙讓度
VIRT:進程占用的虛擬內存總量
RES:進程占用的物理內存總量
SHR:進程和其他進程共享的內存總量
S:進程的狀態,D可中斷的休眠狀態,R在運行,S休眠,T跟蹤或者停止,Z僵化
%CPU:進程使用的CPU時間比例
%MEM:進程使用的內存占可用內存的比例
TIME+:自進程啟動到目前為止的CPU時間總量
COMMAND:進程所對應的命令行名稱,,也就是啟動的程序名