【问题标题】:How to prevent file locking when undeploying a Tomcat web app?取消部署 Tomcat Web 应用程序时如何防止文件锁定?
【发布时间】: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 操作系统。 如果我能够修复它,我的取消部署和重新部署过程会顺利进行吗?

【问题讨论】:

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

标签: tomcat memory-leaks tomcat7 file-locking undeploy


【解决方案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。它对我有用

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2012-11-02
      • 2013-08-13
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 2012-03-17
      • 1970-01-01
      相关资源
      最近更新 更多