如何检查容器中的容器内存不足

时间:2017-09-20 06:37:44

标签: shell docker out-of-memory

我在主机上启动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需要在容器中运行,因为它是完成测试的一步。

2 个答案:

答案 0 :(得分:2)

我发现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作为开始时间,以便我可以在测试期间获取所有内核信息。

答案 1 :(得分:-1)

您可以使用:

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

返回true / false。

docker container检查返回json关于容器的格式化内容。 jq就像'sed for json'和'。[]。State.OOMKilled'你过滤关于你的容器的信息来找到它是否是OOMKilled。

更新:

您可以使用-f存档相同的内容:

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