Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 生成多个子进程的节点应用程序&;消耗所有CPU核 问题_Node.js_Mongodb_Child Process_Spawn - Fatal编程技术网

Node.js 生成多个子进程的节点应用程序&;消耗所有CPU核 问题

Node.js 生成多个子进程的节点应用程序&;消耗所有CPU核 问题,node.js,mongodb,child-process,spawn,Node.js,Mongodb,Child Process,Spawn,我正在运行一个NodeJs应用程序,它在MongoDb中执行频繁的插入操作&问题是,即使我尝试在fork模式下运行它,它也会产生多个子进程 起初,我怀疑是PM2造成了问题,但后来我尝试了以下方法来启动应用程序,但仍然可以看到多个子进程正在生成- PM2为分叉模式 具有1个实例的PM2 it群集模式 VSCode调试器 终端命令(node app.js) 统计数据 我设法收集了各种统计数据来证明(我已经更新了特定于机器的信息)- 节点应用程序正在生成多个进程 这些进程正在消耗所有的CPU核

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

起初,我怀疑是PM2造成了问题,但后来我尝试了以下方法来启动应用程序,但仍然可以看到多个子进程正在生成-

  • PM2为分叉模式
  • 具有1个实例的PM2 it群集模式
  • VSCode调试器
  • 终端命令(
    node app.js
统计数据 我设法收集了各种统计数据来证明(
我已经更新了特定于机器的信息
)-

  • 节点应用程序正在生成多个进程
  • 这些进程正在消耗所有的CPU核

过程状态

命令-
ps-aefL | grep“29475”

machine+8750 283078750 01 12:10分/24 00:00:00 grep--color=auto 29475

machine+2947518579 29475 0 10:58?00:00:05节点/app/api.js

machine+2947518579 29476 0 10:58?00:00:00节点/app/api.js

machine+294751857929477010:58?00:00:00节点/app/api.js

machine+2947518579 29478 0 10:58?00:00:00节点/app/api.js

machine+294751857929479010:58?00:00:00节点/app/api.js

machine+2947518579294810010:58?00:00:00节点/app/api.js

machine+2947518579 29501 0 10:58?00:00:00节点/app/api.js

machine+2947518579 29502 0 10:58?00:00:00节点/app/api.js

machine+2947518579 29503 0 10:58?00:00:00节点/app/api.js

machine+2947518579295040100:58?00:00:00节点/app/api.js


虚拟内存统计信息

命令-
vmstat2100

procs----------内存----------交换----io----系统----cpu------

r b swpd免费buff缓存si so bi bo在cs us sy id wa st中

11 0 0 603060 818492 3718660 0 0 16 40 73 59 7 28 65 1 0

60 601664 818492 3718696 0 0 0 130 3383 6112 76 24 0 0

6 0 611208 818492 3711916 0 0 22 3472 6378 77 23 0 0

7 0 610932 818492 3711920 0 0 16 3932 6441 77 24 0 0

50 617304 818492 3711980 0 0 100 3480 6151 72 25 2 1 0

6 0 0 612584 818496 3718788 0 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 3468 6787 78 22 0 0

7 0 0 618096 818496 3712132 0 0 38 3743 6913 76 23 0 0

12 0 0 618040 818496 3712528 0 0 0 146 3852 7434 76 24 0 0


系统资源使用状态

命令-
top-p 5733-p 29475
(mongod和node应用程序进程)

top-12:30:06最多1天,3:21,1个用户,平均负载:8.91,4.81,3.31

任务:总共2个,0个运行,2个睡眠,0个停止,0个僵尸

%Cpu:72.1us、27.7sy、0.0ni、0.0id、0.0wa、0.0hi、0.2si、0.0st

KiB Mem:16336020总计,686496免费,12203100使用,3446424 buff/cache

KiB交换:总计16686076,免费16686076,使用0。2746100可用内存

PID用户PR NI VIRT RES SHR S%CPU%MEM TIME+命令

5733 root 20 0 1296480 366432 29724 S 204.0 2.2 63:07.65 mongod

29475机器+20 0 1351412 118900 30960 S 8.8 0.7 0:10.82节点/app/api.js


系统监视器


调查结果 如果停止正在运行的节点服务-

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

为什么节点应用程序会产生这么多进程?

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


如果需要更多信息,请告诉我。

我认为并非所有都是进程,而是线程。作为nodejs单进程运行4个工作线程。此外,您还启用了将生成
4进程的集群。使用
pstree
命令跟踪进程,您将获得清晰的图片,这是进程,这是工作线程,还将禁用群集以进行监视。你会明白这一点。我也尝试过不使用聚类,但最终得到了相同的结果。不过,看到
pstree
命令的响应会很有趣。试过之后我会给你回复的。谢谢