java 如何在Jmeter执行时强制重置垃圾收集

q3qa4bjr  于 2023-08-02  发布在  Java
关注(0)|答案(1)|浏览(85)

目前我有6000请求每分钟使用200线程设置在我的Jmeter配置,前几个小时一切看起来很好,直到它开始下降#的请求,我注意到内存/垃圾收集开始堆积或达到限制我设置的是24 GB。有没有一种方法可以强制重置垃圾收集,这样我的请求将以每分钟6000个请求的速度返回?这是托管在AWS云上,我正在运行我的性能测试。非常感谢你的答复。- 谢谢-谢谢
我试着运行这个命令
-jmap -histo:live 13510
-jcmd 13510 GC.run
但似乎我在Jmeter上的请求数量没有恢复到6000。
预期结果:我希望我的Jmeter请求恢复到每分钟6000个请求。
截图:
x1c 0d1x的数据





x1c4d 1x的

kkbh8khc

kkbh8khc1#

我认为24GB的堆对于200个线程来说太多了。而且6 GB的MaxMetaspaceSize绝对是太多了。
根据“最佳堆大小”一章:
如果Java堆的占用率太高,垃圾收集就会频繁发生。如果占用率较低,垃圾收集不频繁,但持续时间较长…尝试将Java堆的内存占用保持在Java堆大小的40%到70%之间…Java堆的最高占用率点优选地不高于最大堆大小的70%,并且平均占用率在40%和70%占用率之间。如果占用率超过70%,则调整Java堆的大小。
一个大小正确的Java堆应该总是有一个最大Java堆大小的40%到70%之间的内存占用。要确保占用率不超过70%,请将最大Java堆大小设置为至少比GCMV提供的最大占用率值大43%。然后,此设置使最大值为Java堆大小的70%,平均值超过Java堆大小的40%。
因此,我建议将最小堆大小减少到默认值1GB,并对MaxMetaspaceSize做同样的事情,它应该可以解决您的问题。
如果测试的性质假设堆使用率很高,并且您无法分配更少的内存,并且仍在寻找强制垃圾收集的方法,则可以使用合适的JSR223测试元素和以下Groovy code来完成:

System.gc()

字符串
但是,请事先熟悉Guide to System.gc()文章。

相关问题