如何检查容器 运行 容器内存不足

how to check a container run out of memory in container

我在一台主机上启动了一个docker服务,每次启动一个容器进行一次测试。

我曾经在测试结束时使用下面的cmd来检查测试是否内存不足:

dmesg | grep -F -e 'Out of memory' -e 'invoked oom-killer: gfp_mask=0x' -e ': page allocation failure: order:'

但我注意到如果在测试期间出现 OOM,所有 运行 之后的测试都会变成 OOM,因为 OOM 信息已经存在于 dmesg 中而无需关机或重启。

我很难为每个测试拆分 dmesg 信息,所以上面的 cmd 帮不上忙。

cmd 需要 运行 在容器中,因为它是完成测试的一个步骤。

您可以使用:

docker container inspect your-container-name | jq .[].State.OOMKilled

Returns true/false.

docker container inspect return json 有关容器的格式化内容。 jq 就像 'sed for json' 并且使用 '.[].State.OOMKilled' 您可以过滤有关容器的信息以查找它是否被 OOMKilled。

更新:

您可以使用 -f 来归档相同的东西:

docker container inspect your-container-name -f '{{json .State.OOMKilled}}'

我发现 journalctl 可以限制 start_time 和 end_time 以便下面的命令可以正常工作:

journalctl -k \
           --since "`date -r file "+%Y-%m-%d %H:%M:%S"`" \
           --until "`date "+%Y-%m-%d %H:%M:%S"`" | grep -q -F \
           -e 'Out of memory' \
           -e 'invoked oom-killer: gfp_mask=0x' \
           -e ': page allocation failure: order:'

我将文件 mtime 作为开始时间,这样我就可以在测试期间获取所有内核信息。