2011-08-22 79 views
0

我需要找出特定進程的內存使用情況。事實上,我需要找出我寫的應用程序中有任何內存泄漏。由於我們的系統在RAM中安裝了日誌文件夾,因此我無法使用memfree/proc/meminfo如何查找進程的內存泄漏?

我已經經歷了很多類似的查詢,有人建議使用ps aux命令。我有點困惑於哪個參數給出了正確的內存使用情況,或者在幾個小時之後內存泄漏。 PS AUX給出VSZ(virtual mem)RSS(resident set size)

我寫了一個示例程序,它分配4個字節的內存並取消分配它。運行程序後,似乎VSZ分配內存時增加值,但取消分配時值不會減少。但RSS值顯示正確,分配時增加,並在取消分配時減少。

任何人都可以確認使用RSS值是否會指向代碼中的內存泄漏量?或者還有其他方法嗎?

+0

操作系統無法確定應用程序中是否存在內存泄漏。你永遠不會從'ps'這樣的工具獲得那種信息,或者在'/ proc/meminfo'中找到它。這個問題的標題要求「進程的內存使用情況」,但文本詢問內存泄漏。這個問題的正確答案是[Dan](http://stackoverflow.com/a/16974256/194894):**使用[Valgrind](http://valgrind.org/)**我編輯過相應的標題。 – Flow

回答

0

我使用top來處理這類事情。

top -p <process id> 
1

要知道,你可以使用pmap細節: PMAP PID

[email protected]# pmap 1216 
1216: /usr/sbin/acpid 
08048000  32K r-x-- /usr/sbin/acpid 
08050000  4K rw--- /usr/sbin/acpid 
08051000  4K rw--- [ anon ] 
088f2000 140K rw--- [ anon ] 
b7642000  4K rw--- [ anon ] 
b7643000 1280K r-x-- /lib/i686/cmov/libc-2.11.3.so 
b7783000  4K ----- /lib/i686/cmov/libc-2.11.3.so 
b7784000  8K r---- /lib/i686/cmov/libc-2.11.3.so 
b7786000  4K rw--- /lib/i686/cmov/libc-2.11.3.so 
b7787000  12K rw--- [ anon ] 
b7798000  8K rw--- [ anon ] 
b779a000  4K r-x-- [ anon ] 
b779b000 108K r-x-- /lib/ld-2.11.3.so 
b77b6000  4K r---- /lib/ld-2.11.3.so 
b77b7000  4K rw--- /lib/ld-2.11.3.so 
bfd59000  84K rw--- [ stack ] 
total  1704K 
1

我知道這是古老的,但我覺得有必要說,這樣的事情,你真的只是想使用像Valgrind這樣的工具。也就是Valgrind。這絕對是要走的路,特別是對於你正在編寫(或已經編寫)的程序,因爲你也可以調整編譯標誌,所以你可以得到最有用的輸出。假設您使用的是gcc,請嘗試使用-g進行編譯以打開調試符號,而不要使用strip二進制文件。

用法很簡單,文檔位於鏈接的網站上。基本用法在命令行上僅爲valgrind program。它不僅會向您展示具體細節,而且還會向您展示最終泄漏的內存。