Назад | Перейти на главную страницу

Как вывод статистики докеров соотносится с верхним выводом?

У меня есть процесс, работающий в контейнере Docker в Linux с ограничением памяти 2 ГБ. (Контейнер запускается с docker run --memory=2g.)

Вот что top говорит об этом по прошествии некоторого времени.

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 9016 root      20   0 7342132 4.652g 4.224g S 100.0  7.4  18828:28 blah

Вот результат docker stats:

CONTAINER           CPU %               MEM USAGE/LIMIT     MEM %               NET I/O
d7032e5928b6        100.02%             2.076 GB/2.147 GB   96.68%              345 MB/199.1 MB

Затем, после перезапуска, top:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 5653 root      20   0 2787800 1.328g 1.030g S 100.0  2.1   0:37.57 blah

docker stats:

CONTAINER           CPU %               MEM USAGE/LIMIT     MEM %               NET I/O
10cefdce241f        99.97%              320.4 MB/2.147 GB   14.92%              36.34 kB/22.48 kB

Так что это соответствует (очень грубо) с RES-SHR, что имеет для меня некоторый смысл, но эквивалентный расчет для вывода из долго работающего контейнера не совпадает таким же образом.

Что именно здесь считает Докер? Могу я как-то сопоставить это с выводом из top, или какой-нибудь другой инструмент?

Статистика Docker сообщает об использовании памяти и ЦП в контрольной группе контейнера. Это будет коррелировать с некоторыми из основных статистических данных, но не совсем так, поскольку память в процессе включает в себя разделяемую память, память, отображаемую на объект файловой системы и т. Д. Cgroup собирается агрегировать использование всех процессов в этом контейнере. Чтобы увидеть использование контрольной группы внутри контейнера, вы можете посмотреть файлы в /sys/fs/cgroup/memory/:

$ docker run -it --rm --name memtest -m 2g busybox /bin/sh
/ # cat /sys/fs/cgroup/memory/memory.usage_in_bytes
1519616
/ # cat /sys/fs/cgroup/memory/memory.limit_in_bytes
2147483648

Статистика Docker также включает в себя файловую кеш-память. Он будет освобожден по запросу, но считается использованным.