Подтвердить что ты не робот

Утечка памяти демона Docker из-за журналов из долгого процесса

У меня есть следующие настройки:

  1. Служба Perl работает в контейнере и записывает выход в STDERR
  2. logspout для отправки этих журналов на удаленный сервер для архивации

в машине с оперативной памятью 600 МБ.

Я также периодически усекаю логи по адресу:

/var/lib/docker/containers/CID/CID-json.log

как предложено здесь, чтобы избежать 100% дисковых сценариев.

Проблема

Демон Docker запускается с низким использованием памяти, изначально 1%, и медленно увеличивается до 40% после 2 дней работы контейнера.

Ссылка

Утечка памяти демона Docker обсуждалась в этой проблеме и этой проблеме. Но оба они теперь закрыты, говоря, что они слились в коммите. Я использую последнюю основную версию Docker (Docker версии 1.4.0, сборка 4595d4f), но все еще сталкиваюсь с монотонно возрастающей проблемой использования памяти.

ОБНОВЛЕНИЕ: я сделал этот эксперимент: просто запустите процесс bash в контейнере, распечатайте много строк в STDERR, использование памяти процесса демона docker очень быстро ускоряется

Docker выполняет некоторую буферизацию журнала и не освобождает память, даже если основной файл журнала (/var/lib/docker/containers/CID/CID-json.log) очищен?

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

Я не знаю, почему использование памяти docker daemon продолжает расти. Как мне отладить эту проблему?

4b9b3361

Ответ 2

Возможно, это не то, что вы ищете, но я обычно запускаю задание cron для перезапуска контейнеров через определенное количество времени каждый день. Это гарантирует, что контейнер имеет достаточное количество оперативной памяти все время, а также я обычно ограничиваю максимальное использование танка контейнером при их создании.

Контейнеры занимают всего несколько секунд, чтобы перезапустить и обслуживать данные, а если вы не используете службу высокой доступности и можете позволить себе простоя в несколько секунд, подумайте о перезапуске контейнера (при условии, что у вас нет постоянных томов).

Однако, если вы найдете решение своей проблемы, сообщите нам об этом.

Ответ 3

  • docker rm $(docker ps -a -q)
  • docker rmi --force $(docker images -q)
  • docker system prune --force

Нужно быть пользователем root.

  • systemctl stop docker
  • rm -rf /var/lib/docker/aufs
  • apt-get autoclean
  • apt-get autoremove
  • systemctl start docker