java - 试图定位泄漏点! anon 对 pmap 意味着什么?

标签 java linux memory memory-management pmap

我正在尝试为在 linux 中运行的 java 进程定位我的内存去了哪里。有人建议我使用 pmap -x 来查看内存在做什么。

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

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

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

最佳答案

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

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

关于java - 试图定位泄漏点! anon 对 pmap 意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1477885/

相关文章:

linux - 使用 gnuplot 进行绘图的 Bash 脚本

linux - shell脚本的正确语法

c++ - 建议的堆栈分配最大大小

java - Java HashMap.clear() 和 remove() 内存有效吗?

java - 从用户输入字符串返回数组中的索引

Java合并排序代码不起作用

java - 如何用Spring切换动态事务?

java 。如何将两个最初排序的队列合并到一个队列中? (没有链表或其他东西)

linux bash 文件无法理解 $((09))

memory - Clojure 惯用的内存高效循环