java.lang.OutOfMemoryError:MavenのJavaヒープスペース


122

mavenテストを実行すると、java.lang.OutOfMemoryErrorが発生します。私はそれを解決のためにグーグルで試しましたexport MAVEN_OPTS=-Xmx1024mが、うまくいきませんでした。誰もがこの問題の他の解決策を知っていますが、私はMaven 3.0を使用しています

前もって感謝します

「mvn test -e」を実行するときに、ここにエラーメッセージを貼り付けます

失敗したテスト:
  警告(junit.framework.TestSuite $ 1)
  testDefaultPigJob_1(com.snda.dw.pig.impl.DefaultPigJobLocalTest)
  testDefaultPigJob_2(com.snda.dw.pig.impl.DefaultPigJobLocalTest)

テストの実行:11、失敗:3、エラー:0、スキップ:0

10/11/01 13:37:18 INFO executionengine.HExecutionEngine:hadoop fiへの接続
ファイルシステム:file:///
[情報] ----------------------------------------------- -------------------------
[INFO]ビルド失敗
[情報] ----------------------------------------------- -------------------------
[情報]合計時間:30.063秒
[INFO]終了日:2010年11月1日13:37:18 PDT 2010
[情報]最終メモリ:3M / 6M
[情報] ----------------------------------------------- -------------------------
[エラー]目標org.apache.maven.plugins:maven-surefire-plugin:2を実行できませんでした。
プロジェクトdw.pigの5:test(default-test):テストの失敗があります。
[エラー]
[エラー] E:\ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports foを参照してください
r個々のテスト結果。
[エラー]-> [ヘルプ1]
org.apache.maven.lifecycle.LifecycleExecutionException:ゴールoの実行に失敗しました
プロジェクトのrg.apache.maven.plugins:maven-surefire-plugin:2.5:test(default-test)
 dw.pig:テストの失敗があります。

E:\ Code \ Java \ workspace \ dw.pig \ target \ surefire-reportsを参照してください。
個別のテスト結果。
        org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:199)
        org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:148)
        org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:140)
        org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct(ライフサイクルモジュールビルダー.java:84)
        org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct(ライフサイクルモジュールビルダー.java:59)
        org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBu
ild(LifecycleStarter.java:183)
        org.apache.maven.lifecycle.internal.LifecycleStarter.execute(Lifecycl
eStarter.java:161)
        org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:314)で
        org.apache.maven.DefaultMaven.execute(DefaultMaven.java:151)で
        org.apache.maven.cli.MavenCli.execute(MavenCli.java:445)で
        org.apache.maven.cli.MavenCli.doMain(MavenCli.java:168)で
        org.apache.maven.cli.MavenCli.main(MavenCli.java:132)で
        sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl。
java:39)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        java.lang.reflect.Method.invoke(Method.java:597)で
        org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Laun
cher.java:290)
        org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.jav
a:230)
        org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(La
uncher.java:409)
        org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:
352)
原因:org.apache.maven.plugin.MojoFailureException:テストに失敗しました
。

E:\ Code \ Java \ workspace \ dw.pig \ target \ surefire-reportsを参照してください。
個別のテスト結果。
        org.apache.maven.plugin.surefire.SurefirePlugin.execute(SurefirePlugi
n.java:629)
        org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(Default
BuildPluginManager.java:107)
        org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:195)
        ...もっと19
[エラー]
[エラー] -Xスイッチを使用してMavenを再実行し、完全なデバッグログを有効にします。
[エラー]
[エラー]エラーと考えられる解決策の詳細については、
d次の記事:
[エラー] [ヘルプ1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc

多分あなたのテストでメモリリークがありますか?ガベージコレクションされているにもかかわらず、java:ibm.com/developerworks/library/j-leaks
anio

回答:


158

mavenテストを実行すると、java.lang.OutOfMemoryErrorが発生します。私はそれを解決策としてグーグルし、MAVEN_OPTS = -Xmx1024mをエクスポートしようとしましたが、機能しませんでした。

Xmxを使用MAVEN_OPTSしてオプションを設定しても機能します。Mavenの起動に使用されるJVMを設定します。そうは言っても、maven-surefire-pluginはデフォルトで新しいJVMをforkするMAVEN_OPTSため、ユーザーは渡されません。

maven-surefire-pluginが使用するJVMのサイズを設定するには、次のいずれかを行う必要があります。

  • をに変更forkModeしますnever(これはMavenがテストから分離されないため、あまり良い考えではありません)〜or〜
  • argLineパラメータを使用します(正しい方法):

後者の場合、次のようになります。

<configuration>
  <argLine>-Xmx1024m</argLine>
</configuration>

しかし、私はここでスティーブンに同意する傾向があると言わざるを得ません。テストの1つに何か問題がある可能性が非常に高く、メモリを追加することが問題を「解決」(非表示?)するための正しい解決策であるかどうかはわかりません。

参考文献


1
親pom.xml内でのみ<configuration>タグを更新しますか?
ケビンメレディス


1
@Macarse forkModeは非推奨になりましforkCountたが、同様の機能を持つものに置き換えられるだけだと思います。MAVEN_OPTSを使用できる1つの方法ですが<argLine>${env.MAVEN_OPTS}</argLine>、コンピューターによって異なる可能性があるため、明らかに推奨されません(stackoverflow.com/a/10463133/32453)。あなたがjacocoを使用している場合にもノートがあなたをセットargLineに別の方法を想定していることをstackoverflow.com/questions/12269558/maven-jacoco-plugin-error
rogerdpack

63

Mavenの初心者向け(私と同じ)に、pomのビルドセクションに含まれる設定全体を示します。乾杯。

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19</version>
        <configuration>
            <argLine>-Xmx1024m</argLine>
        </configuration>
      </plugin>
    </plugins>
  </build>

12

可能性は、問題がMavenに実行を依頼したユニットテストの1つにあることです。

そのため、ヒープサイズをいじるのは間違ったアプローチです。代わりに、OOMEを引き起こしたユニットテストを見て、それがユニットテストの障害なのか、それがテストしているコードなのかを理解しようとする必要があります。

スタックトレースを確認することから始めます。ない場合はmvn ... test-eオプションを指定してもう一度実行してください。


@Stephen、実行構成で-Xmx1024mを設定した後、Eclipseでテストケースを渡すことができますが、コンソールで "mvn test"を実行すると、-e options "mvn test -DMAVEN_OPTS = -Xmx1024m "
zjffdu 2010年

2
@zjffdu-あなたは私のポイントを完全に逃した!「-e」を追加する目的は、テストを機能させることではありません。それらが機能しない理由を見つけることです。
スティーブンC

1
@zjffdu-その場合、他のJavaの問題と同様に、これを難しい方法でデバッグする必要があります。
スティーブンC

2
フルブラウザ環境をシミュレートするGWTテストケースの実行中にこの問題が発生します。ヒープサイズを増やしても問題ない場合があります。
djjeck 2013年

1
@djjeck-はい。しかし、ほとんどの場合、それは適切な解決策ではないと思います。
スティーブンC


6

私はこの問題を私の側で2つの方法で解決しました:

  1. この構成をpom.xmlに追加する

    <configuration><argLine>-Xmx1024m</argLine></configuration>
  2. 1.6の代わりに使用されているJDK 1.7に切り替える


2

java.lang.OutOfMemoryError:Java heap space in Mavenを解決するには、pomで以下の設定を構成してみてください

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>${maven-surefire-plugin.version}</version>
     <configuration>
        <verbose>true</verbose>
        <fork>true</fork>
        <argLine>-XX:MaxPermSize=500M</argLine>
    </configuration>
</plugin>

1
MaxPermSizeについて言及する場合は+1。ユニットテストで新しいHiveContextを作成するなど、膨大なクラスをロードすることでメモリ不足エラーが発生する場合、これが解決策です。
swdev 2018

-2

ヒープメモリだけではありません。また、permサイズを増やして、mavenでの例外を解決して、環境変数でこれらの変数を使用します。

variable name: MAVEN_OPTS
variable value: -Xmx512m -XX:MaxPermSize=256m

例:

export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=500m"

その場合、エラーは「Javaヒープスペース」ではなく、異なるものになります。
カールリヒター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.