簡體   English   中英

如何記錄 Docker 容器的峰值 memory 使用量?

[英]How to record the peak memory usage of a Docker container?

我正在運行一些短暫的 docker 容器,每個容器都執行一些內存密集型批處理。 我正在尋找一種方法來找到每個容器在運行時命中的峰值memory 使用量。 了解這一點將使我能夠優化運行這些容器的基礎設施,以備將來運行。

實現此目的的一種天真的方法是將docker stats的流式 output 重定向到某個文件: docker stats container_id > stats.log 但是,這需要為每個容器運行一個進程,然后對非常詳細的日志進行排序以找到峰值使用量。 我想知道是否沒有更簡單的方法。

如果您對容器內PID=1的進程感興趣,您可以在主機上找到該進程的PID ,然后使用:

grep VmPeak /proc/$PID/status

帶有mongo容器的示例:

這個容器有一個進程:

$ docker container exec -it mongo top -bn 1
top - 10:04:51 up 32 min,  0 users,  load average: 0.36, 0.52, 0.55
Tasks:   2 total,   1 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  6.1 us,  2.0 sy,  0.3 ni, 90.6 id,  0.7 wa,  0.0 hi,  0.3 si,  0.0 st
KiB Mem :  6103572 total,  2642744 free,  1352032 used,  2108796 buff/cache
KiB Swap:  1942896 total,  1942896 free,        0 used.  4277928 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
   64 root      20   0   38624   3116   2724 R   6.7  0.1   0:00.89 top
    1 mongodb   20   0 1094540  80100  35916 S   0.0  1.3   0:22.51 mongod

要從主機的角度獲取此進程的PID

$ docker inspect -f '{{.State.Pid}}' mongo
2532

最后:

$ grep VmPeak /proc/2532/status
VmPeak:  1094540 kB

鏈接:

docker stats--format選項來自定義 output。 例如我們可以 output 只有 memory 用法:

 docker stats --no-stream --format '{{.MemUsage}}' CONTAINER_ID 
516KiB / 8GiB

命令中的CONTAINER_ID必須替換為我們容器的 ID(我們可以使用docker ps獲得)。

516KiB 是容器當前的 memory 使用量,8GiB 是容器允許使用的最大 memory。

在 GNU/Linux 上,我們可以從 output 中過濾掉 memory 使用情況,並cut並將 output 重定向到一個文件中:

docker stats --no-stream --format '{{.MemUsage}}' CONTAINER_ID | cut -d '/' -f 1 >>docker-stats

最后,我們可以將此命令放入一個 while 循環中,並在迭代之間添加一秒的延遲:

while true; do docker stats --no-stream --format '{{.MemUsage}}' CONTAINER_ID | cut -d '/' -f 1 >>docker-stats; sleep 1; done

這樣,在 docker docker-stats文件中,我們將得到一個分辨率為一秒的容器的 memory 使用值列表。 當然,如果一個峰值持續不到一秒,我們可能會錯過它。

Docker 統計文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM