尝试使用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
答案 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