gpt4 book ai didi

java - 处理大型 Java 项目中内存泄漏的最佳实践?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:53:13 25 4
gpt4 key购买 nike

在我参与的几乎所有大型 Java 项目中,我都注意到应用程序的服务质量会随着容器的正常运行时间而降低。这很可能是由于代码中的内存泄漏。

解决这个问题的正确方法显然是追溯问题的根本原因,修复代码中的漏洞。解决问题的快速而肮脏的方法是简单地重新启动 Tomcat(或您正在使用的任何 servlet 容器)。

这是我的三个问题:

  • 假设您选择通过追踪问题的根本原因(内存泄漏)来解决问题,您将如何收集数据以放大问题?

  • 假设您选择通过简单地重启容器来加快速度的快速而肮脏的方式,您将如何收集数据以选择最佳重启周期?

  • 您是否能够在很长一段时间内部署和运行项目,而无需重新启动 servlet 容器以恢复活力?还是偶尔的 servlet 重启是必须接受的事情?

最佳答案

Assume that you choose to solve the problem by tracing the root cause of the problem (the memory leaks), how would you collect data to zoom in on the problem?

使用 jmap 进行堆转储并使用 Eclipse Memory Analyzer 加载转储.从那里您可以分析哪些对象占用的内存最多,哪些“根”阻止收集其他对象等。

还有其他的堆分析程序,比如jhat ,但我发现 EMA 是最快和最好的(免费)解决方案。

Assume that you choose the quick and dirty way of speeding things up by simply restarting the container, how would you collect data to choose the optimal restart cycle?

使用 JMX 监控堆大小以及其他堆和 GC 统计数据。

Have you been able to deploy and run projects over an extended period of time without ever restarting the servlet container to regain snappiness?

是的。通过避免/修复内存泄漏。

关于java - 处理大型 Java 项目中内存泄漏的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2960345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com