2017-02-03 76 views
0

我試圖用Valgrind的地塊長時間監視進程的內存消耗。該過程是活動的,並在特定的時間間隔執行一些例行操作,我希望看到所有過程的內存消耗。監控超過1小時的內存消耗

我啓動過程與:

valgrind --tool=massif --trace-children=yes <program name> <arguments> 

我的計劃是建立一個守護進程。

我看到massif爲主進程創建一個文件,幾乎立即退出,而另一個還活着。當我殺死守護進程時,massif會輸出另一個守護進程的pid文件。但是,我注意到只有當我讓流程運行時間不超過15分鐘時,我纔會得到第二個文件。如果讓它運行更多,則不生成文件。 Valgrind顯示沒有錯誤。

我懷疑valgrind無法處理如此大量的信息,對嗎?任何有關如何以其他方式實現我的目標的建議?

我運行的是最新版本的valgrind的:3.12.0

回答

1

如果Valgrind的遇到問題(如內存不足), 它應該產生一個錯誤消息。 valgrind死亡時沒有錯誤信息的一個可能原因是有 valgrind殺死了-9或被OOM殺死。

你可以做什麼檢查,這是使用vgdb在一個循環中另一個窗口, 做這樣的事情:

while true 
    do 
    vgdb .... valgrind monitor command ... 
    sleep 60 
    done 

班長命令,你可以使用一個命令來獲得 內部狀態所述的valgrind存儲器的:

 vgdb v.info stats 

,或者可選地根據地塊上運行時,可以通過使用

每60秒左右產生一存儲器 快照
 vgdb detailed_snapshot filenameXXX 

(您需要更改文件名的每個快照)

http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.gdbserver有關vgdb更多信息和監控命令。

+0

謝謝,問題在於我正在使用init.d腳本和'service'來停止該進程,並且該腳本有時會發送kill -9命令。用SIGTERM自己殺死進程解決了這個問題! – Perennialista