mvn test java.lang.OutOfMemoryError:无法创建新的本机线程

Bra*_*rad 5 java jvm junit4 surefire maven

当我跑步时,mvn test我收到以下异常.我已尝试升级和降低我的Xmx和Xss JVM设置,并在ulimit下突破所有限制.大约有1300个测试,最后200个测试总是因此异常而失败.自己运行这些测试允许它们通过.相同的测试在我的ubuntu盒子上传递.我在mac上运行测试时收到此异常.我很确定它是一个环境问题,但我已经调整了我所知道的每一个设置,绝对没有运气.

我使用的是mvn 2.1和Java 6.我的测试框架是junit 4.8.

java.lang.OutOfMemoryError: unable to create new native thread
        at java.lang.Thread.start0(Native Method)
        at java.lang.Thread.start(Thread.java:658)
        at java.util.concurrent.ThreadPoolExecutor.addIfUnderMaximumPoolSize(ThreadPoolExecutor.java:727)
        at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:657)
        at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:92)
        at com.google.appengine.tools.development.ApiProxyLocalImpl$PrivilegedApiAction.run(ApiProxyLocalImpl.java:197)
        at com.google.appengine.tools.development.ApiProxyLocalImpl$PrivilegedApiAction.run(ApiProxyLocalImpl.java:184)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.google.appengine.tools.development.ApiProxyLocalImpl.doAsyncCall(ApiProxyLocalImpl.java:172)
        at com.google.appengine.tools.development.ApiProxyLocalImpl.makeAsyncCall(ApiProxyLocalImpl.java:138)
Run Code Online (Sandbox Code Playgroud)

sap*_*nin 5

我使用 Maven Surefire 插件 (v2.12) 遇到了这个问题。我必须按如下方式配置 Surefire:

<configuration>
  <forkMode>always</forkMode>
  ... other surefire config ...
</configuration>
Run Code Online (Sandbox Code Playgroud)

如果我在配置中省略了“forkMode”元素,我会收到“无法创建新的本机线程”错误,因为 java Surefire 进程会创建数千个线程,否则超出了我的操作系统限制(Mac OSX - 你可以看到这个在活动监视器中)。

据我所知,所有新线程都会被创建,因为在 Surefire 中默认的“forkMode”是“once”,并且创建的任何新线程都不会消失,直到“one”surefire 进程终止。

最后一点:调整我的 JVM 内存设置似乎没有效果(好或坏)。使用默认值可以正常工作,如下所示:

<argLine>-Xss512k -Xms512m -Xmx4096m -XX:MaxPermSize=2048m</argLine>
Run Code Online (Sandbox Code Playgroud)