PMD内存泄漏

时间:2018-04-16 07:50:38

标签: java windows eclipse pmd java-memory-leaks

在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快照,在进程变得非常危险之前不久我就要杀了它:

memory snapshot

我尝试对这个进程运行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上分析本机进程的经验不多。我如何确定无休止地分配如此多的内存?

1 个答案:

答案 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/

使用