PM2无法启动或重启stopped状态进程的问题排查求助
PM2无法重启已停止进程问题解决方案
根因定位
结合报错信息和配置,问题核心原因有三类:
- PM2主守护进程状态异常,内部进程ID映射表损坏,停止进程后ID绑定丢失,导致重启时找不到对应进程
- 配置冲突:开启watch监听的同时使用cluster单实例模式,进程停止后watch机制仍在运行,触发内部状态冲突
- 系统层面触发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
相关产品推荐
相关产品推荐

