【问题标题】:NoClassDefFoundError in a web application under heavy loading重负载下 Web 应用程序中的 NoClassDefFoundError
【发布时间】:2011-12-27 11:59:02
【问题描述】:
我正在我的 java web 应用程序上执行负载测试,在带有 NiO 连接器的 tomcat 7 中运行,运行模拟 1000 个用户同时工作,我得到了意想不到的结果 - 应用程序变成完全不可用的状态,它给用户的状态错误500 和 NoClassDefFoundError 用于应用程序的不同类,例如 MVC 控制器等。
看起来tomcat出于某种原因“取消部署”了它。
您有任何想法如何解决它以及问题的根源是什么?
【问题讨论】:
标签:
java
nio
tomcat7
performance-testing
【解决方案1】:
(这是对 Peter Lawrey 的回答的详细说明)
NoClassDefFoundError 异常的常见原因之一是尝试加载之前类加载失败的类,或者 依赖 之前类加载失败的类。
如果这是正在发生的事情,那么后面的NoClassDefFoundError 异常的堆栈跟踪往往不会提供任何信息。问题的真正原因通常可以在较早的日志事件中找到。
我怀疑 Tomcat 是否会自动取消部署。如果是这样,我预计会有不同的症状。 (即使 Tomcat 取消部署某些东西,JVM 也只会在不再可访问时卸载一个类。并且任何尝试加载依赖于已卸载类的其他类的任何尝试都将触发从类路径加载新副本。)
至于问题的根源,您的应用程序的静态初始化很有可能出现问题。您是否已将 webapp 配置为延迟加载某些 servlet?
【解决方案2】:
您可能会收到此错误,因为该类未能较早加载。真正的错误可能会提供更多信息。
【解决方案3】:
可能是它无法承担负载...您是否尝试减少并发用户?尝试不同的连接器 ajp 与 http?与蔚来/生物?测试是否涉及io操作?