You need to enable JavaScript to run this app. PM2无法启动或重启stopped状态进程的问题排查求助
优惠活动
大模型
产品
解决方案
定价
更多

PM2无法启动或重启stopped状态进程的问题排查求助

PM2无法重启已停止进程问题解决方案

根因定位

结合报错信息和配置,问题核心原因有三类:

  1. PM2主守护进程状态异常,内部进程ID映射表损坏,停止进程后ID绑定丢失,导致重启时找不到对应进程
  2. 配置冲突:开启watch监听的同时使用cluster单实例模式,进程停止后watch机制仍在运行,触发内部状态冲突
  3. 系统层面触发OOM杀死PM2主进程,重启流程被强制中断,对应报错PM2 is being killed, stopping restart procedure...

修复步骤

第一步:修复PM2主进程异常

执行以下命令重置PM2守护进程状态,不会丢失现有配置:

# 杀掉异常的PM2主进程
pm2 kill
# 启动配置中的应用
pm2 start app.config.js
# 固化当前配置到PM2 dump文件,避免后续主进程重启丢失配置
pm2 save

如果需要PM2开机自启,可额外执行pm2 startup按照提示完成配置。

第二步:调整配置规避冲突

修改app.config.js关键参数,避免状态冲突:

module.exports = {
  apps: [
    {
      name: 'myproject',
      script: './build/server.js',
      instances: 1,
      // 单实例场景替换为fork模式,避免cluster模式的进程ID绑定异常
      exec_mode: 'fork',
      autorestart: true,
      // 新增:主动停止进程的退出码不触发自动重启
      stop_exit_codes: [0],
      // 调整监听路径为编译后目录,避免src文件变更未编译导致异常触发重启
      watch: ['build', 'app.config.js'],
      watch_delay: 1000,
      ignore_watch: ['node_modules', 'logs'],
      exp_backoff_restart_delay: 2000,
      max_memory_restart: '100M',
      log_file: './logs/app.log',
      log_date_format: 'YYYY-MM-DD HH:mm:ss',
      combine_logs: true,
      env: {
        SOME_ENV: 'some_value'
      }
    }
  ]
};

修改后执行pm2 reload myproject生效配置。

第三步:临时启停替代方案

测试阶段需要频繁启停时,不需要删除进程,使用以下命令即可正常启停:

# 停止进程后指定配置文件启动,不会重复创建进程
pm2 stop myproject && pm2 start app.config.js --only myproject

第四步:排查系统OOM问题

如果仍出现PM2 is being killed报错,执行以下命令检查是否系统内存不足杀死PM2进程:

dmesg | grep -i pm2

如果存在OOM记录,可升级服务器内存,或者调整max_memory_restart参数降低应用内存阈值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 16:06:03