3

我目前正在使用 jenkins 创建一个性能框架并执行 Jenkins 的性能测试。我正在使用https://github.com/jmeter-maven-plugin/jmeter-maven-plugin这个插件。此性能框架中的单用户健全性测试运行良好,并继续进行了 200 个用户的实际性能测试,并在 2 分钟内收到错误 java.lang.OutOfMemoryError: GC overhead limit exceeded 我在 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's),~2.5GHZ 内存:8192MB内存

请问有什么帮助吗?

4

2 回答 2

2

关于 GC 开销的错误意味着 Jenkins 在垃圾收集中崩溃了。这意味着它可能花更多的时间做垃圾收集而不是做有用的工作。

这种情况通常发生在堆对于应用程序来说太小时。对于现代多代堆布局,很难说到底需要改变什么。

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

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

于 2017-01-05T16:44:02.377 回答
0

需要注意的几点

  1. 您正在使用集成的 Maven 目标来运行您的 jmeter 测试。这将使用 Jenkins 作为容器来启动您的 jmeter 测试,从而不仅会影响您的工作,还会影响 jenkins 的其他用户
  2. 最好将执行推迟到不同的客户端机器上,比如专用的 jmeter 机器,它使用自己的带有参数的 JVM 来启动您的测试(或)使用您提供的那个

总之,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 永久加载所有文件,它将直接转到老一代,从而为新一代缩小任何可用空间。

于 2017-01-05T18:48:24.580 回答