用于分析內(nèi)存的幾個命令
? 在后期的代碼維護過程中,免不了要和操作系統(tǒng)打交道。本次分享幾個用于分析進(jìn)程或內(nèi)存的Linux命令。
pstree
pstree可以將所有進(jìn)程以樹狀展示出來,如下圖:
加上-p參數(shù)可以看到系統(tǒng)上的每個進(jìn)程,
pstree -p <pid>可以通過ps命令查看到某進(jìn)程的pid,再加上該參數(shù)查看進(jìn)程下的線程。
可以看到,系統(tǒng)有一個Go程序,該進(jìn)程包含五個線程,id分別如下圖。

對于Linux內(nèi)核而言,不是非常區(qū)分進(jìn)程和線程,線程只是與同一個進(jìn)程內(nèi)的其他線程共享同一塊內(nèi)存的一個特殊進(jìn)程,每個線程同樣也有自己的pid。
vmstat?
可以對操作系統(tǒng)的虛擬內(nèi)存、進(jìn)程、CPU活動進(jìn)行監(jiān)控。
一般有兩個參數(shù),用來表示采樣速率與次數(shù)。
vmstat <時間間隔> <采集次數(shù)>
返回的參數(shù)分別表示:
Procs
????????r:運行和等待CPU時間片的進(jìn)程數(shù)
????????b:表示阻塞的進(jìn)程數(shù)。
Memory
????????swpd:表示虛擬內(nèi)存使用情況
????????free:表示當(dāng)前空閑的物理內(nèi)存
????????buff:表示緩沖的內(nèi)存大小
????????Cache:表示緩存的內(nèi)存大小,
Swap
????????si:表示有磁盤讀入內(nèi)存大小。
????????so:表示由內(nèi)存寫入磁盤大小。
Io
????????bi:表示由塊設(shè)備讀入數(shù)據(jù)的總量
????????bo:表示寫到塊設(shè)備數(shù)據(jù)的總量
System
????????in:表示每秒中斷數(shù)。
????????cs:表示每秒產(chǎn)生的上下文切換次數(shù)(線程切換)。
cpu
????????us:表示用戶進(jìn)程消耗的CPU時間百分比
????????sy:表示系統(tǒng)調(diào)用消耗的CPU時間百分比
????????id:表示CPU處在空間狀態(tài)的時間百分比
????????wa: 等待IO的CPU時間
pidstat?
可以用來監(jiān)控全部或指定進(jìn)程的cpu、內(nèi)存、線程、設(shè)備IO等系統(tǒng)資源的占用情況
pidstat -w <時間間隔>可以查看某個時間間隔的進(jìn)程使用情況,如下圖:
參數(shù)表示:
Cswch/s:每秒主動任務(wù)上下文切換數(shù)量
Nvcswch/s:每秒被動任務(wù)上下文切換數(shù)量
Command:命令名
pidstat -tt -p <pid>可以看到每個進(jìn)程的線程切換與cpu調(diào)度情況
?
參數(shù)表示:
TGID:主線程的表示
TID:線程id
%usr:進(jìn)程在用戶空間占用cpu的百分比
%system:進(jìn)程在內(nèi)核空間占用cpu的百分比
%guest:進(jìn)程在虛擬機占用cpu的百分比
%CPU:進(jìn)程占用cpu的百分比
CPU:處理進(jìn)程的cpu編號
Command:當(dāng)前進(jìn)程對應(yīng)的命令
straces
通過該命令可以看到該進(jìn)程正在進(jìn)行的用戶空間與內(nèi)核空間的交互,如系統(tǒng)調(diào)用,進(jìn)程狀態(tài)等。
strace?-t?-p
在上圖主要展示了該進(jìn)程退出的過程,可以使用該命令來判斷進(jìn)程退出的原因。
推薦閱讀
