我试图找到在linux中运行的java进程的内存.有人建议我使用pmap-x来查看内存到底在做什么.
输出非常长,但基本上大部分是重复的:
00007fbf75f6a000 1016 - - - rwx-- [ anon ]
00007fbf76068000 12 - - - ----- [ anon ]
这到底意味着什么?为什么我有这么多(4000+)的条目?
我试图找到在linux中运行的java进程的内存.有人建议我使用pmap-x来查看内存到底在做什么.
输出非常长,但基本上大部分是重复的:
00007fbf75f6a000 1016 - - - rwx-- [ anon ]
00007fbf76068000 12 - - - ----- [ anon ]
这到底意味着什么?为什么我有这么多(4000+)的条目?
Anon块是通过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 ]
但这留下了一个问题:为什么要用pmap来诊断Java内存问题?