我们正在使用Spring的Jersey,Hibernate来开发RESTful服务器。使用JMeter工具在本地运行负载测试,并使用javamelody监视CPU和内存使用情况。
几天后,我发现内存不断增加,但似乎再也没有释放过。我从javamelody生成了堆转储,并使用Eclipse内存分析器(MAT)来检查任何内存泄漏,但结果是未找到内存泄漏。
我不知道内存不断增加的原因。 有经验的人知道原因吗?
我的服务器环境是Tomcat 9和MySQL数据库。
下面是Tomcat Java选项
-Xms1024m
-Xmx4096m
-XX:NewSize = 512m
-XX:MaxNewSize = 2560m
-XX:MaxGCPauseMillis = 250
-XX:+ UseConcMarkSweepGC
-XX:+使用AdaptiveGCBoundary
-XX:+ CMSClassUnloadingEnabled
-XX:PermSize = 300m
-XX:MaxPermSize = 300m
-Dnetworkaddress.cache.ttl = 43200
谢谢!
答案 0 :(得分:0)
JVM有一种惰性的垃圾收集方法。在接近xmx
值之前,它不会尝试释放内存。同样,对xmx
和xms
使用相同的值通常是一个好习惯,因为GC发生频率更高,但工作起来会更省力,因此应该会为您提供更好的性能。尝试将xmx和xms都设置为4G,并查看其行为。