2017-09-20 21 views
0

我在主機上啓動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

我發現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作爲開始時間,這樣我可以在測試過程中獲得所有內核信息。

0

您可以使用:

docker container inspect your-container-name | jq .[].State.OOMKilled 

返回真/假。

碼頭集裝箱檢查返回JSON格式化容器的東西。 jq就像'sed for json'並且'。[]。State.OOMKilled'你過濾關於你的容器的信息,發現它是OOMKilled與否。

更新:

您可以使用-f存檔同一件事:

docker container inspect your-container-name -f '{{json .State.OOMKilled}}' 
+0

我真的不知道jq是什麼意思,我想找一種方法來檢查容器中的OOM,對不起,我沒有說清楚。 – daixiang0

+0

cmd是'docker inspect',的確我認爲運行時日誌不存在於其中。 – daixiang0

+0

我使用碼頭集裝箱檢查,因爲我只有貨櫃名稱完成(碼頭圖像檢查VS碼頭集裝箱檢查與碼頭檢查) – papey