MongoDB постоянно высокий уровень использования процессора

Согласно статистике контейнеров докеров, моя база данных mongo постоянно потребляет от 250 до 350% процессора. Это очень впечатляет, поскольку это одна основная система: P

Печальная часть состоит в том, что это мой производственный экземпляр, и тем более печально, что он должен жить до следующей резервной копии prod, и это еще 3,5 часа.

Я попытался сделать mongotop, но он сообщает мне статистику 0ms для всех представленных коллекций. Могу ли я сделать что-нибудь еще, чтобы выяснить, что происходит?

PS: db работает в течение 9 недель и не вызывает проблем.

Ответ 1

Существует функция db.currentOp(), которая перечисляет текущие запросы с очень подробной информацией, а также включает продолжительность их выполнения (secs_running).

Затем вы можете использовать currentOp.opid с db.killOp(), чтобы убить этот запрос/операцию.

Если db.currentOp() не возвращает никаких результатов, потому что нет запроса, который привел к хаосу, то существует также db.setProfilingLevel(), который включит профилирование, сохраняя запросы в "локальной" базе данных. Вот "Учебное пособие" из курса "M102: MongoDB для администраторов баз данных".

Дополнительную информацию можно найти в этом подробном сообщении в блоге Игоря Хоменко.

Ответ 2

Первое и более важное мнение, что вам нужно сделать, это проверить ваши запросы, например, в моем случае у меня такая же проблема, и когда я проверяю свои журналы tail -f /var/log/mongodb/mongod.log (вы можете настроить эти журналы /etc/mongod.conf). Я видел только простые запросы, такие как db.brands.find({ "field": "value" }), но я проверяю свои индексы в коллекциях "бренды", и это поле в запросах не является индексом (db.brands.getIndexes()) единственное, что я сделал, это проиндексировать это поле db.brands.ensureIndex({name:1},{unique:true}), конечно, убедитесь, что ваше поле уникально, потому что в этом примере я помещаю как уникальный. После этого мой процессор изменился с 100% до 20%.

Поэтому я не говорю, что это ваша проблема, но может быть, проверьте свои запросы, прежде чем подумайте.