gpt4 book ai didi

java - 重新部署war时需要重启tomcat吗?

转载 作者:行者123 更新时间:2023-11-30 06:50:57 32 4
gpt4 key购买 nike

我知道 Tomcat 在重新部署时可以重新加载 .war 文件,我不需要杀死 Tomcat 进程并重新启动它。我可以删除 .war,等待 Tomcat 取消部署它,然后将新的 .war 复制到 Web 路径。但是,经过多次没有重启Tomcat的琐碎的更新 war ,Tomcat是否可能不会有效释放内存或导致一些性能问题?假设一个Tomcat实例中只有一个war应用。

最佳答案

基本问题是 Java 目前不提供在 Java Virtual Machine (JVM) 中运行的代码部分之间的任何类型的隔离。 , 与 operating system does with processes 相同.您可以在不影响 Windows/Linux/etc 下的另一个进程的情况下终止一个进程。您所能做的就是确保事物可以被垃圾收集。

对于 Tomcat WAR正在处理 - 根据 various specifications - 要求每个 war 都有自己的类加载器,负责运行该代码。当取消部署 WAR 时,最终结果应该是该类加载器应该被垃圾收集。

不幸的是 garbage collector只能处理完全未引用的对象,并且 WAR 代码中可能存在大量微妙的错误,可以禁止这样做,然后每次重新部署都会导致创建另一个类加载器并且没有被破坏,因此你有内存泄漏。在 Tomcat 内部检测和解决这些类型的错误方面付出了很多努力,但如果没有 JVM 支持,几乎不可能做到 100% 正确。

除了修复 WAR 之外,唯一的解决方法是重新启动 JVM。

您可以使用 VisualVM 查看内存使用情况即使在生产环境中,也可以查看 Tomcat JVM 随着时间的推移会发生什么。

关于java - 重新部署war时需要重启tomcat吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40703778/

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