pm2 启动多进程集群需用 -i max 参数自动适配 cpu 核心数,配合 --name 便于管理,所有实例共享端口并由 pm2 内部负载均衡;必须通过 nginx 反向代理暴露服务,配置 proxy_http_version 1.1 和 connection upgrade 支持长连接,并统一管理环境变量、日志与监控。

用 PM2 启动多进程集群
Node.js 单进程无法充分利用多核 CPU,生产环境必须启用集群模式。PM2 是最成熟的选择,它能自动按 CPU 核心数启动实例,并在崩溃时自动重启。
推荐命令启动:
- pm2 start npm --name "my-app" -- start(适用于 Next.js/Nuxt 等框架,自动读取 package.json 中的 start 脚本)
- pm2 start ./dist/server.js -i max --name "api"(适用于自定义 Express/Koa 应用)
关键参数说明:-i max 表示启动与 CPU 核心数一致的进程数;--name 便于后续管理;所有进程共享同一端口(如 3000),由 PM2 内部负载均衡分发请求。
Nginx 作为统一入口转发流量
PM2 集群只监听本地地址(如 127.0.0.1:3000),不能直接暴露给公网。Nginx 必须作为反向代理接收 80/443 请求,并把它们转发到该本地端口。
/etc/nginx/conf.d/my-app.conf 示例:
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
- 监听 80 端口,绑定域名(如
server_name app.example.com) location / { proxy_pass http://127.0.0.1:3000; }- 必须设置
proxy_http_version 1.1和Connection upgrade,否则 WebSocket 或长连接会中断 - 添加
X-Forwarded-For等头信息,确保后端能获取真实用户 IP
进阶:Nginx 层面做多 Node 实例负载均衡
当单台服务器资源见顶,或需要跨机器部署时,可让 Nginx 主动调度多个 Node.js 服务实例。这时不依赖 PM2 的 -i max,而是运行多个独立 PM2 进程(监听不同端口),再由 Nginx 统一代理。
例如启动两个实例:
pm2 start npm --name "app-3000" -- start -- -p 3000pm2 start npm --name "app-3001" -- start -- -p 3001
Nginx 配置中使用 upstream 块定义后端池:
upstream node_backend {
server 127.0.0.1:3000 weight=3;
server 127.0.0.1:3001 weight=2;
}
server { location / { proxy_pass http://node_backend; } }
这样既实现横向扩展,又支持按权重分配流量,还能配合健康检查自动剔除故障节点。
配套保障:环境与监控不可少
集群模式下,配置和可观测性比单进程更关键:
- 所有 PM2 实例必须设
NODE_ENV=production,避免开发中间件拖慢性能 - 用
ecosystem.config.cjs统一管理脚本、端口、环境变量,避免手动传参出错 - 开启 PM2 日志聚合:
pm2 log查看全部实例输出;pm2 monit实时观察内存/CPU 占用 - Nginx 开启 access_log 和 error_log,并定期轮转,防止日志撑爆磁盘










