2015-10-22 3 views
0

кажется, что у меня проблема с конфигурацией/разработкой mongoose. я создаю экземпляр соединения следующим образом:Mongoose не закрытие соединения

var con = mongoose.createConnection(baseUri, { server: { poolSize: 1 }, socketOptions: { keepAlive: 0, connectTimeoutMS: 10000 }}); 

Для моего понимания они должны быть закрыты через 10 секунд. Я ошибаюсь в своем предположении? Правильно ли работать с этой кодировкой (Keepalive: 0, connectionTimeoutMS: 10000 ??

В Монго журнал я могу видеть, что соединения не закрыты:

2015-10-22T19:38:55.250+0200 I NETWORK [initandlisten] connection accepted from 127.0.0.1:56345 #20 (20 connections now open) 
2015-10-22T19:38:55.258+0200 I NETWORK [initandlisten] connection accepted from 127.0.0.1:56346 #21 (21 connections now open) 
2015-10-22T19:38:55.258+0200 I NETWORK [initandlisten] connection accepted from 127.0.0.1:56347 #22 (22 connections now open) 

Я ожидаю, что до 2000 одновременных пользователей в моем приложении, и я просто хочу, чтобы предотвратить MongoDB от сбоев!

BR, Martin

+0

Когда вы закрываете приложение, соединения закрываются? – inspired

+0

Да, они закрываются, если я закрываю приложение – Martin

ответ

1

Мартин,

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

Если вы беспокоитесь о проблемах с таймаутом, для разработки я бы начал с относительно низкого значения таймаута и медленно увеличил его, если вы столкнулись с регулярными таймаутами. Как правило, вы можете начать с паузы в 5 секунд. Для производства или соединений, созданных через PaaS, таких как Heroku, вы можете рассмотреть более высокий тайм-аут, так как ваше приложение, скорее всего, работает в контейнере, который может быть «холостым» или «пассивированным» в периоды низкой активности. Например, по этому вопросу MongoLab рекомендует установить тайм-аут до 30 секунд. См. Здесь: MongoLab Recommended Mongoose Settings..

Вы должны включить keepAlive, если у вас будут длинные приложения.

Если ваша проблема связана с накладными расходами, вы упомянули MongoDB, сбой с 2000 одновременными пользователями, каждое подключение к MongoDB имеет накладные расходы, которые вносят вклад в требуемую память для системы. Если вы подозреваете, что большое количество пользователей и для обеспечения качества продукции вы хотите посмотреть в MongoDB Replication, он может окупиться, чтобы начать использовать инструмент мониторинга, например MongoStat, для мониторинга работы mongod