gpt4 book ai didi

java - 内存不足异常Tomcat

转载 作者:行者123 更新时间:2023-11-28 23:00:18 25 4
gpt4 key购买 nike

我有一个安装了一些应用程序的 Tomcat 7,现在通常可以非常快速地上传新版本的应用程序:所以我打包 war 并取消部署现有的并部署新的 war 或重新部署现有的应用程序,几周后问题来了,当我看到内存几乎已满,以防止一些意外的内存不足异常导致我们的客户无法服务

我是否必须不时重启 Tomcat?这是正常的吗?是否有 Tomcat 零重启的实用解决方案?

请专家解答

更新:这个库确实可以帮助避免 permgem 问题和类加载器泄漏: https://github.com/mjiderhamn/classloader-leak-prevention , 但请记住,不泄漏是您的责任,没有 Elixir 。 Visual VM 确实可以帮助检测类加载器泄漏。

最佳答案

Tomcat 零重启的实用解决方案是编写不会泄漏内存的应用程序。就这么简单 - Tomcat 不太可能自己泄漏内存 ;)换句话说:只要您的应用程序正在泄漏内存,重启就不可避免。您可以调整内存设置,但只是在推迟不可避免的事情。Tomcat7 可以检测到一些内存泄漏(甚至修复一些简单的内存泄漏)——如果您安装了 Tomcat 管理器,则可以通过该功能公开该功能。但是,它不会帮助您指出泄漏的位置。

从最近的经验来看,我有一个应用程序在正常运行期间似乎没有泄漏,但有一个 PermGen 泄漏 - 这意味着在我尝试做你正在做的事情之前我没有真正看到泄漏 - 热部署。我只能在填充 PermGen 之前进行一些部署,因为 Tomcat 无法卸载类的旧实例......网络上可能有更好的 PermGen 泄漏解释,但快速谷歌给了我这个:http://cdivilly.wordpress.com/2012/04/23/permgen-memory-leak/

但是,如果您的应用程序在运行一段时间后崩溃,则很可能存在适当的内存泄漏。您可以调整堆大小和垃圾收集设置以尝试补救/解决此问题,但很可能唯一真正的解决方法是追踪泄漏、修复代码并构建一个不泄漏的版本。...但是除非您可以确保每个版本都没有泄漏,否则您需要一个重新启动服务的策略。如果您在发布期间不这样做,请考虑在非高峰时段进行。如果您有一个集群,您可以考虑使用 memcached 设置 Tomcat 以进行 session 复制,以便在集群中重新启动节点时不会中断用户。您还可以考虑设置 monit、god、runit、upstart、systemd 等以自动重启失败的服务...

关于java - 内存不足异常Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20083029/

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