web-dev-qa-db-ja.com

テストを実行しているosxmaven例外:スレッド「main」のUncaughtExceptionHandlerからスローされたJava.lang.OutOfMemoryError

私は、Linuxで動作する準備ができたMavenプロジェクトをMacで実行しようとしています。 mvn clean installを呼び出すと、テストの一部が実行され、次のエラーが発生します。

スレッド "main"の例外例外:スレッド "main"のUncaughtExceptionHandlerからスローされたJava.lang.OutOfMemoryError

環境変数にMAVEN_OPTSを追加することで修正されたPermgenエラーに関する多くの質問を見てきました。現在、システムには次の環境変数があります。

MAVEN_OPTS = "-Xmx4096m -XX:MaxPermSize = 4096m"

mvn help:systemを呼び出すと、これらのオプションが構成に表示されます。

プロジェクトはテスト目的でRobolectricを使用し、(常にではありませんがほとんどの場合)例外をスローする前に次の行を出力します。

[DEBUG] ********************* ** GCされたSdkEnvironmentが再利用されました!

[ERROR]はorg.robolectric.internal.ParallelUniverseをorg.robolectric.bytecode.AsmInstrumentingClassLoader@300abe53にロードできませんでした

アクティビティモニターでは、テストを開始するとJavaプロセスが稼働していることがわかります。例外がスローされる前に、そのメモリ使用量は1.4〜1.5GBに達します。

それを機能させるために他に何をすべきですか。ご協力いただきありがとうございます!

[〜#〜] edit [〜#〜]メモリオプションを追加してプラグインを確実に起動した後:

           <plugin>
               <groupId>org.Apache.maven.plugins</groupId>
               <artifactId>maven-surefire-plugin</artifactId>
               <version>2.16</version>
               <configuration>
                   <argLine>-Xmx2048m -XX:MaxPermSize=2048m</argLine>
               </configuration>
           </plugin>

mvn clean install -e -Xを実行すると次のスタックトレースが得られました。

[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-surefire-plugin:2.17:test (default-test) on project Android: Execution default-test of goal org.Apache.maven.plugins:maven-surefire-plugin:2.17:test failed: There was an error in the forked process
[ERROR] Java.lang.OutOfMemoryError: PermGen space
[ERROR] at Java.lang.ClassLoader.defineClass1(Native Method)
[ERROR] at Java.lang.ClassLoader.defineClass(ClassLoader.Java:800)
[ERROR] at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:142)
[ERROR] at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:449)
[ERROR] at Java.net.URLClassLoader.access$100(URLClassLoader.Java:71)
[ERROR] at Java.net.URLClassLoader$1.run(URLClassLoader.Java:361)
[ERROR] at Java.net.URLClassLoader$1.run(URLClassLoader.Java:355)
[ERROR] at Java.security.AccessController.doPrivileged(Native Method)
[ERROR] at Java.net.URLClassLoader.findClass(URLClassLoader.Java:354)
[ERROR] at Java.lang.ClassLoader.loadClass(ClassLoader.Java:425)
[ERROR] at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:308)
[ERROR] at Java.lang.ClassLoader.loadClass(ClassLoader.Java:358)
[ERROR] at org.Apache.maven.surefire.report.SmartStackTraceParser.getMinimalThrowableMiniMessage(SmartStackTraceParser.Java:166)
[ERROR] at org.Apache.maven.surefire.report.SmartStackTraceParser.getString(SmartStackTraceParser.Java:151)
[ERROR] at org.Apache.maven.surefire.report.PojoStackTraceWriter.smartTrimmedStackTrace(PojoStackTraceWriter.Java:61)
[ERROR] at org.Apache.maven.surefire.booter.ForkingRunListener.encode(ForkingRunListener.Java:328)
[ERROR] at org.Apache.maven.surefire.booter.ForkingRunListener.encode(ForkingRunListener.Java:312)
[ERROR] at org.Apache.maven.surefire.booter.ForkingRunListener.toString(ForkingRunListener.Java:258)
[ERROR] at org.Apache.maven.surefire.booter.ForkingRunListener.testError(ForkingRunListener.Java:132)
[ERROR] at org.Apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.Java:162)
[ERROR] at org.Apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.Java:124)
[ERROR] at org.Apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.Java:200)
[ERROR] at org.Apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.Java:153)
[ERROR] at org.Apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.Java:103)
[ERROR] -> [Help 1]

これは、surefire用に2GB、Maven用に4GBのメモリを搭載しています。

11
RaINqer

別の魔法の環境変数を追加してこの問題を修正しました

Java_TOOL_OPTIONS="-Xmx1024m -XX:MaxPermSize=512m -Xms512m"

23
RaINqer