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

Jenkins java.lang.OutOfMemoryError:超出GC开销限制,java,jenkins,garbage-collection,maven-plugin,jmeter-maven-plugin,Java,Jenkins,Garbage Collection,Maven Plugin,Jmeter Maven Plugin,我目前正在使用jenkins创建一个性能框架,并执行jenkins的性能测试。我正在使用这个插件。在这个性能框架中,单用户的健全性测试运行良好,并进行了200个用户的实际性能测试,在2分钟内收到了错误 java.lang.OutOfMemoryError:超出GC开销限制 我在jenkins.xml中尝试了以下内容 <arguments>-Xrs -Xmx2048m -XX:MaxPermSize=512m -Dhudson.lifecycle=hudson.lifecycle.Wi

我目前正在使用jenkins创建一个性能框架,并执行jenkins的性能测试。我正在使用这个插件。在这个性能框架中,单用户的健全性测试运行良好,并进行了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>
-Xrs-Xmx2048m-XX:MaxPermSize=512m-Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle-jar“%BASE%\jenkins.war”--httpPort=8080--prefix=/jenkins--webroot=“%BASE%\war”
但它不起作用,而且还注意到,每当我增加内存时,jenkins服务就会停止,并且必须将内存减少到1Gb,然后服务就会重新启动

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


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


有什么帮助吗?

关于GC开销的错误意味着Jenkins在垃圾收集方面遇到了麻烦。这意味着它可能要花更多的时间做垃圾收集而不是做有用的工作

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


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

然后遵循此处的建议:

需要注意的几点

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

    这样,您的测试将有更好的扩展机会。另外,您还没有提到您正在使用哪种类型的脚本引擎。根据Jmeter文档,带有groovy的JSR223存在内存泄漏。请参阅

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

    -d64-XX:+CMSClassUnloadingEnabled


    还有,你的新一代人有多大-XX:NewSize=1024m-XX:MaxNewSize=1024m?请注意,jmeter将永久加载所有文件,它将直接进入旧一代,从而减少新一代的可用空间

    将内存(PermSize或heap?)增加到2GB时会出现什么错误?还有,这台机器的规格是什么?因为我在做一台POC jenkins,它的高级别规格是在我的笔记本电脑上,它的系统型号如下:Latitude E7270处理器:Intel(R)Core(TM)i5-6300U CPU@2.40GHZ(4CPU),~2.5GHZ内存:8192MB RAM。当我将内存增加到2GB(我认为是唯一的堆)时,没有错误简而言之,jenkins服务停止了添加该信息的问题,并包含了关于更改了哪个cmd行参数以将内存增加到2GB的信息。添加了该信息以及关于cmd行参数的信息。它已经在问题中发布了。我尝试了这个-Xrs-Xmx2048m-XX:MaxPermSize=512m-Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle-jar“%BASE%\jenkins.war”--httpPort=8080--prefix=/jenkins--webroot=“%BASE%\war”但Jenkins服务和在VM初始化期间看到此异常错误时,无法为2097152KB对象堆保留足够的空间,因为8gb的ram可用不确定为什么2GB也会失败“-verbose:gc-XX:+PrintGCDetails-XX:+PrintGCTimeStamps”这应该包含在jenkins.xml中吗?我没有使用JSR223采样器。关于指定或修改新一代尺寸,我需要在笔记本电脑中安装的jmeter中指定吗?我不太理解将测试执行移出jenkins并将报告作为插件的输入的建议?您能详细介绍一下这些方面吗?当您使用jmeter maven插件时,执行使用jenkins JVM进程和jmeter类,所有内容都在jenkins中加载。这是一个很难扩展的模型,因为您使用jenkins作为控制器主机来运行测试。您应该添加一个jenkins从机(另一台安装了jmeter的windows机器),并且应该从jenkins主机到从机运行测试。Jenkins master可以连接到从属服务器并运行windows批处理脚本。使用jmeter命令行界面运行测试,并使用CmdRunner处理结果。是的-您在当前模型中执行的所有GC调优都将针对jenkins JVM,因为maven插件在jenkins JVM中运行。您应该在jenkins JVM上设置新一代,就像您增加堆大小一样