使用docker stats结果杀死容器

时间:2017-08-22 17:10:25

标签: docker awk containers cpu

尝试使用docker stats结果找出如何杀死CPU使用率超过100%的容器。我创建了以下脚本,将统计信息导出到一个文件,然后查看结果,并查找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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

我建议您使用--cpu-shares选项停泊运行:

请参阅:

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时间。如果你添加第四个容器   一个1024的CPU份额,第一个容器只占CPU的33%。该   剩余的容器收到16.5%,16.5%和33%的CPU。

     

在多核系统上,CPU时间的份额是分布式的   所有CPU核心。即使容器限制在CPU的100%以下   时间,它可以使用每个CPU核心的100%。

     

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

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