如何检查容器中的容器内存不足
我在主机上启动一个docker服务,每次启动一个容器进行一次testing。
我以前在testing结束时使用cmd以检查testing是否内存不足:
dmesg | grep -F -e 'Out of memory' -e 'invoked oom-killer: gfp_mask=0x' -e ': page allocation failure: order:'
但我注意到,如果OOM在testing过程中,所有的testing运行后,它将成为OOM,因为OOM信息已经存在dmesg
没有关机或重新启动。
我很难为每个testing分割dmesg信息,所以上面的cmd不能帮助。
cmd需要在容器中运行,因为它是完成testing的一个步骤。
您可以使用 :
docker container inspect your-container-name | jq .[].State.OOMKilled
返回true / false。
docker集装箱检查返回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作为开始时间,这样我就可以在testing过程中获得所有的内核信息。