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