如标题所示:我正试图从集装箱化的詹金斯奴隶那里运行Maven自动化测试,在与此斗争了一周后,现在我已经没有想法了。它的工作原理是在AWS实例与4G的RAM,但在不受限制的(在RAM和CPU)容器,它失败与错误如下。当它运行的唯一情况是当我禁用分叉故障安全插件,但这不是一个选项前进。
我尝试了各种Java /Maven/Failsafe/Surefire选项,我可以用谷歌找到,但没有运气(如添加全局Java-Xmx选项,也pom.xml每个插件)。
有人这样运行成功了吗?
这看起来应该更容易处理,但如果我有头发的话,我现在应该把头发都拔出来了。我仍然不喜欢承认失败的想法。请帮忙!
以下是插件失败后创建的转储:
故障保护摘要。xml:
<?xml version="1.0" encoding="UTF-8"?>
<failsafe-summary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-sure
fire-plugin/xsd/failsafe-summary.xsd" result="254" timeout="false">
<completed>0</completed>
<errors>0</errors>
<failures>0</failures>
<skipped>0</skipped>
<failureMessage>org.apache.maven.surefire.booter.SurefireBooterForkException: The forked VM terminated without properly saying goodbye. VM cras
h or System.exit called?
Command was /bin/sh -c cd /var/lib/jenkins/workspace/ui_acceptance_test_chrome_docker_freestyle && /usr/lib/jvm/java-1.8-openjdk/jre/bin/ja
va -Dfile.encoding=UTF-8 -jar /var/lib/jenkins/workspace/ui_acceptance_test_chrome_docker_freestyle/target/surefire/surefirebooter81206735832436906
05.jar /var/lib/jenkins/workspace/ui_acceptance_test_chrome_docker_freestyle/target/surefire 2017-10-10T15-02-35_189-jvmRun1 surefire59539140137458
58339tmp surefire_03559885505222114015tmp
Error occurred in starting fork, check output in log
Process Exit Code: 1
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:686)
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:535)
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:280)
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:245)
at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1124)
at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:954)
at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:832)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
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:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
</failureMessage>
</failsafe-summary>
2017-10-10T15-02-35189-jvmRun1。转储:
# Created on 2017-10-10T15:02:36.303
Killing self fork JVM. Maven process died.
我知道这已经有一段时间了,但我会为这个花了我一天多时间才解决的问题添加我的解决方案。
问题:我正在docker容器中的PaaS中运行集成测试,无法控制进程的内存分配。默认行为是failsafe/surfere分叉JVM并在其上运行测试。我看到了一个错误“fork”并没有正确地终止对虚拟机的内存分配,因为我看到了一个错误:fork没有正确地为虚拟机分配内存。
解决方案:我的解决方案是禁用JVM的分叉,让所有测试与主maven进程在同一个JVM中运行,现在对于许多人来说,这可能不是理想的解决方案,但如果您只能控制主maven进程的最大内存分配,那么它就会起作用。
要禁用分叉,只需在配置中设置forkMode即可:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<forkCount>0</forkCount>
</configuration>
......
更新:由于给出了这个解决方案,现在似乎可以将参数传递给分叉的JVM,因此不需要早期的解决方案。
来自分叉测试执行下的maven文档:
使用artLine
属性,您可以指定要传递给分叉JVM进程的其他参数,如内存设置。来自主maven进程的系统属性变量也传递给forked进程。此外,您可以使用元素sytuvetyVariables
来指定要在测试执行期间添加到系统属性中的变量和值。
https://maven.apache.org/surefire/maven-failsafe-plugin/examples/fork-options-and-parallel-execution.html
我在以下环境中遇到了同样的问题:来自alpine 3.7的docker图像,maven surefire插件版本2.21。0
其根本原因在SUREFIRE-1422中描述:SUREFIRE尝试使用ps-p
检查分叉过程。我的解决方案是添加procps:
RUN apk add --no-cache procps
尝试降级到Surefire 1.18。1.我今晚偶然发现了这个问题,花了几个小时研究它,到目前为止,还不清楚为什么新版本的Surefire会在Docker的领导下崩溃。
*更新*
我对阿尔卑斯Linux有一个问题,但是当使用Ubuntu或Debian基础图像时,一切都很好。所以1.21中的某些东西破坏了与某些操作系统的兼容性。
我写测试。我使用的是Cucumber 6.8.1、TestNG 7.0.0。为了并行化,我连接了maven-surefire-plugin2.22.2,但我现在没有并行测试,目前我只逐一运行所有测试。 大多数测试工作良好(大约45个测试)。但是有几个测试是有问题的,即:当运行这样的测试时,我得到错误“分叉的VM在没有正确地说再见的情况下终止了。VM崩溃或System.Exit调用?”以下是全文:
我已经配置了maven-surefire-plugin和jacoco插件来生成junit代码覆盖率报告。然而,我在两个不同的场景中得到了两个不同的错误。你能看看下面的错误并帮助我吗?任何帮助都是值得赞赏的。 当我在maven-surefire-plugin配置中将forkCount保持为0(零)时,所有测试都会成功执行,但不会生成jacoco报告。它给我的消息是“由于缺少执行数据文件,跳过JaCo
“分叉的虚拟机在没有正确说再见的情况下终止。虚拟机崩溃或系统调用退出?” 仅用一个分叉运行这个不会产生问题(并且一切都过去了) 有一些关于这个问题的信息,包括这个StackOverflow问题和这个bug(现在似乎已经解决了) 更新#1在使用--debug(-x)运行maven目标后添加相关的out put
当我从Eclipse(Neon.3,EE版本)运行maven命令“mvn clean install”时,我得到错误: 组织。阿帕奇。专家插件。PluginExecutionException:目标组织的执行默认测试。阿帕奇。专家插件:maven surefire插件:2.12。4:测试失败:分叉的VM没有正确地说再见就终止了。虚拟机崩溃或系统崩溃。你叫出口吗? Eclipse安装使用m2e-pl
我使用的是geb spock maven,ubuntu上的surefire 2.22.0版。直到两周前,它还可以正常工作,但突然我发现forked虚拟机没有恰当地说再见就终止了。虚拟机崩溃或系统崩溃。你叫出口吗 错误。以下是我的配置: 当我点击命令时,它会抛出以下错误: 下面是我完整的pom。xml 请关注这个问题。谢啦
在运行单元测试时,出现以下异常: 有什么建议吗?