如何在Linux中獲得每個線程的進程內存消耗?我知道我們可以使用/ proc/pid/task/tid/statm,但那不能幫助我的情況。 所有線程都顯示相同的值並且與PID的統計量相同。進程的線程級內存消耗
我們可以做valgrind,但我不尋找任何無效的讀/寫或泄漏。 Valgrind不會告訴我任何線程級別的信息。
其他建議?
編輯: 如何分析我的代碼?多少內存分配在哪個函數/行號等?
如何在Linux中獲得每個線程的進程內存消耗?我知道我們可以使用/ proc/pid/task/tid/statm,但那不能幫助我的情況。 所有線程都顯示相同的值並且與PID的統計量相同。進程的線程級內存消耗
我們可以做valgrind,但我不尋找任何無效的讀/寫或泄漏。 Valgrind不會告訴我任何線程級別的信息。
其他建議?
編輯: 如何分析我的代碼?多少內存分配在哪個函數/行號等?
Linux中有一個選項可以查看CPU和內存的線程級使用
可以使用命令top
與選項-H
和-p
top -H -p<PID>
命令將列出結果與下面的頭和在這種情況下,您應該讀取PID
作爲TID(線程ID)。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND`
在java進程的情況下,它是非常明顯的如下。如果你創建一個進程的線程轉儲和轉換線程ID爲十進制你可以在top -H -p <PID>
輸出上市對於
嘛TID匹配,概念,所有的線程可以訪問相同的內存池,所以他們都使用相同的金額。你想跟蹤的是每個線程的分配數量 - 我不認爲glibc或內核會這樣做。並考慮:你如何計算在一個線程中分配的內存塊,並在另一個線程中釋放? – 2009-10-14 17:03:06
我可以在malloc上面編寫包裝器,它可以收集統計信息,但如果我用大量的malloc分析龐大的代碼,它會很困難。 – Jack 2009-10-14 17:12:02
如何使用調用'gettid(2)'的malloc的包裝?這樣,您可以保持調用代碼相同,同時跟蹤哪個線程正在調用封裝。 – 2009-10-14 17:39:24