tomcat - 负载测试期间内存不断上升
问题描述
我们正在使用 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
谢谢!
解决方案
JVM 有一种惰性的垃圾收集方法。在接近xmx
值之前,它不会尝试释放内存。此外,使用相同的值通常是一个好习惯,xmx
这xms
应该会给您带来更好的性能,因为 GC 发生得更频繁,但工作量会减少。尝试将 xx 和 xms 都设置为 4G,看看它的行为如何。
推荐阅读
- android - 启动后在 Android 中运行自定义脚本
- linux - yocto build 中结合了用户空间和设备树配方
- c# - 将控制台应用程序作为后台进程运行@ .NET 5
- winapi - 从自定义 PE 文件中的 dll 导入时找不到过程入口点 MessageBoxA
- javascript - 是否可以从我的服务器对 Amazon S3 存储桶上的文件进行加密和解密
- angular - 是否可以在 routerLink 的 queryParams 中使用常量作为属性名称?
- vue.js - 无法在 markerClusterer 和 Vue3 中读取 null 的属性“__e3_”
- excel - 在 Excel 中循环遍历数组并将设置的范围打印为 PDF
- gitlab-ci - gitlab-runner:准备环境未能在 Windows 中启动进程 pwsh
- gtk3 - 在图像上添加图像/图标