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