Я выполняю Докера 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.
Можно использовать 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
Проверка строк, содержащих определенно потерянные или вероятно потерянные, чтобы подтвердить, что произошла утечка памяти.