1. ホーム
  2. maven

[解決済み] MavenのOut of Memoryビルドの失敗

2023-02-19 04:39:13

質問

今日から、mavenのコンパイルに失敗するようになりました。

[INFO] [ERROR] Unexpected
[INFO] java.lang.OutOfMemoryError: Java heap space
[INFO]  at java.util.Arrays.copyOfRange(Arrays.java:2694)
[INFO]  at java.lang.String.<init>(String.java:203)
[INFO]  at java.lang.String.substring(String.java:1877)

[ERROR] メモリ不足です。メモリ量を増やすには、起動時に -Xmx フラグを使用してください (java -Xmx128M ...)

昨日の時点でmavenのコンパイルが正常に実行されていました。

今日の時点では、ヒープを上げただけで 3GB . また、私はコードの2-3マイナー行を変更しただけなので、この「メモリ不足」エラーは理解できません。

vagrant@dev:/vagrant/workspace$ echo $MAVEN_OPTS
-Xms1024m -Xmx3000m -Dmaven.surefire.debug=-Xmx3000m

EDIT: 失敗したモジュールのpom.xmlを変更して、投稿者のコメントを試しました。しかし、同じようにmavenのビルドエラーが発生しました。

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.5</source>
            <target>1.5</target>
            <fork>true</fork>
            <meminitial>1024m</meminitial>
            <maxmem>2024m</maxmem>
       </configuration>
    </plugin>

どのように解決するのですか?

どのような 'web' モジュールのことを話しているのですか? 単純な戦争なのか、パッケージング型の戦争なのか?

Google の Web ツールキット (GWT) を使っていないのであれば、どんなものでも gwt.extraJvmArgs

コンパイルプロセスをフォークするのは良いアイデアではないかもしれません。 MAVEN_OPTS を完全に無視する 2 番目のプロセスを開始するため、解析がより困難になるからです。

そこで、MAVEN_OPTSを設定することでXmxを増やしてみる。

export MAVEN_OPTS="-Xmx3000m"

また、コンパイラを別プロセスにフォークしないこと

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.5</source>
        <target>1.5</target>
   </configuration>
</plugin>

増加中 -XX:MaxPermSize=512m は必要ないはずです。なぜなら、もしパーマのサイズが問題の原因であるなら、私はエラー java.lang.OutOfMemoryError: PermGen space

それでも問題が解決しない場合は、さらなる解析のためにヒープダンプを作成するために -XX:+HeapDumpOnOutOfMemoryError . さらに、コンパイルの実行中に jvm に接続し、jvm のヒープ内部で何が起こっているかを見るために、java の bin ディレクトリにある jconsole.exe を使用することができます。

もう 1 つのアイデア (愚かなものであるかもしれません) は、マシン内部に十分な RAM があるかどうかということでした。メモリ サイズを定義することは良いことですが、ホストが 4GB しかない場合、OS、Java、MS-Office などによってすでに使用されているため、Java が定義されたメモリを使用できないという問題が発生する可能性があります。