重载下的Web应用程序中的NoClassDefFoundError

时间:2011-12-27 11:59:03

标签: java nio tomcat7 performance-testing

我在我的java web应用程序上执行负载测试,在带有NiO连接器的tomcat 7中运行,运行模拟1000个用户同时工作,我得到意外的结果 - 应用程序变为完全无法使用的状态,它给用户带来状态错误500和NoClassDefFoundError用于应用程序的不同类,例如MVC控制器和其他类。

看起来tomcat由于某种原因以某种方式“取消部署”它。

您是否有任何想法如何解决它以及可能是问题的根源?

3 个答案:

答案 0 :(得分:3)

(这是Peter Lawrey的回答)

NoClassDefFoundError异常的常见原因之一是尝试加载先前失败的类加载的类,或者依赖在先前失败的类加载的类上。

如果发生了这种情况,后来NoClassDefFoundError例外的堆栈跟踪往往没有信息。问题的真正原因通常是在较早的日志事件中找到。


我怀疑Tomcat会自动取消部署。如果是的话,我会期待不同的症状。 (即使Tomcat取消部署内容,JVM也只会卸载一个类,如果它不再可访问。并且任何尝试加载依赖于卸载类的其他类都将触发从类路径加载的新副本。)

关于问题的根源,您很可能在应用程序的静态初始化中遇到问题。您是否已将webapp配置为对某些servlet进行延迟加载?

答案 1 :(得分:1)

您可能会收到此错误,因为该类无法提前加载。真正的错误可能会提供更多信息。

答案 2 :(得分:0)

可能是它无法承担负载......你是否尝试减少并发用户?尝试不同的连接器ajp vs http?与nio / bio?测试是否涉及操作?