一尘不染

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

linux

我试图找到我的内存在哪里运行在Linux上的Java进程。有人建议我使用pmap -x来确切查看内存在做什么。

输出的确很长,但是基本上它的很大一部分是重复的:

00007fbf75f6a000    1016       -       -       - rwx--    [ anon ]
00007fbf76068000      12       -       -       - -----    [ anon ]

这到底是什么意思?为什么我有这么多条目(4000+)?


阅读 1488

收藏
2020-06-03

共1个答案

一尘不染

Anon块是通过malloc或mmap分配的“大”块-请参见手册页。因此,它们与Java堆无关(除了整个堆应该存储在这样的块中的事实)。

以我的经验,线程栈也使用匿名块。如果您看到很多匿名块都具有相同的大小,并且大小为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内存问题?

2020-06-03