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

我在主机上启动一个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过程中获得所有的内核信息。