Jenkins java.lang.OutOfMemoryError:超出了GC开销限制

时间:2017-01-05 16:32:01

标签: java jenkins garbage-collection maven-plugin jmeter-maven-plugin

我目前正致力于使用jenkins创建性能框架并执行Jenkins的性能测试。我正在使用https://github.com/jmeter-maven-plugin/jmeter-maven-plugin这个插件。单个用户在此性能框架中的健全性测试运行良好,并继续进行200个用户的实际性能测试,并在2分钟内收到错误 java.lang.OutOfMemoryError:超出了GC开销限制 我在jenkins.xml中尝试了以下内容

<arguments>-Xrs -Xmx2048m -XX:MaxPermSize=512m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --prefix=/jenkins --webroot="%BASE%\war"</arguments>

但它没有工作,并且还注意到每当我增加内存时jenkins服务停止并且必须将内存减少到1Gb然后服务重新启动。

还增加了jmeter和java的内存,但没有帮助。 在.jmx文件视图中,结果树和所有其他侦听器都被禁用,但问题仍然存在。

由于我正在做POC jenkins托管在我的笔记本电脑和高级规格如下 系统型号:Latitude E7270处理器:Intel(R)Core(TM)i5-6300U CPU @ 2.40GHZ(4CPU&#39; s),~2.5GHZ内存:8192MB RAM

请帮忙吗?

2 个答案:

答案 0 :(得分:0)

关于GC开销的错误意味着Jenkins正在垃圾收集中挣扎。这意味着它可能花费更多的时间来进行垃圾收集而不是做有用的工作。

当堆对于应用程序而言太小时,通常会出现这种情况。使用现代多代堆布局,很难说究竟需要改变什么。

我建议您使用以下选项启用Verbose GC“-verbose:gc -XX:+ PrintGCDetails -XX:+ PrintGCTimeStamps”

然后按照此处的建议:http://www.oracle.com/technetwork/articles/javase/gcportal-136937.html

答案 1 :(得分:0)

几点需要注意

  1. 您正在使用集成的maven目标来运行您的jmeter测试。这将使用Jenkins作为容器来启动你的jmeter测试,从而不仅影响你的工作,还影响jenkins的其他用户
  2. 最好将执行推迟到不同的客户机,如专用的jmeter机器,它使用自己的JVM参数来启动测试(或)使用你提供的那个
  3. 总之, 1.将测试执行移出jenkins 2.提供报告的输出作为性能插件的输入[这也可能会崩溃,因为在处理8小时结果文件等耐久性测试结果时需要更多的JVM内存]

    这样,您的测试将有更好的扩展机会。此外,您还没有提到您正在使用的脚本引擎类型。根据Jmeter文档,带有groovy的JSR223存在内存泄漏。请参考 http://jmeter.apache.org/usermanual/component_reference.html#JSR223_Sampler

    尝试添加-Dgroovy.use.classvalue = true以查看是否有帮助(假设您使用的是groovy)。如果您使用的是Java 8,那么很有可能它为jmeter中的所有脚本创建了唯一的类,并且它增加了JVM之外的元空间。在这种情况下,限制元空间并使用类卸载和64位JVM,如

    -d64 -XX:+ CMSClassUnloadingEnabled。

    另外,你的新一代尺寸是多少。 -XX:NewSize = 1024m -XX:MaxNewSize = 1024m?请注意,jmeter永久加载所有文件,它将直接进入旧一代,从而缩小新一代的可用空间。