Dubbo: zookeeper bug 建议升级版本

Created on 27 Sep 2017  ·  6Comments  ·  Source: apache/dubbo

consumer 端报错

03:29:47,208 ERROR ClientCnxn:422 - from localhost-startStop-1-SendThread(192.168.1.91:2181)
java.lang.NoClassDefFoundError: org/apache/zookeeper/server/ZooTrace
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1196)
Caused by: java.lang.ClassNotFoundException: org.apache.zookeeper.server.ZooTrace
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    ... 1 more

https://issues.apache.org/jira/browse/ZOOKEEPER-2618

3.4.10 版本修复了此 bug ,建议升级下版本。

typquestion & discussion

All 6 comments

偶发问题,并非每次必现。

你给的链接我看过了,根据大家的讨论,并不是zookeeper客户端的bug;
而是要通过这两个手段解决:

  1. shutting down zk client before the application.
  2. to make the client eagerly load the ZooTrace class by using it at boot or in other convenient place.

这或许是dubbo的shutdownhook机制在tomcat等容器环境下工作的机制问题

@DeadLion ZOOKEEPER-2618这个issue就是我提的,不过并没有在3.4.10中修复这个问题,当时讨论的结果是容器停机的问题.

这个异常可以尝试 规避下。
只要在tomcat停止之前,你在项目代码中加上一段(保障能执行,例如 写在ProtocolConfig.destroyAll()代码的位置)或者也可以在启动的地方加一下.
ZooTrace.logTraceMessage(LOG, ZooTrace.getTextTraceLevel(),
"Run shutdown now.");

不过这个问题个人观点仍然是zk的小问题,ClientCnxn.close退出的时候没有阻塞等待线程执行结束,导致没有优雅释放.
最新的修复记录在这https://issues.apache.org/jira/browse/ZOOKEEPER-1816 这个问题暂时挂住了.

@wuwen5 是的 ,我后来又仔细看了下那个 issue,没有当成问题处理。如果能在 zk 中解决就最好了,不用和外部代码耦合在一块。

@DeadLion 请参见wuwen5提供的链接。优雅停机本身的工作机制,会在后面的版本做优化

consumer 端报错

03:29:47,208 ERROR ClientCnxn:422 - from localhost-startStop-1-SendThread(192.168.1.91:2181)
java.lang.NoClassDefFoundError: org/apache/zookeeper/server/ZooTrace
  at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1196)
Caused by: java.lang.ClassNotFoundException: org.apache.zookeeper.server.ZooTrace
  at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
  at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
  ... 1 more

https://issues.apache.org/jira/browse/ZOOKEEPER-2618

3.4.10 版本修复了此 bug ,建议升级下版本。

从异常信息看,ClassNotFoundException: org.apache.zookeeper.server.ZooTrace若发生在应用启动时,应用应该是启动失败;若发生在应用关闭时,就像 @wuwen5 说的,是应用优雅停机问题。我们也遇到不少这个问题,都是发生在应用关闭时,消费者和提供者都升级到dubbo-2.5.8之后就很少遇到。

Was this page helpful?
0 / 5 - 0 ratings