未启用集群/子进程时Node.js为何占用多CPU?
Node.js未启用集群却占用多CPU的排查与解决
看你贴的进程列表,能清楚看到多个node进程在运行(PID 129953、129963、134452)——这就是双CPU交替高负载的核心原因,你的环境里实际跑了不止一个Node.js进程,并非单个进程占用多核心。
常见触发原因:
- npm脚本隐式启动子进程:
npm run dev会先启动sh进程(比如PID 129952、134451),如果你的package.json里的dev脚本包含多任务逻辑(比如同时启动后端服务和前端构建,或者用了concurrently这类并行工具),就会生成多个Node实例。 - 依赖库后台开子进程:部分第三方依赖(比如文件监听工具、日志收集插件、某些构建工具)会自动启动子进程,你没手动创建,但依赖本身会触发。
- 进程残留:之前的Node进程没完全退出,残留进程和新启动的进程交替占用CPU资源。
排查步骤:
- 打开
package.json查看scripts里的dev命令具体内容,确认是否同时执行了多个Node相关任务。 - 执行
pstree -p 129938查看npm run dev的进程树,明确所有子进程的关联关系,找到额外Node进程的来源。 - 先执行
killall node终止所有Node进程,再单独运行node index.js,用ps -a确认是否只有一个Node进程,同时观察CPU负载变化。 - 逐步移除项目依赖,排查是否是某个第三方包导致的子进程启动。
内容的提问来源于stack exchange,提问作者Mike K
相关产品推荐
相关产品推荐

