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 に答える