我正在运行一个本地docker-compose设置,它有一个Zookeeper容器(最新被提取)和一个Marathon容器(v1.1.0)。从上个月开始,每当我装满容器时,即使在我保持闲置并且不进行任何操作之后,我的CPU使用率也会在几分钟后达到100%。
我的设置 - Ubuntu 17.10 with docker-ce 18.03.0 and docker-compose 1.21.0
跑步给我这个 -
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 aux | 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上做错事做些什么。
答案 0 :(得分:1)
首先,您应该检查100%是否主要是由于您的容器执行或主机中的其他程序。 如果你的cpu负载是由容器进程或主机进程引起的,那就不太清楚了,所以,我将列出两种可能性。
如果高CPU负载主要是由容器引起的。
在这种情况下,您应该运行docker containers限制主机的cpu load(quota):
IF()
当然,在主机的具体核心/ CPU上设置docker执行也很有用。例如:
docker run --cpu-quota (int value) ...
如果您希望在高负荷的情况下优先使用泊坞码: 它将是有用的启动docker容器,指定了多少 您希望为您的docker容器预留cpu。 :
docker run --cpuset-cpus 0,1,5 ...
docker run --cpuset-cpus 0-4 ...
请注意,100%的cpu核心相当于执行docker run --cpus $ NCPUS,但这显然不可能,因为您的系统需要一些CPU使用。 此外,例如,如果您对swarm副本使用等效选项,则只有在有足够的cpu资源时才会启动副本。见文档: docker info