osx maven 运行测试异常:从线程“main”中的 UncaughtExceptionHandler 抛出的 java.lang.OutOfMemoryError
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/24647558/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
osx maven running tests Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"
提问by RaINqer
I have been trying to run on mac a ready maven project which works under linux. When calling
mvn clean install
it runs a portion of the tests and then I am getting the following error:
我一直在尝试在 mac 上运行一个在 linux 下运行的现成的 maven 项目。调用
mvn clean install
它时会运行一部分测试,然后出现以下错误:
Exception in thread "main" Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"
线程“main”中的异常异常:从线程“main”中的 UncaughtExceptionHandler 抛出的 java.lang.OutOfMemoryError
I have seen many questions about Perm gen error fixed with adding MAVEN_OPTS
to environmental variables. Right now I have the following environmental variable on my system:
我已经看到许多关于通过添加MAVEN_OPTS
环境变量来修复 Perm gen 错误的问题。现在我的系统上有以下环境变量:
MAVEN_OPTS="-Xmx4096m -XX:MaxPermSize=4096m"
MAVEN_OPTS="-Xmx4096m -XX:MaxPermSize=4096m"
When calling mvn help:system
I can see these options showing up in the configuration.
打电话时,mvn help:system
我可以看到这些选项出现在配置中。
The project uses Robolectric for testing purposes and (most of the times but not always) prints the following lines before throwing the exception :
该项目使用 Robolectric 进行测试,并且(大多数情况下但并非总是如此)在抛出异常之前打印以下行:
[DEBUG] ********************* **GC'ed SdkEnvironment reused!
[DEBUG] ********************* **GC'ed SdkEnvironment 重用!
[ERROR] couldn't load org.robolectric.internal.ParallelUniverse in org.robolectric.bytecode.AsmInstrumentingClassLoader@300abe53
[错误] 无法在 org.robolectric.bytecode.AsmInstrumentingClassLoader@300abe53 中加载 org.robolectric.internal.ParallelUniverse
In activity monitor I can see a java process come to life when I start the tests. Its memory usage reaches 1.4~1.5GB before the exception is thrown.
在活动监视器中,当我开始测试时,我可以看到一个 java 进程活跃起来。在抛出异常之前,它的内存使用量达到了 1.4~1.5GB。
What else should I do to get it working. Thanks for Your help!
我还应该怎么做才能让它工作。感谢您的帮助!
EDITafter adding the memory options to sure fire plugin :
添加内存选项以确保触发插件后编辑:
<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>
<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>
and running mvn clean install -e -X
I got the following stack trace:
并运行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.access0(URLClassLoader.java:71)
[ERROR] at java.net.URLClassLoader.run(URLClassLoader.java:361)
[ERROR] at java.net.URLClassLoader.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]
That's with 2GB of memory for surefire and 4GB for maven.
那是 2GB 的内存用于 Surefire,4GB 用于 maven。
采纳答案by RaINqer
I fixed this problem by adding another magic environmental variable
我通过添加另一个神奇的环境变量解决了这个问题
JAVA_TOOL_OPTIONS="-Xmx1024m -XX:MaxPermSize=512m -Xms512m"
JAVA_TOOL_OPTIONS="-Xmx1024m -XX:MaxPermSize=512m -Xms512m"