01
13

pidstat-全域型memory leak偵測工具

前一陣子在玩效能評析工具時很意外的發現了這個好東西,一般偵測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…等工具對付

標籤: linux
評論: 2 | 引用: 0 | 閱讀: 10289
  • 1 
ahdeng [ 2009-01-14 09:39 | 回覆 | 編輯 刪除 ]
請問memory leak是什麼意思?
Joey [ 回復於2009-01-14 16:30 郵箱 | 編輯 刪除 ]
記憶體使用錯誤,比方說
1.有malloc但沒有free
2.memcpy時把過大的size的資料copy到空間比size小的記憶體裡,很經典的錯誤就是如下的程式碼

char *ptr=(char *)malloc(strlen(somestring));
strcpy(ptr,somestring);
  • 1 
發表評論
暱 稱: 密 碼:
網 址: E - mail:
驗證碼: 驗證碼圖片 選 項:
頭 像:
內 容: