2016-03-15 32 views
0

如何測量進程使用的內存?進程很快就會退出,所以頂級公用程序無用。我嘗試使用valgrind的地塊,但它只測量通過malloc/new + stack分配的內存,而不是例如靜態變量。 - 頁面作爲堆並沒有幫助,因爲它也顯示映射的內存。Linux進程分配的內存使用情況

+0

看這裏http://unix.stackexchange.com/questions/21836/how-to-find-out-total-memory-resource-usage-with-ps – LibertyPaul

+0

你沒看過這個問題嗎?我不能使用ps,進程快速終止 –

+0

嗨Jani,我的答案是否在爲你工作?我真的很想知道你是否需要更多的幫助。 –

回答

1

可能對你有用的東西是使用一個腳本,它會在程序啓動後立即反覆運行'ps'。我已經編寫了以下適用於您的目的的腳本,只需將頂部的變量替換爲具體的細節。它當前在後臺運行「netstat」(注意&符號),並在樣本之間以0.1秒的間隔對存儲器進行10次採樣,並將存儲器檢查的結果寫入文件。我已經在cygwin上運行了它,它可以工作(減去-o rss,vsz參數),我目前沒有訪問linux機器的權限,但如果由於某種原因它不能立即適應,它應該很容易適應工作。

#! /bin/bash 

saveFileName=saveFile.txt 
userName=jacob 
programName=netstat 
numberOfSamples="10" 
delayBetweenSamples="0.1" 
saveFileName=saveFile 

i="0" 
$programName & 
while [ $i -lt $numberOfSamples ] 
do 
ps -u $userName -o rss,vsz | grep $programName >> $saveFileName 
i=$[$i+1] 
sleep $delayBetweenSamples 
done 

如果你的程序完成如此之快,在腳本執行它,並運行ps之間的延遲過長,你可能會考慮延遲運行程序,並使用了非常高的採樣率,試圖抓住它。你可以通過使用'睡眠'和兩個&符號來實現,如sleep 2 && netstat。這將等待2秒鐘,然後運行netstat。

如果這聽起來不錯,也許嘗試在調試器中運行您的程序。我相信gdb有一些內存跟蹤選項,你可以看看。