You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node/Express应用使用PM2开启集群部署到Heroku后崩溃问题求助

问题核心原因及解决方案

Heroku的dyno运行机制要求应用主进程必须持续在前台运行,默认pm2 start会把服务放到后台执行,主进程执行完就直接退出,Heroku会判定应用崩溃终止当前dyno,这是你遇到的最常见问题。按以下步骤调整即可:

  • 替换启动命令为PM2官方针对PaaS/容器环境提供的前台运行指令pm2-runtime,不要使用pm2 start:
    首先确认你的项目依赖中已经安装pm2:npm install pm2 --save
    调整Procfile或者package.json的启动指令为:
    pm2-runtime build/server/app.js -i max
    
  • 检查端口监听配置:Express服务必须监听Heroku分配的PORT环境变量,不能硬编码端口,写法参考:
    const port = process.env.PORT || 3000
    app.listen(port, () => {
      console.log(`服务运行在端口${port}`)
    })
    
  • 若需要更精细化的PM2集群配置,可以在项目根目录添加ecosystem.config.js配置文件:
    module.exports = {
      apps: [{
        script: 'build/server/app.js',
        instances: 'max',
        exec_mode: 'cluster',
        env_production: {
          NODE_ENV: 'production'
        }
      }]
    }
    
    对应启动命令调整为:pm2-runtime ecosystem.config.js --env production
  • 排查潜在应用问题:先临时把启动命令换成node build/server/app.js,查看Heroku日志确认不用PM2时应用可以正常启动,排除依赖缺失、环境变量未配置等应用本身的问题。

额外注意:PM2的集群能力仅在单个Heroku dyno内部生效,多dyno的流量分发由Heroku自带的路由层负责,无需额外配置。

内容的提问来源于stack exchange,提问作者SKeney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:06:02