【发布时间】:2016-05-11 12:48:44
【问题描述】:
我有一个安装了一些应用程序的 Tomcat 7,现在通常会非常快地上传应用程序的新版本:所以我打包战争并取消部署现有的战争并部署新战争或重新部署现有的应用程序,几周后问题来了,当我看到内存几乎已满时,为了防止一些意外的内存不足异常导致我们的客户没有服务
我必须不时重启Tomcat吗? ¿ 这正常吗? Tomcat 零重启是否有实用解决方案?
请专家解答
更新:这个库确实可以帮助避免 permgem 问题和类加载器泄漏: https://github.com/mjiderhamn/classloader-leak-prevention,但请记住,不泄漏是您的责任,没有灵丹妙药。 Visual VM 确实可以帮助检测类加载器泄漏。
【问题讨论】:
-
我强烈怀疑在您的 Tomcat 上运行的一个/多个应用程序存在可能导致内存泄漏的编码问题。
-
Java 中的热部署可能会很棘手,做错或代码中存在非常微妙的问题可能会导致各种问题。然而,它可以做到。我假设您已经阅读了有关热部署的 tomcat 文档?如果是这样,你最好的办法是在测试服务器上做几次,然后检查堆(我认为是堆内存泄漏?)试图找出发生了什么
-
@Nambary 一些实用的解决方案来发现那个应用程序存在导致内存泄漏的编码问题?
-
Google 有大量关于解决内存泄漏的信息,但只是一个警告:没有简单的解决方案。
-
@Taylor 好吧,我认为需要一些爱因斯坦的解决方案:'尽可能简单而不简单'