假设一个应用抛出大量的Class not found信息,一般你会怀疑包冲突。但是tomcat的webappclassloader却有这种问题:
假设一个应用公布出现故障, webappclassloader的started属性被设为false.然后其他线程假设继续使用webappclassloader进行class load,则大量的Class not found异常
被抛出:
1391 public Class loadClass(String name, boolean resolve)
1392 throws ClassNotFoundException {
1393
1394 synchronized (name.intern()) {
1395 if (log.isDebugEnabled())
1396 log.debug("loadClass(" + name + ", " + resolve + ")");
1397 Class clazz = null;
1398
1399 // Log access to stopped classloader
1400 if (!started) {
1401 try {
1402 throw new IllegalStateException();
1403 } catch (IllegalStateException e) {
1404 log.info(sm.getString("webappClassLoader.stopped", name), e);
1405 }
1406 }
...................................................................
1516 throw new ClassNotFoundException(name);
1517 }
1518 }
所以假设有大量的ClassNotFoundException的话先搜索一下是否有webappClassLoader.stoppedkeyword吧。