【问题标题】:Troubleshooting java memory leaks in Jetty apps解决 Jetty 应用程序中的 java 内存泄漏问题
【发布时间】:2015-11-15 14:14:04
【问题描述】:

我正在开发一个带有独立 jetty 9 Web 服务器的 Java Web 应用程序,但我遇到了一些内存泄漏问题:每个连接的客户端都会增加主 Java 进程的内存使用量,但 GC接缝永远不会随着时间的推移而恢复。

内存问题并没有在一开始就出现,我也没有对架构的基础进行复杂的更改,所以我认为可能是某个地方的“糟糕的剩余代码”。 该应用程序使用 webocket servlet 来传递推送消息(加上一个单独的线程来使用套接字连接到其他服务)和其他 servlet 来处理客户端请求(读/写数据库、登录等)所以也许我没有正确使用服务.

我在内存分析方面没有太多经验,但是我见过 jetty 的 jmx + jconsole(docs heresimple tutorial here),我真的不知道如何跟踪单个组件的内存使用情况(对象、字段、线程等)。在这种情况下我应该使用其他工具进行分析和内存泄漏调试吗?

【问题讨论】:

    标签: java memory memory-leaks jetty


    【解决方案1】:

    VisualVM 是进行内存分析的绝佳方式,最好的一点是它随 JDK 一起提供。为您的应用程序启用 JMX 后,您需要 connect 使用它。连接到它后,要开始内存分析,您希望使用 Jetty 应用程序重新创建您认为导致内存泄漏的情况,然后执行“堆转储”。 “堆转储”将允许您按照您的要求检查objects, fields, etc

    我能否建议,在构建和分析基于 Jetty 的应用程序后,Jetty 极不可能导致内存泄漏。它更有可能与您的应用程序级代码相关,或者可能(但也不太可能)与第 3 方库有关。此外,有时内存泄漏与在方法中花费的 CPU 时间密切相关——换句话说,分析 CPU 可以帮助诊断内存问题,反之亦然。因此,如果您不确定从哪里开始,请寻找异常占用 CPU 的方法,有时它们是麻烦的根源。

    【讨论】:

    • 嘿 paulb 抱歉,我有一个消耗大约 530MB 的小型 tomcat webapp 现在我改为码头,现在我有 1 GB 的码头正常吗?
    猜你喜欢
    • 2012-08-19
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    相关资源
    最近更新 更多