我在主机上启动一个码头服务,每次启动一个容器进行一次测试。
在测试结束时,我经常使用下面的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需要在容器中运行,因为它是完成测试的一个步骤。
发布于 2017-09-22 01:14:31
我发现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作为开始时间,以便在测试期间获得所有内核信息。
发布于 2017-09-20 07:17:10
您可以使用:
docker container inspect your-container-name | jq .[].State.OOMKilled返回真/假。
码头集装箱检查,返回json格式的关于集装箱的东西。jq就像‘informations’,用'.[].State.OOMKilled‘过滤有关容器的信息,发现它是否是OOMKilled。
最新情况:
您可以使用-f存档相同的内容:
docker container inspect your-container-name -f '{{json .State.OOMKilled}}'https://stackoverflow.com/questions/46314895
复制相似问题