java - 长时间运行的 Tomcat 进程的类加载器中的问题

标签 java tomcat classloader

我们在 Tomcat 6.0.18 上托管了 Web 应用程序,并遇到了以下问题:

有两个Web应用程序WebApp1和WebApp2,两者是相同的系统但版本不同。

现在的问题是,当tomcat运行一周或更长时间时,有时系统会给出NoClassDefFoundError!我们还遇到了一些奇怪的问题,WebApp1 的类加载器已加载 WebApp2 的 jar 中存在的类! WebApp1 中也存在相同的 jar,但版本不同。

当我们重新启动 Tomcat 时,一切都开始正常工作!我们的 JRE 是 1.5.10

如果您遇到此类问题,请告诉我。

问候, 贾坦波雷查

最佳答案

我在 Tomcat 中遇到过很多很多奇怪的类加载器 - 即使您自己不执行任何类加载器代码,Tomcat 本身也很容易产生问题。最常见的问题似乎是重复卸载和重新加载 Web 应用程序,导致类加载器泄漏并最终导致 Tomcat 内存不足。

我见过版本不匹配的最常见原因是 Tomcat 确保某些类和 jar(Tomcat 本身的一部分)领先于 web 应用程序类路径中的任何其他类和 jar - commons-logging 似乎是最常见的示例 -并且类加载器有可能在您意想不到的时候被加载、卸载或保留。

您能否提供更多详细信息 - 如果该 jar 来自第三方,则很可能有人以前已经见过该问题。如果它是您自己的 jar,那么您的应用程序中是否有您自己的类加载器代码?

关于java - 长时间运行的 Tomcat 进程的类加载器中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/318243/

相关文章:

Java 独立程序到 JSP 通信

java - jar 中的类什么时候进入 PermGen

Java如何使用一个库的多个版本可能使用类加载器

java - 如何以编程方式比较两个基于视觉差异的 PDF?

java - 当 pdf 中的位置已知时,使用 pdfbox 突出显示文本

java - 使用 JAXB 将同名的多个 XML 元素解码到一个列表中

java - 在 tomcat 上的我的 webapps/application 目录中写入日志文件

Apache + 汤姆猫 : Using mod_proxy instead of AJP

java - GroovyClassLoader - 将已解析的类添加到类路径

java - 如何正确格式化结果集的输出