#mongodb
#mongodb
Вопрос:
У меня есть mongodb 4.4.0 и проект symfony с очередью и множеством потребителей, я столкнулся с некоторой проблемой, когда многие потребители выполняют задания, сохраняя много продуктов в БД, загрузка процессора сервера быстро увеличивается. Я хочу проверить, сколько подключений у меня есть в какой-то момент, исследовал документ, в котором я нашел информацию об ограничении подключений, и это равно 64 кб, это означает 64 000, правильно? Но я хочу понять, сколько соединений открылось в какой-то момент, для чего я выполнил эту команду в оболочке
db.serverStatus().connections
Но столкнувшись с пустым результатом, исходный результат выглядит следующим образом — script executed successfull but there are no result
. Почему? И как проверить? Я протестировал это на компьютере, где присутствует mongo — 4.15.0-117- общий.
на компьютере, где я выполнил docker-compose up для изображений mongobd
$ ulimit -a
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-m: resident set size (kbytes) unlimited
-u: processes 193076
-n: file descriptors 1024
-l: locked-in-memory size (kbytes) 16384
-v: address space (kbytes) unlimited
-x: file locks unlimited
-i: pending signals 193076
-q: bytes in POSIX msg queues 819200
-e: max nice 0
-r: max rt priority 0
-N 15: unlimited
и точно в контейнере mongodb
root@mongodb:/# ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 193076
max locked memory (kbytes, -l) 16384
max memory size (kbytes, -m) unlimited
open files (-n) 1048576
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
но странный случай, когда мои потребители работали, и запрос db.serverStatus().connections
повторил пустой результат.
На самом деле я столкнулся с медленной скоростью, когда мои потребители вводят много строк в документы, первое, что я сделал, это использовать транзакцию, и это помощь, но через некоторое время я снова столкнулся с медленной скоростью, прямо сейчас я думаю о сегментировании моего mongodb, может ли это решить проблему со скоростью, когда многие потребители выполняют установку большого количества строк в документах?
Обновить
Я выполнил эту команду напрямую в shell и столкнулся с тем же пустым результатом
> db.serverStatus().connections
> db
test
> db
test
> use symfony
switched to db symfony
> db.serverStatus().connections
> db.serverStatus().connections
>
Комментарии:
1. 64 кб означает 65536. Это значение по умолчанию, и его можно изменить в конфигурации или командной строке. Это не имеет никакого эффекта, если оно превышает системные ограничения, такие как ulimit в Linux. Каждое соединение использует что-то вроде 1 МБ оперативной памяти. Убедитесь, что у вас достаточно. Ошибки при просмотре страниц могут легко растопить процессор с дисковой прошивкой. Пустые соединения не имеют смысла. Как и в последнем предложении. Что ты пытался сказать на русском / украинском? Возвращает ли db.serverStatus() что-нибудь? Для этого требуются как минимум разрешения ClusterMonitor.
2. Если для вашего развертывания требуется аутентификация, убедитесь, что вы аутентифицированы.
3. @Alex Blex когда я выполнил команду
db.serverStatus().connections
в оболочке, у меня был результат —script executed successfull but there are no result
4. Я обновил свой вопрос
5. Это оболочка или robomongo?