ero*_*ppa 26 java linux memory memory-management pmap
我正试图找到我的内存在linux中运行的java进程的位置.有人建议我使用pmap -x来确切了解内存的作用.
输出真的很长,但基本上很好的一部分是重复这个:
00007fbf75f6a000 1016 - - - rwx-- [ anon ]
00007fbf76068000 12 - - - ----- [ anon ]
Run Code Online (Sandbox Code Playgroud)
这到底是什么意思?为什么我有这么多的条目(4000+)?
kdg*_*ory 33
匿名块是通过malloc或mmap分配的"大"块 - 请参阅联机帮助页.因此,它们与Java堆无关(除了整个堆应该存储在这样的块中的事实).
根据我的经验,线程堆栈也使用anon块.如果你看到很多anon块都具有相同的大小,并且该大小为512k到4Mb(对于我运行的Tomcat进程,下面的示例重复了十几次),这可能是原因.根据程序的不同,您可能需要多达几十个; 如果你看到数千,这意味着你有线程问题.
b089f000 504K rwx-- [ anon ]
b091d000 12K ----- [ anon ]
b0920000 504K rwx-- [ anon ]
b099e000 12K ----- [ anon ]
b09a1000 504K rwx-- [ anon ]
b0a1f000 12K ----- [ anon ]
Run Code Online (Sandbox Code Playgroud)
但这留下了一个问题:为什么使用pmap来诊断Java内存问题?