0

在 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 上分析本机进程的经验。我如何确定是什么在无休止地分配这么多内存?

4

1 回答 1

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/

于 2018-08-08T06:46:25.943 回答