Приложение узла порождает несколько дочерних процессов и использует все ядра процессора - PullRequest
0 голосов
/ 24 октября 2018

Проблема

Я запускаю приложение NodeJ, которое часто выполняет операции вставки в MongoDb, и проблема в том, что оно порождает несколько дочерних процессов, даже если я пытаюсь запустить его в режиме форка.

Изначально я подозревал, что проблема связана с PM2, но затем я попытался запустить приложение, используя следующие способы, но я все еще вижу, как запускаются несколько дочерних процессов -

  • PM2 - это режим форка
  • PM2 это режим кластера с 1 экземпляром
  • Отладчик VSCode
  • Команда терминала (node app.js)

Статистика

Мне удалось собратьразличные статистические данные, доказывающие, что (I have updated the machine specific information) -

  • Node App порождает несколько процессов
  • Эти процессы потребляют все ядра ЦП

Состояние процесса

команда - ps -aefL | grep "29475"

machine+ 8750 28307 8750 0 1 12:10 pts/24 00:00:00 grep --color=auto 29475

machine+ 29475 18579 29475 0 10 10:58 ? 00:00:05 node /app/api.js

machine+ 29475 18579 29476 0 10 10:58 ? 00:00:00 node /app/api.js

machine+ 29475 18579 29477 0 10 10:58 ? 00:00:00 node /app/api.js

machine+ 29475 18579 29478 0 10 10:58 ? 00:00:00 node /app/api.js

machine+ 29475 18579 29479 0 10 10:58 ? 00:00:00 node /app/api.js

machine+ 29475 18579 29481 0 10 10:58 ? 00:00:00 node /app/api.js

machine+ 29475 18579 29501 0 10 10:58 ? 00:00:00 node /app/api.js

machine+ 29475 18579 29502 0 10 10:58 ? 00:00:00 node /app/api.js

machine+ 29475 18579 29503 0 10 10:58 ? 00:00:00 node /app/api.js

machine+ 29475 18579 29504 0 10 10:58 ? 00:00:00 node /app/api.js


Статистика виртуальной памяти

Команда - vmstat 2 100

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

r b swpd free buff cache si so bi bo in cs us sy id wa st
11 0 0 603060 818492 3718660 0 0 16 40 73 59 7 28 65 1 0
6 0 0 601664 818492 3718696 0 0 0 130 3383 6112 76 24 0 0 0
6 0 0 611208 818492 3711916 0 0 0 22 3472 6378 77 23 0 0 0
7 0 0 610932 818492 3711920 0 0 0 16 3932 6441 77 24 0 0 0
5 0 0 617304 818492 3711980 0 0 0 100 3480 6151 72 25 2 1 0
6 0 0 612584 818496 3718788 0 0 0 102 3634 7433 67 25 6 1 0
8 0 0 612128 818496 3718788 0 0 0 18 3318 5584 77 23 0 0 0
8 0 0 617552 818496 3713300 0 0 0 0 3468 6787 78 22 0 0 0
7 0 0 618096 818496 3712132 0 0 0 38 3743 6913 76 23 0 0 0
12 0 0 618040 818496 3712528 0 0 0 146 3852 7434 76 24 0 0 0


Состояние использования системных ресурсов

Команда - top -p 5733 -p 29475 (процессы приложения mongod & node)

top - 12:30:06 up 1 day, 3:21, 1 user, load average: 8.91, 4.81, 3.31

Tasks: 2 total, 0 running, 2 sleeping, 0 stopped, 0 zombie

%Cpu(s): 72.1 us, 27.7 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st

KiB Mem : 16336020 total, 686496 free, 12203100 used, 3446424 buff/cache

KiB Swap: 16686076 total, 16686076 free, 0 used. 2746100 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5733 root 20 0 1296480 366432 29724 S 204.0 2.2 63:07.65 mongod
29475 machine+ 20 0 1351412 118900 30960 S 8.8 0.7 0:10.82 node /app/api.js


СистемаМонитор

enter image description here


Выводы

Если я остановлю службу работающего узла -

  • Использование ЦП снижается
  • Дочерние процессы исчезают

Почему приложение узла порождает так много процессов?

Почему число дочерних процессов всегда получается равным 10?

ПустьЯ знаю, если требуется дополнительная информация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...