我们有一个 Web 应用程序,其实例在同一个 tomcat (v6.0.14) 实例下多次部署。假设war文件名为“app.war”,那么我们部署“app1.war”、“app2.war”等。
所有应用程序实例 (~20) 都已正确部署。当访问这些应用程序上的 servlet 时,有时它们会NoClassDefFoundError
因ClassNotFoundException
在 tomcat 中的WebAppClassLoader
. 以下是一个例子——
java.lang.NoClassDefFoundError: com/xxx/APISocketServer$ClientRequestHandler
at com.xxx.APISocketServer$APISocketServerThread.run(APISocketServer.java:143)
Caused by: java.lang.ClassNotFoundException: com.xxx.APISocketServer$ClientRequestHandler
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
... 1 more
有问题的类是应用程序代码的一部分,而不是任何库的一部分。
由于某些应用程序实例运行正确,这不可能是类路径配置错误的情况。需要注意的一点是,只有几个类无法加载。这些类没有任何静态初始化程序块,这可能导致类初始化失败。我检查了 tomcat 日志(catalina.out、localhost.log)并没有发现任何类初始化错误。
我应该如何继续调试这个问题?