Ubuntu Zookeeper或Marathon docker容器使用100%CPU

Ubuntu Zookeeper或Marathon docker容器使用100%CPU,ubuntu,docker,docker-compose,apache-zookeeper,marathon,Ubuntu,Docker,Docker Compose,Apache Zookeeper,Marathon,我正在运行一个本地docker compose设置,它有一个Zookeeper容器(获取最新版本)和一个Marathon容器(v1.1.0)。从上个月开始,每当我打开我的容器时,我的CPU使用率在几分钟后就会达到100%,即使在我保持它空闲并且不做任何操作之后也是如此 我的设置-Ubuntu17.10,带有DockerCE18.03.0和DockerCompose 1.21.0 跑步给了我这个- PID USER PR NI VIRT RES SHR S %CPU

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

我的设置-Ubuntu17.10,带有DockerCE18.03.0和DockerCompose 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上出错有关

首先,您应该检查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--cpu$NCPUS,但这显然是不可能的,因为您的系统需要一些cpu使用率。 此外,如果您对swarm副本使用等效选项,例如,只有当有足够的cpu资源时,副本才会启动。见文件:

我需要更多关于您电脑的信息,而不仅仅是软件方面的信息。例如,核数(
/proc/cpuinfo
)有了它,您可以使用
--cpu
--cpu配额
--cpuset cpu
选项执行
docker run
。@AlexGalera 2核-G4400T。是的,我认为强制CPU限制可能是一个很好的解决方案。让我试试看它是否有用。是的,每次我运行容器时,我都可以在我的设置中复制它,所以我非常确定它就是容器。但是,它不能在不同的更强大的硬件上复制。