Node.js 生成多个子进程的节点应用程序&;消耗所有CPU核 问题
我正在运行一个NodeJs应用程序,它在MongoDb中执行频繁的插入操作&问题是,即使我尝试在fork模式下运行它,它也会产生多个子进程 起初,我怀疑是PM2造成了问题,但后来我尝试了以下方法来启动应用程序,但仍然可以看到多个子进程正在生成-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核
- 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
命令的响应会很有趣。试过之后我会给你回复的。谢谢