Как записать пиковое использование памяти контейнера Docker? - PullRequest
2 голосов
/ 08 октября 2019

Я использую несколько кратковременных док-контейнеров, каждый из которых выполняет пакетную обработку с интенсивным использованием памяти. Я ищу способ найти пиковое использование памяти каждым контейнером, когда он работал. Знание этого позволит мне оптимизировать инфраструктуру, на которой я запускаю эти контейнеры, для будущих запусков.

Один наивный способ добиться этого - перенаправить потоковый вывод docker stats в какой-то файл: docker stats container_id > stats.log. Однако для этого требуется запустить процесс для каждого контейнера, а затем отсортировать очень подробные журналы, чтобы найти максимальное использование. Мне интересно, нет ли более легкого пути.

1 Ответ

2 голосов
/ 08 октября 2019

Если вас интересует процесс с 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

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...