2012-11-08 81 views
3

我想測量進程內每個線程的內存使用情況。可能嗎?我試圖找出哪個線程泄漏內存。Linux:如何測量進程內線程的內存使用情況?

編輯1. 的泄漏過程中的PMAP顯示由〜[匿名]

... 
63b00000 772K rw--- [ anon ] 
63bc1000 252K ----- [ anon ] 
63c00000 772K rw--- [ anon ] 
63cc1000 252K ----- [ anon ] 
63d00000 772K rw--- [ anon ] 
... 

請教下一步該怎麼做600分配?

編輯2. 只有虛擬內存正在泄漏,例如,物理內存使用情況穩定。

+1

這是什麼意思?你如何將內存的某些部分鏈接到給定的線程? –

+0

由於沒有線程真正擁有內存的「所有權」,超出了源代碼中約定的內存,我認爲這是不可能的。不過,我很想看看是否有人有部分解決方案。 –

+1

你是否熟悉[valgrind](http://valgrind.org/)? – Shahbaz

回答

5

不,這是不可能的,因爲內存沒有附加到線程,而是附加到進程。線程和內存的某個部分之間沒有鏈接。

你似乎需要的是一個分析器,它將指向分配點。其中一個(過去十年沒有使用它)是Rational Purify

2

您通常無法識別線程的內存使用情況,因爲內存所有權可以在線程之間自由移動。內核映射表將向您顯示整個進程的使用情況,即爲所有線程分配的內存。

線程編程是。除非你真的需要在線程之間自由地共享指針和內存 - 這是一個相當討厭的代碼異味 - 如果你將程序重新修改爲一組通過IPC進行通信的進程,它可能會更容易調試,這也會迫使你考慮哪個狀態需要共享。作爲獎勵,如果泄漏過程結果是相對較短的過程,則內存將返回到系統exit(),而無需您找到並修補泄漏。

+0

一般我都同意,但在我的情況下系統已經在工作。我唯一能做的就是準備一個補丁來檢測泄漏源。我試圖找出,應該如何看起來像補丁的內容。 – user1111666

相關問題