2016-10-08 4 views
2

Я новичок в докеров. У меня есть приложение nodejs (sails.js). Я развернул его, используя докер. На моей машине Ubuntu работает только один контейнер докеров.Почему контейнер-докер потребляет много памяти?

Когда я пытался контролировать использование памяти моего Docker контейнера с помощью «статы Докер» команда, ниже статистика, я получаю (как показано на рисунке)

docker stats

Мой вопрос, почему это один докер-контейнер ест массу памяти ~ 207MiB? В будущем, если я хочу увеличить количество контейнеров на хосте, будет ли он потреблять память в этих кратных? Это не похоже на возможное решение, если я хочу запустить 100 контейнеров одного и того же приложения на своей машине. Есть ли способ оптимизировать потребление памяти контейнерами докеров?

(Когда я запускаю же приложение без докеров (паруса поднять/узел app.js) он потребляет только 80 МБ памяти.)

ответ

0

По умолчанию любой Docker Контейнер может потреблять большую часть аппаратных средств, такие как центральный процессор и ОЗУ. Если вы используете несколько контейнеров на одном хосте, вы должны ограничить объем памяти, которую они могут потреблять. В качестве примера: -m «300M» --memory-своп «1G»

Средняя непроизводительные затраты на каждый докер контейнер является 12М и Докер Deamon - 130М

0

Это зависит от многих аспектов, почему контейнер съедает много памяти.

Я думаю, что ваш случай не указывает, что nodejs (sails.js) потребляет больше памяти в контейнере и меньше за пределами докера - это, вероятно, занимает почти одну и ту же память.

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

При запуске контейнера вы можете ограничить процессор или память для контейнера-докера.

docker run --memory=1Gb --cpushares=0 name-container

0

Как рассчитать использование памяти, когда вы не используете докер? Используется ли приложение для ввода/вывода файлов? Если вы хотите масштабировать количество контейнеров (масштаб докеры) до сотен, то вам лучше определить пределы ресурсов для каждого контейнера. Я сделал это, добавив строку в моем Докере-compose.yml файла под службой я хотел ограничить:

mem_limit: 32m 

где т стоит мегабайта.

Просто глядя на статистику докеров, вам не нужно беспокоиться, так как она включает неиспользованную память, которая может быть восстановлена. Если вы установите разумный предел памяти, вы увидите, что контейнер восстанавливает память и продолжает работать. Если вы подозреваете утечку, проверьте подробные статистические данные о памяти для своей группы, как указано в приведенной ниже ссылке: https://docs.docker.com/engine/admin/runmetrics/

См. Мой полный ответ на мой вопрос в https://stackoverflow.com/a/41687155/6919159.

Смежные вопросы