1

我使用定制版本的 Tomcat 开发应用程序。支持动态类加载,我在测试和开发环境中使用了很多,我也很好奇在生产环境中使用它的影响。

据我所知,由于性能问题,动态类加载不会在生产中使用,因为类加载器会在每次访问时轮询类。

但是,此应用服务器支持配置轮询频率以加载新类。

如果我理解正确,如果我将动态类加载配置为每隔相当长的时间(即 1 小时)轮询一次,我应该避免最不利的性能影响。

在生产中,这种机制的使用方式有限:
1) 无需用户停机的紧急补丁(修复将在第一次关闭时发布)
2) 对我们没有来源的类的永久补丁(遗留第三方库)

这是一个可靠的解决方案吗?

谢谢

4

2 回答 2

2

IMHO you should not use the feature for production.
Apart from the polling overhead there may be lot of other scenario which would not cause problems in a dev environment

Few things that come to my mind are

  1. Impact on any constants that are inlined during compiletime
  2. Impact on perm space
  3. You lose track of the version you have deployed in production
  4. there can be mistakes like missing a classfile during the patch
于 2012-09-25T09:48:15.133 回答
1

如果不知道您拥有什么“定制的 Tomcat 版本”,显然很难判断您是否理解正确。但是,是的,如果它按照锡上所说的那样做,您将避免大多数不利影响。

仍然对于紧急修补等,当您可以使用 Tomcat 管理器应用程序时,为什么要等待一个小时才能重新加载类,如下所述?

如果您想将此功能用于紧急补丁或通用补丁,我强烈建议您使用 Tomcat Manager Application 在需要时触发重新加载:

可重新加载

如果您希望 Catalina 监视 /WEB-INF/classes/ 和 /WEB-INF/lib 中的类的更改,请设置为 true,并在检测到更改时自动重新加载 Web 应用程序。此功能在应用程序开发期间非常有用,但它需要大量运行时开销,因此不建议在已部署的生产应用程序中使用。这就是该属性的默认设置为 false 的原因。但是,您可以使用 Manager Web 应用程序来按需触发重新加载已部署的应用程序。

http://tomcat.apache.org/tomcat-7.0-doc/config/context.html

于 2012-09-25T09:22:41.237 回答