Назад | Перейти на главную страницу

как ограничить размер памяти, которую процесс может потреблять в Linux

Я пытаюсь понять, как ограничить использование памяти демоном mongo до 4G.

Я думал использовать limits.conf с memlock, но не уверен, что это правильный способ.

из справочной страницы limits.conf я понял, что ulimits относятся к пользователям, а не к процессам, а также определение "memlock" мне не понятно:

memlock
  maximum locked-in-memory address space (KB)

Как я могу ограничить использование памяти процессом?

memlock ограничивает использование пользователями страниц, которые нельзя заменить, например огромные страницы. Это не то, что вы ищете.

Вы не хотите использовать ulimit -v поскольку с MongoDB ваш VSS будет включать весь ваш набор данных. Вы могли бы попробовать ulimit -m для ограничения RSS, но это не работает в Linux 2.6 и новее. Даже если бы это было так, превышение лимита могло привести к странному поведению, поскольку попытки программы выделить память не удались.

Лучше использовать cgroups. jlebar имеет руководство на этом. Две ключевые особенности cgroups vs ulimit:

  1. Оно работает
  2. Когда использование RSS приближается к пределу, срабатывают обычные алгоритмы освобождения памяти Linux. Я думаю, что для MongoDB это приведет к удалению кэшированных данных.

MongoDB использует файлы с отображением памяти для всего хранилища, похоже, вы можете ограничить размер этих файлов:

Однако, если вас беспокоят большие числа памяти, отображаемые вверху, они не соответствуют (точно) использованию физической памяти Mongo. Некоторая часть этой памяти будет отображена на диске, в зависимости от настроек вашего io-кеша, см. Проверка использования памяти (MongoDB).