【问题标题】:Zookeeper or Marathon docker container using 100% CPUZookeeper 或 Marathon docker 容器使用 100% CPU
【发布时间】:2018-04-19 16:53:15
【问题描述】:

我正在运行一个本地 docker-compose 设置,它有一个 Zookeeper 容器(获取最新的)和一个 Marathon 容器(v1.1.0)。从上个月开始,每当我启动容器时,即使在我保持空闲且不执行任何操作之后,几分钟后我的 CPU 使用率也会达到 100%。

我的设置 - 带有 docker-ce 18.03.0 和 docker-compose 1.21.0 的 Ubuntu 17.10

Running top 给了我这个 -

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                        
 7055 root      20   0 4527380 446644  45836 S  99.0  6.5   2:10.43 java 

ps 辅助 | grep java 给出了这个 -

harry     6928  0.1  0.6 3227008 47656 ?       Ssl  16:00   0:02 /usr/lib/jvm/java-1.8-openjdk/jre/bin/java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /zookeeper-3.4.11/bin/../build/classes:/zookeeper-3.4.11/bin/../build/lib/*.jar:/zookeeper-3.4.11/bin/../lib/slf4j-log4j12-1.6.1.jar:/zookeeper-3.4.11/bin/../lib/slf4j-api-1.6.1.jar:/zookeeper-3.4.11/bin/../lib/netty-3.10.5.Final.jar:/zookeeper-3.4.11/bin/../lib/log4j-1.2.16.jar:/zookeeper-3.4.11/bin/../lib/jline-0.9.94.jar:/zookeeper-3.4.11/bin/../lib/audience-annotations-0.5.0.jar:/zookeeper-3.4.11/bin/../zookeeper-3.4.11.jar:/zookeeper-3.4.11/bin/../src/java/lib/*.jar:/conf: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /conf/zoo.cfg
root      7055 11.9  6.6 4527380 459896 ?      Ssl  16:00   3:35 java -jar /marathon/bin/../target/marathon-assembly-1.1.1.jar --master local --zk zk://zookeeper:2181/marathon --event_subscriber http_callback
harry     8551  0.0  0.0  15376  1068 pts/4    S+   16:30   0:00 grep --color=auto java

我已与运行 OSX 的同事确认,相同的设置不会影响他们。所以这与 marathon 或 zookeeper 容器在 Ubuntu 上做错事有关。

【问题讨论】:

  • 我需要更多关于您的计算机的信息,而不仅仅是关于软件的信息。例如,核心数 (/proc/cpuinfo) 有了它,您可以使用 --cpus--cpu-quota--cpuset-cpus 选项执行 docker run
  • @AlexGalera 2 核 - G4400T。是的,我认为强制 CPU 限制可能是一个很好的解决方案。让我试试看是否有帮助。

标签: ubuntu docker docker-compose apache-zookeeper marathon


【解决方案1】:

首先,您应该检查 100% 是否主要是由于您的容器执行或主机中的其他程序。 目前还不清楚你的cpu负载是由容器进程还是主机进程引起的,所以我将两种可能性都列出来。

如果cpu负载高主要是由容器引起的

在这种情况下,您应该运行 docker 容器来限制主机的 cpu 负载(配额):

docker run --cpu-quota (int value) ...

当然,在主机的具体核心/cpu 上设置 docker 执行也很有用。例如:

docker run --cpuset-cpus 0,1,5 ...
docker run --cpuset-cpus 0-4 ...

如果您想在高负载的情况下优先执行 docker: 启动 docker 容器指定有多少会很有用 您要为 docker 容器预留的 CPU。 :

NCPUS=`cat /proc/cpuinfo | grep processor | wc -l`
docker run --cpus [float number between 0 and $NCPUS] ...

请注意,所有 cpu 内核的 100% 相当于执行 docker run --cpus $NCPUS,但这显然是不可能的,因为您的系统需要使用一些 cpu。 此外,如果您对 swarm 副本使用等效选项,例如,只有在有足够的 cpu 资源时才会启动副本。请参阅文档: docker info

【讨论】:

  • 是的,我可以在每次运行容器时在我的设置中重现它,所以我很确定它是容器。但是,它无法在其他更强大的硬件上重现。
猜你喜欢
  • 1970-01-01
  • 2023-04-05
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
相关资源
最近更新 更多