取消部署 Tomcat Web 应用程序时如何防止文件锁定?

Posted

技术标签:

【中文标题】取消部署 Tomcat Web 应用程序时如何防止文件锁定?【英文标题】:How to prevent file locking when undeploying a Tomcat web app? 【发布时间】:2013-01-30 03:50:25 【问题描述】:

我在 tomcat 7 中使用管理器应用程序, 而且我无法完全取消部署应用程序。

它说 FAIL - Unable to delete [F:\apache-tomcat-7.0.33\webapps\balaji]. The continued presence of this file may cause problems.

由于某种称为内存泄漏的现象,我在某处读到它,如果我们修复它,问题将得到解决。

谁能告诉我tomcat 7中的内存泄漏是什么,我们该如何解决? 我正在使用 Windows 7 操作系统。 如果我能够修复它,我的取消部署和重新部署过程会顺利进行吗?

【问题讨论】:

因为我遇到了类似的问题。但我发现我们正在读取一些文件并没有关闭它们,因此在重新部署时它们没有被删除。因此,与其尝试其他解决方案,不如查看代码并了解您如何使用未被删除的文件。 【参考方案1】:

这在 Windows 环境中很常见,但通过 antiResourceLocking 上下文属性有一个解决方案:

从 /tomcat/conf 文件夹打开 context.xml 并修改上下文以匹配:

<Context antiResourceLocking="true">

编辑:在@JanM 评论之后更新了属性。以前它还包含“antiJARLocking”

【讨论】:

它只出现在 Windows 中吗? Tomcat 基于 Java,我在使用 Tomcat 的 Ubuntu 上看到了类似的问题。 我只是说这在 Windows 中很常见,至少对我和我认识的人来说是这样。 Ubuntu 很可能也是如此。 来自tomcat.apache.org/tomcat-7.0-doc/config/context.html antiJARLocking 是 antiResourceLocking 的一个子集,因此,为了防止重复工作和可能出现的问题, 其中只有一个任何时候都应将属性设置为 true. 我将 antiJARLocking 设置为 true,从配置中删除该属性对我有帮助(Tomcat 8) 只适用于 antiResourceLoking="true"。使用这两种方法,.war 文件的部署速度较慢,使用其中任何一种方法,部署速度都比不使用时慢,但可以节省服务器重启。【参考方案2】:

这是tomcat 的常见问题之一。 Tomcat 服务器在启动时捕获资源并进行部署。在取消部署时,tomcat 仍会使用一些资源。它还没有释放资源,但与此同时,tomcat 中的另一个线程会尝试清理相同的资源。因此,删除这些资源将失败。 一种最好的方法是手动清理 webapps 中应用程序的根目录。

【讨论】:

这并不总是有效。如果 jar 文件被锁定,则无法删除父文件夹。停止应用程序并不总是释放该 jar。强制重启 Tomcat。【参考方案3】:

我在 Apache Tomcat/8.0.5 中遇到了同样的问题。我使用管理器应用程序执行了以下步骤,它对我有用。

关闭浏览器,包括所有选项卡(删除缓存)。 重新打开“Manager App”并首先确保该应用程序是 已停止(应启用开始按钮)。 现在点击取消部署。

我认为当我们直接单击取消部署时,首先它会锁定 jar,停止应用程序并尝试取消部署但失败并显示 FAIL - Unable to delete 消息。

如果您真的对状态感到困惑,请关闭浏览器,重新启动 tomcat,打开“管理器应用程序”,单击停止然后取消部署。

【讨论】:

【参考方案4】:

以管理员身份运行您的 IDE。它对我有用

【讨论】:

以上是关于取消部署 Tomcat Web 应用程序时如何防止文件锁定?的主要内容,如果未能解决你的问题,请参考以下文章

在 Tomcat 5.5 中部署 web-app 时如何解决错误 listenerStart?

如何防止eclipse在Tomcat上部署测试类?

停止/重新部署时 Tomcat 7+ 内存泄漏。弹簧数据,JPA,休眠,MySQL

012在Tomcat下如何手动部署Web应用

死磕Tomcat系列——Tomcat如何做到热加载和热部署的

关于如何将我的spring boot web应用部署到tomcat8的一个问题