使用docker统计结果来杀死容器

试图找出如何使用docker stats结果来杀死cpu使用率超过100%的容器。 我创build了下面的脚本,将统计信息导出到一个文件中,然后查看结果,并查找cpu超过100%的容器ID,并杀死它,问题是它看起来像杀死40%的容器。 结果以这种格式返回00.00%,我认为这可能是问题,但不知道当比较文件中的%时,awk如何查看数字。

#!/bin/bash docker stats --no-stream > /tmp/cpu.log sed -i 's/CONTAINER//g' /tmp/cpu.log KILLCPU=$(awk '$2 >= 11000 {print$1}' /tmp/cpu.log) docker stop $KILLCPU 

在该字段中添加+0以使awk正确识别百分比。

 KILLCPU=$(awk '$2+0 >= 110 {print$1}' /tmp/cpu.log) 

当容器使用> 100%的CPU时,它将运行在多个CPU上。 杀死他们,因为他们达到一定比例是不正确的做法。

我build议你使用--cpu-shares选项来运行docker:

看到:

https://docs.docker.com/engine/reference/run/#cpu-share-constraint

CPU共享约束默认情况下,所有容器的CPU周期比例相同。 这个比例可以通过改变容器的CPU份额权重相对于所有其他正在运行的容器的权重来修改。

要从缺省值1024修改比例,请使用-c或–cpu-shares标志将权重设置为2或更高。 如果设置为0,则系统将忽略该值并使用默认值1024。

只有在CPU密集型进程正在运行时,这个比例才会适用。 当一个容器中的任务空闲时,其他容器可以使用剩余的CPU时间。 实际的CPU时间量将取决于系统上运行的容器数量。

例如,考虑三个容器,其中一个的cpu-share为1024,另外两个的cpu-share设置为512.当所有三个容器中的进程尝试使用100%的CPU时,第一个容器将获得50%的总CPU时间。 如果添加一个cpu-share为1024的第四个容器,则第一个容器只能获得33%的CPU。 剩下的容器得到16.5%,16.5%和33%的CPU。

在多核系统上,CPU时间份额分布在所有CPU内核上。 即使一个容器的CPU时间less于100%,也可以使用每个CPU核的100%。

例如,考虑一个具有三个以上内核的系统。 如果启动一个运行一个进程的-c = 512的容器{C0},运行两个进程的另一个运行两个进程的-c = 1024的容器{C1},则可能导致以下CPU份额分配:

 PID container CPU CPU share 100 {C0} 0 100% of CPU0 101 {C1} 1 100% of CPU1 102 {C1} 2 100% of CPU2