ZooKeeper 不断收到 EndOfStreamException,导致崩溃
ZooKeeper keeps getting EndOfStreamException, causing a crash
我的 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 知识非常有限,因为我是从最初设置它的人那里接手的。
我试过在zookeepershell中删除了很多带rmr [path]
的节点,好像有点效果(删除了剩下的50k+节点over/of没用) ,但它每天都在崩溃,昨晚我无法将其设置为 运行 超过几分钟,然后才会出现相同的 error/crash。
我如何找出导致此问题的原因?
我很确定这是接收到的数据或存储的数据的一些普遍问题 data/nodes。磁盘只有 92% 满。
我还发现了这个 post: Zookeeper keeps getting the WARN: "caught end of stream exception",但这个解决方案对我来说意义不大。此外,我很确定 none 保存在我的 znode 中的消息超过 1MB,但我不确定如何确认这一点。
有什么方法可以更改 ZooKeeper 日志,以便我可以打印其他信息,例如崩溃前正在运行的 znode 的 content/name?
我能够通过从服务器 运行 ZooKeeper 中删除所有 zookeeper 快照和日志文件来解决问题。我不知道为什么这会产生影响,但过去 22 小时 运行 一切正常。
**此异常是会话数据流结束的指示器。它通常发生在关闭与 zookeeper 的连接时。此异常并不表示 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 信息 NIOServerCnxn:1044 - 已关闭客户端 /xx.xx.xx.xx:55380 的套接字连接,其会话 ID 为 0x373fb86e57b0018
我的 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 知识非常有限,因为我是从最初设置它的人那里接手的。
我试过在zookeepershell中删除了很多带rmr [path]
的节点,好像有点效果(删除了剩下的50k+节点over/of没用) ,但它每天都在崩溃,昨晚我无法将其设置为 运行 超过几分钟,然后才会出现相同的 error/crash。
我如何找出导致此问题的原因?
我很确定这是接收到的数据或存储的数据的一些普遍问题 data/nodes。磁盘只有 92% 满。 我还发现了这个 post: Zookeeper keeps getting the WARN: "caught end of stream exception",但这个解决方案对我来说意义不大。此外,我很确定 none 保存在我的 znode 中的消息超过 1MB,但我不确定如何确认这一点。
有什么方法可以更改 ZooKeeper 日志,以便我可以打印其他信息,例如崩溃前正在运行的 znode 的 content/name?
我能够通过从服务器 运行 ZooKeeper 中删除所有 zookeeper 快照和日志文件来解决问题。我不知道为什么这会产生影响,但过去 22 小时 运行 一切正常。
**此异常是会话数据流结束的指示器。它通常发生在关闭与 zookeeper 的连接时。此异常并不表示 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 信息 NIOServerCnxn:1044 - 已关闭客户端 /xx.xx.xx.xx:55380 的套接字连接,其会话 ID 为 0x373fb86e57b0018