如何检查容器 运行 容器内存不足
how to check a container run out of memory in container
我在一台主机上启动了一个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 需要 运行 在容器中,因为它是完成测试的一个步骤。
您可以使用:
docker container inspect your-container-name | jq .[].State.OOMKilled
Returns true/false.
docker container inspect return 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 作为开始时间,这样我就可以在测试期间获取所有内核信息。
我在一台主机上启动了一个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 需要 运行 在容器中,因为它是完成测试的一个步骤。
您可以使用:
docker container inspect your-container-name | jq .[].State.OOMKilled
Returns true/false.
docker container inspect return 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 作为开始时间,这样我就可以在测试期间获取所有内核信息。