
某个模块在本地执行单元测试后,其测试报告中,大量出现如下异常
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)
...
最简单方法,直接通过argLine为maven-surefire-plugin设置JVM参数
org.apache.maven.plugins maven-surefire-plugin -Xms4g -Xmx4g
按照网上的说法,argLine有late replacement of properties的问题:当前设置的argLine将会覆盖之前(如继承自父模块)的设置
此时,需要使用append的方法进行设置,避免argLine发生覆盖
append argLine方法一
org.apache.maven.plugins maven-surefire-plugin @{argLine} -your -extra -arguments
append argLine方法二
不通过maven-surefire-plugin --> configuration设置argLine,而是直接创建argLine属性
... -your -extra -arguments org.apache.maven.plugins maven-surefire-plugin
以上设置方法,参考如下连接:
maven test阶段默认使用maven-surefire-plugin插件,除非需要自定义某些属性,一般在pom.xml文件中,是找不到maven-surefire-plugin
如果找不到,又不想更改pom.xml文件,这时可以选择设置MAVEN_OPTS
对于linux系统,可以通过修改/etc/profile文件,添加MAVEN_OPTS以实现JVM的配置(这是永久性的修改)
export MAVEN_OPTS="-Xss16m -Xms4G -Xmx16G"
或者直接执行上述内容,进行一次性修改
修改是否生效,可以通过export命令进行查看