【问题标题】:Memory keep rising during Load Test负载测试期间内存不断上升
【发布时间】:2019-12-17 07:18:23
【问题描述】:

我们正在使用 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:+UseAdaptiveGCBoundary

-XX:+CMSClassUnloadingEnabled

-XX:PermSize=300m

-XX:MaxPermSize=300m

-Dnetworkaddress.cache.ttl=43200

谢谢!

【问题讨论】:

  • 附加信息请求。 RAM 大小、# 核心、MySQL 主机服务器上的任何 SSD 设备?在 pastebin.com 上发布并分享链接。从 SSH 登录根,文本结果: B) SHOW GLOBAL STATUS;至少 3 天后正常运行时间 C) 显示全局变量; D) 显示完整的处理程序; E) 完整的 MySQLTuner 报告和可选的非常有用的信息,如果可用,包括 - htop 或 top 用于大多数活动应用程序,ulimit -a 用于 Linux/Unix 限制列表,iostat -xm 5 3 用于按设备和核心/cpu 计数的 IOPS,为服务器工作负载调优分析提供建议。
  • @WilsonHauck 我的服务器有 32GB RAM、i7 CPU 和 256GB SSD。在我的负载测试期间,CPU 使用率仅约为 5%。 MySQL全局变量和状态中有很多值。我认为这很难在这里展示。你有什么需要的变量吗?
  • 请在 pastebin.com 上发帖并分享链接以避免 SO 上的存储限制。这是一个免费的 TEXT 文件共享网站。

标签: tomcat memory-leaks jmeter


【解决方案1】:

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

【讨论】:

  • 感谢您的建议。我会试试这个并重新运行负载测试!
猜你喜欢
  • 2011-05-10
  • 2012-07-28
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多