ZooKeeper不断收到EndOfStreamException,导致崩溃

时间:2016-08-11 05:34:25

标签: logging crash apache-zookeeper

我的Zookeeper通过在每个节点中保存相关的作业数据来控制不同作业的几个不同队列,直到计算机准备好处理。 如果我停止整个服务,那么没有任何作业可以启动ZooKeeper在重启后运行正常。但是,其中一些作业似乎导致ZooKeeper崩溃,并在ZooKeeper日志中显示以下消息:

WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@349] - caught end of stream exception
EndOfStreamException: Unable to read additional data from client sessionid 0x15677f740ad002a, likely client has closed socket
        at org.apache.zookeeper.server.NIOServerCnxn.doIO(NIOServerCnxn.java:220)
        at org.apache.zookeeper.server.NIOServerCnxnFactory.run(NIOServerCnxnFactory.java:208)
        at java.lang.Thread.run(Thread.java:745)
INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1001] - Closed socket connection for client /127.0.0.1:46998 which had sessionid 0x15677f740ad002a

我的ZooKeeper知识非常有限,因为我接替了最初设置它的人。

我试图在zookeeper shell中删除大量带有rmr [path]的节点,这似乎有一些效果(删除了50k +剩余/没有用的节点),但它每天都在崩溃,并且昨晚在发生同样的错误/崩溃之前,我无法让它运行超过几分钟。

如何找出造成这种情况的原因?

我很确定这是收到的数据或存储的数据/节点的一般问题。磁盘仅满92%。 我还发现了这篇帖子:Zookeeper keeps getting the WARN: "caught end of stream exception",但解决方案对我来说没有多大意义。另外我很确定我的znode中保存的消息都不超过1MB,但我不确定如何确认。

是否有某些方法可以更改ZooKeeper日志,以便我可以打印其他信息,例如它崩溃之前运行的znode的内容/名称?

2 个答案:

答案 0 :(得分:5)

我能够通过从运行ZooKeeper的服务器中删除所有zookeeper快照和日志文件来解决问题。我不知道为什么会有所不同,但过去22小时它一直运行良好。

答案 1 :(得分:2)

**此异常是会话数据流结束的指示。通常在关闭与Zookeeper的连接时发生。此异常并不表示动物园管理员方面存在缺陷。而是显示与客户端的连接已重置或关闭。 所以请忽略该警告。

2020-08-17 09:05:05 WARN NIOServerCnxn:368-捕获的流结束异常 EndOfStreamException:无法从客户端sessionid 0x373fb86e57b0018读取其他数据,可能是客户端已关闭套接字 在org.apache.zookeeper.server.NIOServerCnxn.doIO(NIOServerCnxn.java:239) 在org.apache.zookeeper.server.NIOServerCnxnFactory.run(NIOServerCnxnFactory.java:203) 在java.lang.Thread.run(Thread.java:748) 2020-08-17 09:05:05 INFO NIOServerCnxn:1044-会话ID为0x373fb86e57b0018的客户端/xx.xx.xx.xx:55380的套接字连接已关闭