Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 试图找到漏洞!anon对pmap意味着什么?_Java_Linux_Memory_Memory Management_Pmap - Fatal编程技术网

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

Java 试图找到漏洞!anon对pmap意味着什么?,java,linux,memory,memory-management,pmap,Java,Linux,Memory,Memory Management,Pmap,我试图找到在linux中运行的java进程的内存去向。有人建议我使用pmap-x来查看内存到底在做什么 输出非常长,但基本上大部分是重复的: 00007fbf75f6a000 1016 - - - rwx-- [ anon ] 00007fbf76068000 12 - - - ----- [ anon ] 这到底意味着什么?为什么我有这么多(4000+)项?请参阅匿名内存的系统性能调整。Ano

我试图找到在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内存问题

使用EclipseMat(当您从Java堆而不是本机堆中获得OfMemoryException时)。

我以前在线程泄漏中见过这种模式。如果您的代码试图汇集线程,但不知何故弄乱并泄漏了一个线程,那么您会在pmap中得到类似的模式

我认为每一位内存都是线程的最小堆栈大小,当然在我们的例子中它与堆无关。
当我们达到操作系统的限制时,仍然会出现内存错误,即使在分析堆时,它并没有被过度分配


当我们遇到这样的问题时,pmap[pid]| grep-c 12K被证明是正在使用的线程数。

告诉您如何管理匿名分配,而不是它是什么。虽然链接整体上很好。>为什么要使用pmap诊断Java内存问题?我们有一个java进程,堆设置为最大256MB,但它的RSS内存是8.9GB。我们还能用什么工具来诊断呢?@Opher-当然,对你来说是有意义的。但你是那个人吗?(如果是的话,你为什么在8年后发表评论?)。从最初的问题来看,不清楚OP是否知道他/她在寻找什么。作为建议:如果您看到配置的堆大小和RSS之间存在如此大的差异,请查找内存映射文件或直接缓冲区。例如,您将在Kafka或SOLR服务器上看到这种行为,这是正常的。