有没有一种方法可以查看NIO缓冲区的内存使用情况?在JConsole中有非堆内存部分,但我认为这不包括NIO缓冲区?
如果操作系统是Linux(Ubuntu或CentOS),那么是否会有所影响?
祝好,
Wim
是的,通过Linux中的ps
命令可以实现。例如:
ps x -o command,rss | grep java | grep latest | cut -b 17-
输出将以KB为单位。
您可能会对我之前关于Java、RSS和NIO缓冲区的问题感兴趣:为什么Sun JVM即使堆大小等保持稳定,也会继续消耗更多的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使用的所有内存。