【问题标题】:So many "Broken pipe IOE" in ZooKeeper logZooKeeper 日志中有这么多“Broken pipe IOE”
【发布时间】:2014-11-10 23:02:38
【问题描述】:

谁能帮助解释为什么我在 ZooKeeper 日志中得到这么多“Broken pipe IOE”?

ZooKeeper 几乎每分钟都会抛出这个异常。我认为我们不会如此频繁地使用四个字母的命令来转储手表。那么这是什么意思呢?

这可能是由命令wchc 引起的,因为我们的ZooKeeper 有超过一万个znode。而且我发现这个命令是从具有不同端口的同一台服务器上执行的。 ZooKeeper 会经常调用这个命令吗?

2014-09-17,10:52:09,179 错误 org.apache.zookeeper.server.NIOServerCnxn: [myid:0] 同步发送数据时出错 java.io.IOException:断管 在 sun.nio.ch.FileDispatcher.write0(本机方法) 在 sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:29) 在 sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:69) 在 sun.nio.ch.IOUtil.write(IOUtil.java:40) 在 sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:336) 在 org.apache.zookeeper.server.NIOServerCnxn.sendBufferSync(NIOServerCnxn.java:138) 在 org.apache.zookeeper.server.NIOServerCnxn$SendBufferWriter.checkFlush(NIOServerCnxn.java:453) 在 org.apache.zookeeper.server.NIOServerCnxn$SendBufferWriter.write(NIOServerCnxn.java:474) 在 java.io.BufferedWriter.flushBuffer(BufferedWriter.java:111) 在 java.io.BufferedWriter.write(BufferedWriter.java:212) 在 java.io.PrintWriter.write(PrintWriter.java:412) 在 java.io.PrintWriter.write(PrintWriter.java:429) 在 java.io.PrintWriter.print(PrintWriter.java:559) 在 java.io.PrintWriter.println(PrintWriter.java:695) 在 org.apache.zookeeper.server.WatchManager.dumpWatches(WatchManager.java:166) 在 org.apache.zookeeper.server.DataTree.dumpWatches(DataTree.java:1240) 在 org.apache.zookeeper.server.NIOServerCnxn$WatchCommand.commandRun(NIOServerCnxn.java:722) 在 org.apache.zookeeper.server.NIOServerCnxn$CommandThread.run(NIOServerCnxn.java:496) 2014-09-17,10:52:09,179 INFO org.apache.zookeeper.server.NIOServerCnxn: [myid:0] 已关闭的客户端 /10.20.201.234:53756 的套接字连接 sessionid 为 0x34840357f664081 2014-09-17,10:52:09,179 错误 org.apache.zookeeper.server.NIOServerCnxn: [myid:0] 同步发送数据时出错 java.io.IOException:断管 在 sun.nio.ch.FileDispatcher.write0(本机方法) 在 sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:29) 在 sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:69) 在 sun.nio.ch.IOUtil.write(IOUtil.java:40) 在 sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:336) 在 org.apache.zookeeper.server.NIOServerCnxn.sendBufferSync(NIOServerCnxn.java:138) 在 org.apache.zookeeper.server.NIOServerCnxn$SendBufferWriter.checkFlush(NIOServerCnxn.java:453) 在 org.apache.zookeeper.server.NIOServerCnxn$SendBufferWriter.write(NIOServerCnxn.java:474) 在 java.io.BufferedWriter.flushBuffer(BufferedWriter.java:111) 在 java.io.BufferedWriter.flush(BufferedWriter.java:235) 在 java.io.PrintWriter.flush(PrintWriter.java:276) 在 org.apache.zookeeper.server.NIOServerCnxn.cleanupWriterSocket(NIOServerCnxn.java:424) 在 org.apache.zookeeper.server.NIOServerCnxn.access$000(NIOServerCnxn.java:60) 在 org.apache.zookeeper.server.NIOServerCnxn$CommandThread.run(NIOServerCnxn.java:500)

【问题讨论】:

    标签: java sockets exception apache-zookeeper


    【解决方案1】:

    我找到了原因。我们使用 TaoKeeper 来监控 ZooKeeper 的状态。它会定期发送wchc 和其他命令来检查状态。 ZooKeeper 收到wchc 时,由于我们的znode 太多而发生异常。

    我认为 TaoKeeper 应该使用mntr 而不是wchc,这可能会影响 ZooKeeper 在 znode 数量众多时的性能。

    【讨论】:

      猜你喜欢
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 2011-06-06
      • 2012-10-05
      • 2011-02-16
      • 1970-01-01
      相关资源
      最近更新 更多