节点应用程序产生多个子进程并消耗所有CPU内核

时间:2018-10-24 12:22:08

标签: node.js mongodb child-process spawn

问题

我正在运行一个在MongoDb中频繁执行插入操作的NodeJs应用程序,问题是,即使我试图以fork模式运行它,它也会产生多个子进程。

最初,我怀疑是PM2引起了问题,但后来我尝试按照以下方式启动应用程序,但仍然可以看到出现了多个子进程-

  • PM2为分叉模式
  • PM2它具有1个实例的集群模式
  • VSCode调试器
  • 终端命令(node app.js

统计

我设法收集了各种统计数据,以证明(I have updated the machine specific information)-

  • Node App正在产生多个进程
  • 这些进程消耗了所有CPU内核

进程状态

命令-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 App进程)

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


发现

如果我停止正在运行的节点服务-

  • CPU使用率下降
  • 子进程消失

为什么节点应用程序产生了那么多进程?

为什么子进程的总数总是10?

让我知道是否需要进一步的信息。

0 个答案:

没有答案