Утечка памяти докера?

Я выполняю Докера 0.9.0

uname -a
Linux 3.11.0-18-generic #32-Ubuntu SMP Tue Feb 18 21:11:14 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

У меня есть 40 контейнеров, работающих сразу. Каждый контейнер довольно прост - он выполняет отрывок кода в процессе Узла. Бесконечный цикл прислушивается к большему количеству фрагментов кода для выполнения в Узле.

Иногда я отмечаю эти контейнеры, которые будут уничтожены, и я запускаю другой контейнер для занимания его места. Я испытывал ошибки памяти. Иногда все отказывает, и отчеты Докера "не могут выделить память для нового контейнера", и иногда на сокете существует просто тайм-аут.

Постоянные кошки создание отчетов meminfo и "свободные" вызовы. Это создание отчетов предлагает, чтобы у меня было много неиспользованной памяти.

Команда

ps --sort -rss -eo rss,pid,command | grep docker

согласно различным сценариям говорит мне, что, поскольку новые контейнеры заменяют старые контейнеры, память Размера Резидентного набора когда-либо расширяется. Если я останавливаю сервис как есть и ожидаю час, это уменьшается несколько, но никогда не достигает предыдущего уровня. Например, это никогда не будет ронять к уровню, на котором были созданы исходные 40 контейнеры.

pmap `pidof docker`

Говорит шоу, что все записи [скоро] - насколько я понимаю это - память, зарезервированная malloc.

Точка катастрофического отказа является ~2GB, выделенным демону Докера RSS, от ~40M, когда новый.

Я не уверен, является ли это [nother] ошибкой Докера / утечка памяти.


Как это могло бы привести к из ошибки памяти при условии, что бесплатные отчеты 4.5G неиспользованный?


В моей системе нет никакой подкачки.

ВАЖНАЯ ДЕТАЛЬ: Докеру не удается удалить уничтоженные контейнеры через Удаленный API с ошибкой драйвера AUFS. Поэтому я полагаюсь на внешний крон для удаления остановленных контейнеров через CLI.

4
задан 7 May 2014 в 08:51
1 ответ

Можно использовать valgrind для поиска проблем, связанных с памятью:

Использование:

valgrind --tool=memcheck program_name (/sbin/docker or wharever the path to docker is)
valgrind --leak-check=yes program_name

Пример:

valgrind --leak-check=yes /sbin/httpd

Проверка строк, содержащих определенно потерянные или вероятно потерянные, чтобы подтвердить, что произошла утечка памяти.

3
ответ дан 3 December 2019 в 03:42

Теги

Похожие вопросы