有沒有辦法查看NIO緩衝區的內存使用情況? JConsole中有非堆內存部分,但我不認爲這包括NIO緩衝區?如何查看NIO緩衝區的內存使用情況?
操作系統是Linux(Ubuntu或CentOS)如果這很重要。
問候,
維姆
有沒有辦法查看NIO緩衝區的內存使用情況? JConsole中有非堆內存部分,但我不認爲這包括NIO緩衝區?如何查看NIO緩衝區的內存使用情況?
操作系統是Linux(Ubuntu或CentOS)如果這很重要。
問候,
維姆
我已經使用這個監視虛擬和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使用的所有內存,儘管這個小腳本已經證明我足夠有用,可以看到我正在調查的程序中沒有內存泄漏。
是的,從Linux通過ps
命令。示例:
ps x -o command,rss | grep java | grep latest | cut -b 17-
輸出將以KB爲單位。
您可能感興趣的一個問題,我有一個前陣子關於Java的RSS和NIO緩衝區:Why does the Sun JVM continue to consume ever more RSS memory even when the heap, etc sizes are stable?
值得注意的是,直接內存緩衝區只能使用與您使用的物理內存一樣多的內容(到下一頁的大小,通常爲4K)。它們在創建時使用虛擬內存,但操作系統足夠智能,不會分配物理內存頁面(駐留),直到您使用直接內存緩衝區中的頁面。這意味着所用物理內存的大小可能小於您分配的內存量(虛擬)。物理/居民記憶是你應該關心的。
這樣做的好處是你可以分配幾MB緩衝區,即使你只希望使用幾KB,它只會使用你使用的數量,如果由於某種原因,你需要更多,你的程序不會吹向上。即您無需獲得正確的尺寸,並且可以相當安全地估計分配的尺寸。
感謝您的鏈接,非常有趣! – 2010-04-24 20:23:23