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

执行pm2 restart all后PM2崩溃,进程列表丢失问题咨询

解决PM2重启崩溃及Node.js应用内存泄漏问题

一、PM2执行pm2 restart all后崩溃、进程列表清空的修复方案

  • 升级PM2到稳定版:旧版本存在已知的进程管理bug,执行pm2 update升级至最新稳定版本,能解决大部分重启异常问题。
  • 替换重启命令:避免直接使用pm2 restart all,改用更温和的零停机重载命令pm2 reload all;如果不需要零停机,可指定进程名逐个重启,比如pm2 restart <your-app-name>,降低批量操作的崩溃风险。
  • 排查崩溃日志:执行pm2 logs --err查看PM2崩溃时的错误日志,定位具体诱因——比如配置文件语法错误、进程权限不足、系统资源耗尽等。
  • 使用配置文件管理进程:生成PM2生态配置文件ecosystem.config.js(执行pm2 ecosystem),在文件中明确配置应用参数,示例:
    module.exports = {
      apps: [{
        name: 'your-node-app',
        script: './app.js',
        instances: 'max',
        env: {
          NODE_ENV: 'production'
        }
      }]
    }
    
    后续用pm2 start ecosystem.config.js启动应用,重启时执行pm2 restart ecosystem.config.js,避免因进程列表丢失导致的异常。
  • 检查运行权限:确保PM2以拥有足够权限的普通用户运行,避免root用户运行带来的权限冲突,同时保证应用目录的读写权限正常。

二、Node.js应用内存泄漏、运行变慢的优化方案

  • 启用PM2内存自动重启:在ecosystem.config.js中配置max_memory_restart参数,当应用内存占用阈值触发时自动重启,示例:
    module.exports = {
      apps: [{
        // ...其他配置
        max_memory_restart: '600M' // 内存超过600MB时自动重启
      }]
    }
    
  • 排查内存泄漏根源:
    • 用pm2 start app.js --node-args="--inspect"启动应用,通过Chrome DevTools的Memory面板抓取堆快照,分析内存占用较高的对象、未释放的资源(如数据库连接、事件监听器)。
    • 使用pm2 monit实时监控应用的CPU、内存占用,观察内存增长趋势,定位泄漏时间段对应的代码逻辑。
  • 优化定时重启策略:如果已配置定时任务,优先使用PM2内置的cron_restart参数,在ecosystem.config.js中添加:
    module.exports = {
      apps: [{
        // ...其他配置
        cron_restart: '0 2 * * *' // 每天凌晨2点自动重启
      }]
    }
    
    避免使用外部脚本操作PM2,减少异常触发概率。
  • 修复代码层面的泄漏:
    • 检查是否存在未释放的数据库连接、Redis连接,确保每次使用后调用release()或close()。
    • 移除不必要的全局变量,避免变量持续累积占用内存。
    • 清理未移除的事件监听器,防止内存泄漏。
  • 启用日志轮转:安装PM2日志轮转插件pm2 install pm2-logrotate,防止日志文件过大占用磁盘资源,间接影响应用运行稳定性。

内容的提问来源于stack exchange,提问作者farshid.chegini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:52:46