У меня есть процесс, работающий в контейнере 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 также включает в себя файловую кеш-память. Он будет освобожден по запросу, но считается использованным.