0

Я использую Mongodb на моем Windows Server 2012 более двух лет. С момента последнего обновления возникли некоторые странные проблемы, которые в конечном итоге приводят к использованию всей RAM-памяти.Проблемы с памятью с новой версией Mongodb

Служба Iv'e сконфигурирована для MongoDB выглядит следующим образом:

logpath=d:\data\log\mongod.log 
dbpath=d:\data\db 
storageEngine=wiredTiger 
rest=true 

#override port 
port=27017 

#configsvr = true 
shardsvr = true 

И для того, чтобы ограничить использование памяти кэша Iv'e добавили следующую строку:

wiredTigerCacheSizeGB=10 

И это где начались странные вещи. Когда я проверяю диспетчер задач, он говорит, что теперь Mongodb действительно ограничен 10 ГБ, как я определил в сервисе, но на самом деле он использует намного больше 10 ГБ.

В первом изображении вы можете увидеть объем памяти, отсортированный по потреблению оперативной памяти

enter image description here

В то время как на самом деле машина, я использую имеет 28GB в общей сложности enter image description here

Это сумасшедшее приводит потребление к сбою в сценариях, которые я запускаю, даже самых простых, даже когда я запускаю простые запросы, такие как «count» или «different», я считаю, что это прямые результаты потребления памяти.

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

enter image description here

Таким образом, в конце концов, я имеют два основных вопроса: 1. Есть ли способ решить эту проблему без переоценки версии Mongodb? 2. Файл конфигурации выглядит правильно? все, что нужно?

+0

Вы должны открыли новый вопрос, когда Вы включаете свои новые данные соединения и изменить этот вопрос, вместо изменить свой вопрос и не принимать ответ. 1) Вам нужно указать, какие версии MongoDB задействованы. i.e от версии до версии. Что касается соединения, это объединение пулов, вам нужно указать, как вы открываете соединения. то есть язык и версию драйвера. 2) См. [Параметры конфигурации] (https://docs.mongodb.com/manual/reference/configuration-options/). В зависимости от вашего варианта использования развертывания вам, скорее всего, не нужны 'shardsvr' и' rest'. –

ответ

1

Использование памяти в WiredTiger кеш двухуровневый:

  • Первый является кэш WiredTiger, как управляется --wiredTigerCacheSizeGB
  • Во-вторых, кэш файловой системы операционной системы. MongoDB автоматически использует всю свободную память, которая не используется в кэше WiredTiger или другими процессами

Смотрите также WiredTiger memory usage

для кэша файловой системы операционной системы, MongoDB не управляет памятью использует напрямую - это позволяет OS управляет им. Windows попытается использовать каждый последний фрагмент физической памяти, если это возможно, но многие из них должны и будут выбрасываться, если другие процессы запросят память.

Альтернативой является запуск mongod в контейнере (например, lxc, cgroups, Docker и т. Д.), Который не имеет доступа ко всей ОЗУ, доступной в системе.

Сказав выше:

  • Вы также работает под управлением другой базы данных на сервере т.е. mysqld.MongoDB, как и некоторые базы данных, будет работать лучше на выделенном сервере, чтобы уменьшить конфликт памяти.

  • Диспетчер задач показывает, что mongod использует 10 ГБ, хотя аппарат использует до ~ 28 ГБ. Это может быть или не быть mongod, так как у вас есть другие процессы.

Полезные ресурсы: