在Windows上的eclipse中使用pmd时,我有严重的内存泄漏。我导入了一堆大型maven项目。在m2e和编译PMD启动之后。然后它最终在工作区中的许多(大约50个)项目中并行运行大约8-10个eclipse作业实例。然后,进程大小不断增长,直到机器上的虚拟内存耗尽(大约12 GB左右),并且PC完全冻结。
我的内存配置在eclipse.ini中:
-Xms256m
-Xmx2G
-Xss2m
-Xverify:none
-XX:+UseG1GC
-XX:+UseStringDeduplication
-XX:MaxMetaspaceSize=1G
此处的堆大小限制为2 GB似乎没有太大影响。我怀疑分配的vm内存不是java堆,而是类加载器元空间或来自本机dll。
我的机器上有32 GB RAM。使用java 1.8.0_121。
这是一个vmmap快照,在进程变得非常危险之前不久我就要杀了它:
我尝试对这个进程运行jcmd PID GC.class_stats
,但是我没有看到这里的问题,因为总字节数只有~1.4 GB:
1636:
Index Super InstBytes KlassBytes annotations CpAll MethodCount Bytecodes MethodAll ROAll RWAll Total ClassName
1 89 141004480 560 0 1296 7 149 2176 880 3464 4344 java.util.HashMap$Node
2 -1 131125856 480 0 0 0 0 0 24 584 608 [I
3 89 129135744 624 0 8712 94 4623 58024 12136 56304 68440 java.lang.String
4 -1 111470376 480 0 0 0 0 0 24 584 608 [B
5 -1 94462520 480 0 0 0 0 0 24 584 608 [C
6 -1 55019976 480 0 0 0 0 0 32 584 616 [Ljava.util.HashMap$Node;
7 -1 53828832 480 0 0 0 0 0 24 584 608 [Ljava.lang.Object;
8 89 51354560 504 0 9016 42 2757 23352 6976 26704 33680 java.net.URL
9 89 48028392 504 0 544 1 20 496 216 1520 1736 java.util.LinkedList$Node
10 28783 40910880 1000 0 6864 51 3951 35648 8664 35792 44456 java.util.HashMap
...snip...
48234 48225 0 608 0 288 2 10 288 160 1152 1312 sun.util.resources.en.CalendarData_en
48235 48225 0 608 0 360 2 27 304 200 1200 1400 sun.util.resources.en.CurrencyNames_en_US
48236 48225 0 608 0 288 2 10 288 160 1152 1312 sun.util.resources.en.LocaleNames_en
48237 48229 0 608 0 288 2 10 304 176 1152 1328 sun.util.resources.en.TimeZoneNames_en
48238 29013 0 520 0 272 2 5 592 160 1352 1512 sun.util.spi.CalendarProvider
48239 89 0 512 0 336 3 5 440 240 1184 1424 sun.util.spi.XmlPropertiesProvider
48240 89 0 560 0 440 5 16 760 488 1504 1992 sun.util.xml.PlatformXmlPropertiesProvider$EH
48241 89 0 528 0 1040 3 71 520 464 1840 2304 sun.util.xml.PlatformXmlPropertiesProvider$Resolver
48242 89 0 552 0 520 3 19 512 456 1392 1848 uescape.view.UnicodeEscapeView$1
48243 89 0 552 0 520 3 19 512 456 1392 1848 uescape.view.UnicodeEscapeView$2
1374367440 32457872 432408 90295960 502480 22001616 144854704 85034192 198366896 283401088 Total
485.0% 11.5% 0.2% 31.9% - 7.8% 51.1% 30.0% 70.0% 100.0%
Index Super InstBytes KlassBytes annotations CpAll MethodCount Bytecodes MethodAll ROAll RWAll Total ClassName
我在Windows上分析本机进程的经验不多。我如何确定无休止地分配如此多的内存?
答案 0 :(得分:1)
这确实是pmd-eclipse-plugin的问题。 参见https://github.com/pmd/pmd-eclipse-plugin/issues/52
最新版本4.0.17.v20180801-1551包含一个修复程序。
可通过更新站点https://dl.bintray.com/pmd/pmd-eclipse-plugin/updates/
使用