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

Как избежать одновременного открытия большого количества файлов?

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

В моем приложении для каждого покупателя используется несколько коллекций, что означает МНОГО коллекций. Из-за ограничений файлов пространства имен MMAPv1 они разделены на несколько баз данных. Шардинг не нужен, потому что, хотя коллекций много, они невелики. В принципе, это работает нормально и стабильно.

Однако, переключившись на WiredTiger в моей среде разработки (это Mac OS), я заметил, что WiredTiger не только использует отдельный файл для каждой коллекции и каждого индекса, но и запускает mongod Я вижу, что ВСЕ ФАЙЛЫ ОТКРЫТЫ до того, как будут доступны какие-либо коллекции.

По моим оценкам, при переносе моей производственной среды (CentOS 7) на использование wiredTiger у меня может получиться около миллиона файлов, и их количество будет расти.

Мне известно о проблеме ulimit, и я прочитал документация. В совете сказано, что рекомендуемые ulimit - 64000. Меня беспокоит, что это намного ниже того, что я получу в итоге.


Итак, мои вопросы ...

Как правило, mongodb использует пул подключений. Вы можете ограничить количество входящих подключений с помощью параметра времени выполнения net.maxIncomingConnections. Ограничивая количество входящих подключений, вы можете предотвратить каскадный эффект, когда mongos создает слишком много подключений к экземплярам mongod.

Относительно ваших вопросов мои ответы в строке:

Это нормально, что ВСЕ файлы открываются сразу? или это похоже на то, что я что-то делаю не так? Мой ответ: это не неправильный процесс создания постоянных соединений (пул), поскольку создание соединения является более затратной операцией.

Это проблема только Mac? (Я еще не тестировал миграцию в Linux): Мой ответ: он будет работать таким же образом, только изменения будут ограничениями для каждой среды.

Если я установлю смехотворно высокий ulimit, повлияет ли это на сервер каким-либо негативным образом? Мой ответ: после изменения лимита это обязательно повлияет на потребление ресурсов системы, попробуйте получить количество соединений, требуемых вашим приложением с открытыми потоками, и соответствующим образом настройте параметры.

Надеюсь, что приведенные выше ответы помогут вам.