java - Failsafe 插件在 CI 上随机崩溃
问题描述
我正在使用CircleCI在多模块应用程序中运行 Maven 测试。有一些针对 servlet 的集成测试是从本地 Jetty 服务器开始的。这些测试有时仅在 CI 上随机崩溃(在本地机器和其他开发人员机器上都可以),错误是:
Please refer to /root/project/project-name/target/failsafe-reports for the individual test results.
Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
org.apache.maven.surefire.booter.SurefireBooterForkException: The forked VM terminated without properly saying goodbye. VM crash or System.exit called?
Command was /bin/sh -c cd /root/project/project-name && /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -javaagent:/root/.m2/repository/org/jacoco/org.jacoco.agent/0.8.1/org.jacoco.agent-0.8.1-runtime.jar=destfile=/root/project/project-name/target/jacoco-it.exec,output=file -jar /root/project/project-name/target/surefire/surefirebooter1161440693218570841.jar /root/project/project-name/target/surefire 2019-12-10T08-45-37_373-jvmRun1 surefire5250431631797135748tmp surefire_19208522219992515288tmp
Error occurred in starting fork, check output in log
Process Exit Code: 137
Crashed tests:
com.project.name.servlet.InviteServletITCase
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:670)
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:283)
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:246)
at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1161)
at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1002)
at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:848)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:956)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:192)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)
崩溃后我找到了dumpstream
文件./project-name/target/failsafe-reports/2019-12-10T08-45-37_373.dumpstream
:
# Created at 2019-12-10T08:46:59.803
Killed
Java版本是:
openjdk version "1.8.0_232-ea"
OpenJDK Runtime Environment (build 1.8.0_232-ea-8u232-b09-0ubuntu1-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)
我试图应用这个类似的答案:https ://stackoverflow.com/a/33757854/1723695
但它在这里不相关,因为MaxPermSize
选项已过时并且在 Java8 中将被忽略,并且工作机器有足够的内存来运行测试(测试不会消耗很多内存,8Gb绰绰有余):
$ java -XX:+PrintFlagsFinal -version | grep -i maxheapsize
uintx MaxHeapSize := 18440257536 {product}
故障安全插件配置pom.xml
为:
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<groupId>org.apache.maven.plugins</groupId>
<version>3.0.0-M3</version>
<configuration>
<failIfNoSpecifiedTests>false</failIfNoSpecifiedTests>
<runOrder>random</runOrder>
<trimStackTrace>false</trimStackTrace>
<systemPropertyVariables>
<!-- some props for tests -->
</systemPropertyVariables>
</configuration>
</plugin>
失败的测试总是不同的,我没有看到同一个测试失败了两次。
解决方案
推荐阅读
- excel - 为什么 FormulaR1C1 将不需要的括号放入公式中?
- performance - 微服务和低延迟传输
- nunit - 如何修复“程序集不包含测试或未找到正确的测试驱动程序”。
- pfsense - 我可以将输入流量生成的输出流量路由到与输入流量不同的接口吗?
- angular - PayPal交易买家和商家
- excel - 用户正在编辑单元格时禁用 excel 插件的任务窗格
- java - Android 循环遍历嵌套的 hashmap
- vue.js - 如何在NUXT中进行过渡等待目标页面隐藏根页面
- scala - 将向量集合转换为数据框时出现架构错误
- android - 如何使用android存储访问框架附加到文件?