【问题标题】:Tomcat undeploy does not remove web application artifactsTomcat 取消部署不会删除 Web 应用程序工件
【发布时间】:2010-10-03 19:29:50
【问题描述】:

在使用 Manager 取消部署应用程序时,如何让 Tomcat 删除 Web 应用程序工件?

我使用的是 Tomcat 6.0.18。该应用程序是使用 tomcat-maven-plugin 1.0-SNAPSHOT 部署的,但通过 maven 插件或 Web 界面的行为是相同的。

Tomcat 文档提供了有关取消部署在 Manager How To.

war文件可以删除;但是,解压后的应用程序目录仍然阻止重新部署。

【问题讨论】:

    标签: tomcat


    【解决方案1】:

    如果您通过应用程序中的 URL 访问 JAR 库中的资源,也可能是文件锁定问题(尤其是在 Windows 上)。

    我刚刚遇到了类似的问题,并通过修改

    中的以下行来解决它

    Apache Tomcat/conf/context.xml

    文件到:

    <Context antiJARLocking="true" antiResourceLocking="true" >
    

    (请注意,这是否是生产安全存在一些争论,因为它会为每次重新部署创建您的 web 应用程序的副本,但如果您在 Windows 上并且无法从源头解决问题,那么这可能提供一个可行的解决方案)。

    【讨论】:

    • 这个技巧对我有用。我无法使用“grails test tomcat undeploy”命令取消部署我的 grails 应用程序。但是有了这些选项,它就神奇地开始工作了
    • 注意,Tomcat 文档说:“antiJARLockingantiResourceLocking 的子集,因此,为了防止重复工作和可能出现的问题,在任何一个属性中,只有一个属性应该设置为 true时间。”。
    【解决方案2】:

    您的应用程序可能无法完全取消部署,因为有后台线程(您很可能是您自己启动的)或长时间运行的请求阻止了应用程序完全停止。

    您检查过日志文件吗?他们是否说明应用程序是否可以成功取消部署?还是相反?在您尝试取消部署(在 Unix 上杀死 -3 进程 ID,在 Windows 的控制台中按 Ctrl-Break)并查看是否还有不应该运行的东西后,您能否获得线程转储?

    另外请注意,我见过的大多数应用程序就其占用的内存而言无法完全取消部署。我经常遇到 OutOfMemoryErrors (PermGen),尤其是在重新部署 web 应用程序之后(如果你用 google 搜索,你会在 PermGen 上找到很多参考资料),因此我相信重新部署对于开发机器来说是可以的,但对于生产机器来说是不行的。在生产中对此感到困惑之前,最好先了解这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 2012-08-22
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 2011-08-11
      • 2012-04-17
      相关资源
      最近更新 更多