【问题标题】:Zookeeper docker container stuckZookeeper docker 容器卡住了
【发布时间】:2019-03-04 08:41:49
【问题描述】:
我们一直在使用 zookeeper 作为 Kafka 部署的一部分,也用于其他用途(通过 docker-compose)。
有时 docker 镜像会停止运行,以至于docker stop zookeeper 不会返回(zk 会继续运行)。
docker kill -s SIGTERM 也不会杀死它。
当这种情况发生时,从容器内运行 zkCli 的尝试也会停止(zkCli.sh 命令不会返回)。
只有杀死 docker 服务(在 Mac 上是 docker 应用程序)才能恢复它 - 但只有在 zk 仍处于关闭状态时删除容器之后。
知道如何解决这个问题吗?
什么可能导致这种情况?
【问题讨论】:
标签:
docker
apache-zookeeper
boot2docker
【解决方案1】:
容器日志在处于该状态时反复出现此错误:
log4j:ERROR Failed to flush writer,
java.io.IOException: Invalid argument
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:326)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
at org.apache.log4j.helpers.QuietWriter.flush(QuietWriter.java:59)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:324)
at org.apache.log4j.RollingFileAppender.subAppend(RollingFileAppender.java:276)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:162)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.log(Category.java:856)
at org.slf4j.impl.Log4jLoggerAdapter.debug(Log4jLoggerAdapter.java:210)
at org.apache.zookeeper.server.FinalRequestProcessor.processRequest(FinalRequestProcessor.java:89)
at org.apache.zookeeper.server.SyncRequestProcessor.run(SyncRequestProcessor.java:169)
google 告诉我这可能是由错误的 ulimit 配置引起的。
本节添加到zookeeper的组成中:
ulimits:
nofile:
soft: 20000
hard: 40000
到目前为止一切顺利