首页 > 解决方案 > 负载测试期间内存不断上升

问题描述

我们正在使用 Jersey、Spring、hibernate 来开发一个 RESTful 服务器。使用 JMeter 工具在本地运行负载测试,并使用 javamelody 监控 CPU 和内存使用情况。

几天后,我发现内存一直在上升,但似乎永远不会释放回来。我从 javamelody 生成堆转储并使用 Eclipse Memory Analyzer (MAT) 检查任何内存泄漏,但结果是没有发现内存泄漏。

在此处输入图像描述

我不知道内存不断上升的原因。有经验的人知道原因吗?

我的服务器环境是 Tomcat 9 和 MySQL 数据库。

下面是 Tomcat Java 选项

-Xms1024m

-Xmx4096m

-XX:NewSize=512m

-XX:MaxNewSize=2560m

-XX:MaxGCPauseMillis=250

-XX:+UseConcMarkSweepGC

-XX:+使用自适应GC边界

-XX:+CMSClassUnloadingEnabled

-XX:PermSize=300m

-XX:MaxPermSize=300m

-Dnetworkaddress.cache.ttl=43200

谢谢!

标签: tomcatmemory-leaksjmeter

解决方案


JVM 有一种惰性的垃圾收集方法。在接近xmx值之前,它不会尝试释放内存。此外,使用相同的值通常是一个好习惯,xmxxms应该会给您带来更好的性能,因为 GC 发生得更频繁,但工作量会减少。尝试将 xx 和 xms 都设置为 4G,看看它的行为如何。


推荐阅读