4

我在 Tomcat7 服务器上运行网络应用程序并且无法取消部署它们。Windows 似乎会锁定应用程序文件夹中的特定 JAR 文件。我发现有一个名为“antiJARLocking”的上下文属性,我可以将其设置为“true”(在此处定义:http: //tomcat.apache.org/tomcat-6.0-doc/config/context.html#Standard_Implementation)这可能会解决问题。

事实是,我看到一些人说我不应该在生产环境中将此属性设置为 true;但我找不到原因。我知道将此属性设置为 true 可能会减慢 tomcat 启动和/或应用程序启动的速度,但这对我来说听起来不是一个大问题..?我错了吗?

您是否知道任何其他原因可以解释为什么有些人可能会阻止在生产中使用“antiJARLocking”?JAR锁定问题还有其他解决方案吗?

如果这有任何帮助,我正在运行 tomcat 7.0.40。一直被锁定的 jar 文件是“ojbdc6.jar”。

感谢您的帮助!

4

2 回答 2

5

Tomcat 的反资源锁定功能用于解决已部署的 Web 应用程序中导致文件打开但未关闭的错误。在某些操作系统(主要是 Windows)上,这会阻止文件被删除,从而阻止 Web 应用程序被完全取消部署。通常,删除这些文件的唯一方法是先停止 Tomcat。反资源锁定将 Web 应用程序复制到工作目录中一个唯一命名的目录,并从那里部署它。每个重新部署都会获得一个新目录,因此无法删除旧目录并不是一个直接的问题。

没有具体的理由说明为什么不应该在生产环境中使用反资源锁定功能。但是,您确实需要注意锁定的文件实际上是内存泄漏,并且在多次重新部署后,您最终可能会填充 permGen 并触发OOME

odbc6.jar 被锁定的快速而肮脏的解决方案是将其从 WEB-INF/lib 移动到 $CATALINA_HOME/lib。更好的解决方案是找出它被锁定的原因(您可能需要结合使用分析器和调试器来查找根本原因)并修复它。

于 2014-03-18T14:25:26.277 回答
1

根据这个维基

您不应该在生产中打开此选项。antiResourceLocking 选项可以在编辑 JSP 时阻止它们重新部署(需要重新部署 webapp [原文如此],有时需要清除工作目录)。对于从特殊“临时”区域运行的 web 应用程序,无法获取某些类型的 webapp 资源的资源路径显然存在一些小的限制,但我们在实践中从未遇到过它们。

于 2014-03-18T13:18:24.007 回答