有没有办法查看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