【问题标题】:Why shouldn't i turn on "antiJARLocking" in production environment?为什么我不应该在生产环境中打开“antiJARLocking”?
【发布时间】:2014-04-24 04:44:22
【问题描述】:

我在 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”。

感谢您的帮助!

【问题讨论】:

  • « [...] tomcat 在临时目录中复制了 webapp。这使得部署速度变慢,并且几乎每次重新部署临时目录的大小都会增加,因此我必须制定一个程序来从临时目录中删除我的应用程序的旧部署。 » 这是有用的信息!谢谢。我也同意 « [...] 并且对于 java,在生产中重新部署后重新启动服务器总是一个好主意(OutOfMemoryError 总是潜伏在黑暗中,即使您自己的代码没有泄漏)»跨度>
  • 这个 antiJARLocking 选项在 Tomcat 8 中消失了。相反,请参阅 Context Container documentation 中的 antiResourceLocking

标签: tomcat tomcat7 ojdbc


【解决方案1】:

据此wiki

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

【讨论】:

  • 我不认为直接在生产环境中修改 JSP 页面是个好主意;不过,这还是很高兴知道的。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-11-17
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 2012-09-04
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多