转载出处:https://blog.yoodb.com/yoodb/article/detail/1504

在linux环境下部署新项目时,启动tomcat时无法正常启动,一直不停的报错:

web服务可以正常访问执行,但是log日志一直打印“java.lang.NoClassDefFoundError: org/apache/zookeeper/proto/ConnectRequest”异常信息,该类问题肯定需要想办法解决的。起初NoClassDefFoundError这个异常,本人理解缺少包、类或者jar包冲突原因导致的,但是服务器一直跑着很正常,这个类是ZK的核心jar包,之前正常不会没有jar包。经过仔细NoClassDefFoundErrorClassNotFoundException异常是有区别的。

 

ClassNotFoundException产生的原因:

Java支持使用Class.forName方法来动态地加载类,任意一个类的类名如果被作为参数传递给这个方法都将导致该类被加载到JVM内存中,如果这个类在类路径中没有被找到,那么此时就会在运行时抛出ClassNotFoundException异常。

 

NoClassDefFoundError产生的原因:

JVM或ClassLoader实例尝试加载(可以通过正常的方法调用,也可能是使用new来创建新的对象)类的时候却找不到类的定义。要查找的类在编译的时候是存在的,运行的时候却找不到。这个错误往往是使用new操作符来创建一个新的对象但却找不到该对象的对应类,此时就会会导致NoClassDefFoundError

 

测试环境上,某web应用异常日志信息具体如下:

[QC] WARN [localhost-startStop-1-SendThread(hyxdl-db-test:2181)] org.apache.zookeeper.ClientCnxn$SendThread.run(1162) | Session 0x16344ae9b48000d for server hyxdl-db-test/192.168.200.248:2181, unexpected error, closing socket connection and attempting reconnect
java.lang.NoClassDefFoundError: org/apache/zookeeper/proto/SetWatches
at org.apache.zookeeper.ClientCnxn$SendThread.primeConnection(ClientCnxn.java:926)
at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:363)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1141)

 

总结分析:

java.lang.NoClassDefFoundError: org/apache/zookeeper/proto/SetWatches的原因是由于应用程序没有正常启动,而zkClient线程在应用程序进程启动失败前已经正常启动,所以导致zkClient在jvm中没有找到SetWatches类。

 

解决办法:

解决办法:

1)使用命令查找java进程,具体命令“ps -ef | grep java”,发现同一服务启动了多个程序进程,也就是说前一个启动失败挂起状态,最后一个启动成功,所以导致web服务可以正常访问服务。同时62021或72843程序进程也在不停往log日志中循环输出,这种原因肯定是之前进程没有kill掉,又启动了新的程序进程。

2)使用“kill -9 进程号 && kill -9 进程号”命令杀死进程,重新启动该程序(依次关闭zookeeper,tomcat(关闭时日志可能会报错,不影响),依次开启zookeeper,tomcat)就可以了,日志就不会再打印org/apache/zookeeper/proto/SetWatches异常信息了。

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:23 天前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐