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


69

我正在使用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 OS。如果我能够解决它,我的取消部署和重新部署过程是否会顺利进行?


自从我以类似问题来到这个问题。但是我发现,我们正在读取某些文件而不是关闭它们,因此在重新部署时不会将其删除。因此,与其尝试其他解决方案,不如看一下代码,看看您如何使用未删除的文件。
要命的

Answers:


126

这在Windows环境中非常普遍,但是可以通过antiResourceLockingcontext属性找到解决方案:

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

<Context antiResourceLocking="true">

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


它仅在Windows中发生吗?Tomcat基于Java,在带有Tomcat的Ubuntu上也遇到类似的问题。
icedwater

2
我只说过Windows常见的情况,至少对我和我认识的人都是这样。对于Ubuntu,情况可能会完全相同。
mvlupan 2013年

10
来自tomcat.apache.org/tomcat-7.0-doc/config/context.html antiJARLocking antiResourceLocking的子集,因此,为防止重复工作和可能出现的问题,任何时候都应仅将这些属性之一设置为true
2014年1

antiJARLocking设置为true,从配置中删除属性对我有所帮助(Tomcat 8)
tobijdc

仅与antiResourceLoking =“ true”配合使用即可。两种情况下,.war文件的部署速度都较慢,而没有两种情况下,.war文件的部署速度都较慢,但可以节省服务器重启的时间。
卡特二世

13

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


1
这并不总是有效。如果jar文件被锁定,则无法删除父文件夹。停止应用程序并不总是释放该jar。强制重新启动Tomcat。
cbmeeks

2

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

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

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

如果您确实对状态感到困惑,请关闭浏览器,重新启动tomcat,打开“ manager App”,单击“停止”,然后取消部署。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.