2010-04-22 77 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,它只会使用你使用的数量,如果由于某种原因,你需要更多,你的程序不会吹向上。即您无需获得正确的尺寸,并且可以相当安全地估计分配的​​尺寸。

相关问题