2010-04-22 49 views

回答

0

我已經使用這個監視虛擬和RSS內存和本地線程的數量:

for((i=0;;++i)) { echo $i ` grep VmSize /proc/\21009/status | grep -o '[0-9]*'` ` grep VmRSS /proc/\21009/status | grep -o '[0-9]*'` ` grep Threads /proc/\21009/status | grep -o '[0-9]*'` ; sleep 1 || break; } > data 

它創建一個空間分隔的文件,您可以輕鬆導入到您最喜愛的電子表格工具中。

當然,您需要將21009替換爲您要監控的java進程的進程ID。

這並沒有完全回答我自己的問題,因爲我希望能夠看看NIO的東西已經分配了什麼,而不是JVM使用的所有內存,儘管這個小腳本已經證明我足夠有用,可以看到我正在調查的程序中沒有內存泄漏。

3

值得注意的是,直接內存緩衝區只能使用與您使用的物理內存一樣多的內容(到下一頁的大小,通常爲4K)。它們在創建時使用虛擬內存,但操作系統足夠智能,不會分配物理內存頁面(駐留),直到您使用直接內存緩衝區中的頁面。這意味着所用物理內存的大小可能小於您分配的內存量(虛擬)。物理/居民記憶是你應該關心的。

這樣做的好處是你可以分配幾MB緩衝區,即使你只希望使用幾KB,它只會使用你使用的數量,如果由於某種原因,你需要更多,你的程序不會吹向上。即您無需獲得正確的尺寸,並且可以相當安全地估計分配的​​尺寸。

相關問題