前一陣子在玩效能評析工具時很意外的發現了這個好東西,一般偵測memory leak的工具都以連結特定library並以其攔截malloc或free,找出memory leaking的bug,或者是像valgrind針對單一的process動態偵測memory leaking的point,但是,有沒有一個tool,可以偵測系統上所有process 的memory consumption,並即時回報?當你系統有上百隻別人寫的程式,要如何快速的找出那隻程式亂幹記憶體?很感謝pidstat,它幫我解決上面提到的疑惑

Pidstat可在這個網站下載,它是sysstat這組系統工具中的其中一隻,sysstat還包含sar,sardc…等其它好用的東東,不過我這邊只專門介紹pidstat的用法,pidstat可下的command如下


-C aaa:顯示aaa process的資訊
-d: 顯示I/O statics
-l:在SMP的環境下,會把CPU usage 除以CPU數目(這蠻有用的,在SMP機器上常會看到某隻程式%CPU值破百)
-r:顯示memory comsuption(VSZ,RSS),mjfalut,minfaults(非常重要的功能)
-w: context switch資訊(主動或被動)
-p:針對某隻特定process分析

OK,可以先來下指令試試看,如果我輸入pidstat –r 2,pidstat會幫我每兩秒掃描所有process的memory usage,如果掃描的結果與上次掃描不一樣,pidstat會把掃描結果輸出在console

現在我假設我有一隻寫的很笨的程式bugtest,它open檔案後確忘了關,pidstat可以檢測到這樣的問題,畫面如下

所有透過這樣的方式,我們可以用pidstat快速找出系統中那隻process搞鬼,找出來後再用valgrind或eletric fence…等工具對付

最後修改日期: 3 6 月, 2022

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。