试图找到泄漏!对于pmap来说,anon意味着什么?

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内存问题?

  • > 为什么要使用 pmap 来诊断 Java 内存问题?我们有一个堆设置为最大 256MB 的 Java 进程,但它的 RSS 内存为 8.9GB。我们可以使用什么其他工具来诊断这个问题? (3认同)
  • @Opher - 当然,对你有意义.但你是OP吗?(如果是的话,你为什么要在8年后发表评论?).从最初的问题来看,目前还不清楚OP是否知道他/她在寻找什么. (2认同)