У меня есть контейнер, смонтированный с использованием docker-compose version 2, у которого ограничение памяти составляет 32 МБ.
Всякий раз, когда я запускаю контейнер, я могу отслеживать использованные ресурсы следующим образом:
docker stats 02bbab9ae853
Он показывает следующее:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
02bbab9ae853 client-web_postgres-client-web_1_e4513764c3e7 0.07% 8.078MiB / 32MiB 25.24% 5.59MB / 4.4MB 135GB / 23.7MB 0
Что действительно странно для меня, так эточасть памяти:
8.078MiB / 32MiB 25.24%
Если за пределами контейнера я перечисляю PID Postgres, я получаю:
$ pgrep postgres
23051, 24744, 24745, 24746, 24747, 24748, 24749, 24753, 24761
Если я остановлю контейнер и перезапущу приведенную выше команду, я не получу PID,Это наглядное доказательство того, что все PID были созданы остановленным контейнером.
Теперь, если я перезапущу контейнер и получу каждый PID, я вычислю его использование в RSS-памяти и суммирую его вместе с методом python, Я не понимаю, докер ~ 8Mb говорит мне, но гораздо более высокое значение, даже близко к нему (например, ~ 100Mb или около того).
Это метод python, который я использую для вычисления памяти RSS:
def get_process_memory(name):
total = 0.0
try:
for pid in map(int, check_output(["pgrep",name]).split()):
total += psutil.Process(pid).memory_info().rss
except Exception as e:
pass
return total
Кто-нибудь знает, почему память, объявленная Docker, настолько отличается?
Это, конечно, проблема для меня, потому что применяемый предел памяти не выглядит уважаемым.
Я использую Raspberry PI.