私は、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のメモリを搭載しています。
別の魔法の環境変数を追加してこの問題を修正しました
Java_TOOL_OPTIONS="-Xmx1024m -XX:MaxPermSize=512m -Xms512m"