是否有可能检测到堆外内存泄漏的来源?

时间:2016-06-13 13:55:15

标签: java memory-leaks garbage-collection

我一直在研究的应用程序已经展示了大量的堆外内存使用情况。

我已将应用程序配置为使用4096m的Xms和Xmx。然而,在PID上运行顶部显示该过程消耗了机器内存的9.6%(64gb机器 - > 6.14g应用程序占用空间)。 实例活动的时间越长,这似乎会继续增长。居民大小约为5.9g。使用jvisualvm检查进程我看到大约1.5gb的堆使用情况,具有健康的GC模式。我已经提取了堆转储和线程转储,但没有看到任何异常。

我为这个过程提取了一个pmap。堆大小看起来与应用程序Xms和Xmx参数一致。堆栈大约130Kb。我注意到了大量的匿名记忆:

service

gc行为的一些示例:

00000006c0000000 4195968K 1437248K 1437248K 1437248K      0K rw-p [anon]
00000007c01a0000 1046912K       0K       0K       0K      0K ---p [anon]
00007ff712acd000 230464K        0K       0K       0K      0K ---p [anon]
00007ff7077cb000 148452K    10452K   10452K   10452K      0K rw-p [anon]
00007ff711bdd000  15296K    15224K   15224K   15224K      0K rwxp [anon]
00007ff7109c6000  14924K    14692K   14692K   14692K      0K rw-p [anon]

该应用程序有大约15个线程。 JVM是Sles 11 sp3机器上的jdk-1.8.0_40。

我的问题是:

  1. 这似乎是应用程序在堆外大量增长的问题。可以安全地假设,还是我错过了什么?

  2. 有没有办法确定内存消耗的来源?

1 个答案:

答案 0 :(得分:-1)

如果您使用的是Eclipse,可以尝试使用MAT(Memory Analyzer Tool)http://www.eclipse.org/mat/来确定内存消耗的来源。

相关问题