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

Discord.js机器人(PM2部署于Ubuntu VPS)随机离线问题求助

问题排查与永久修复方案

原因排查方向

  • 细化Discord.js连接日志:默认日志仅记录断开事件,开启debug事件可捕获心跳、重连尝试、网关交互的细节,判断是重连失败还是无重连触发。在机器人代码中添加:
    client.on('debug', console.log);
    
    运行过夜后查看日志,重点关注断开前后的心跳响应、重连请求状态。
  • 检查VPS网络稳定性:夜间机房可能存在网络维护或节点波动,用mtr持续监控Discord网关:
    nohup mtr discord.com > /var/log/discord_mtr.log 2>&1 &
    
    次日查看日志中的丢包率、延迟波动;同时检查系统日志/var/log/syslog,确认是否有网卡重启、IP变更等网络异常。
  • 验证pm2监控逻辑:pm2默认仅监控进程是否存活,机器人进程未崩溃但断开连接时不会触发重启。查看pm2自身日志:
    pm2 logs pm2
    
    排查是否有进程资源限制触发的隐性问题,同时用pm2 monit实时观察内存/CPU占用,确认夜间是否有资源突增导致心跳超时。
  • 排查资源瓶颈:开启pm2资源使用日志:
    pm2 set pm2:log_resource_usage true
    
    日志中会记录进程的内存、CPU变化,判断是否因内存泄漏或CPU过载导致Discord心跳发送失败。

永久修复方案

  • 优化Discord.js重连机制:调整客户端配置增强重连能力,同时监听断开事件触发兜底逻辑:
    const client = new Discord.Client({
      intents: [/* 你的intents配置 */],
      retryLimit: 15, // 提高重连尝试次数
      restTimeOffset: 150 // 调整REST请求时间偏移,避免超时
    });
    
    client.on('disconnect', () => {
      console.log('与Discord网关断开,等待重连...');
      // 30秒后仍未恢复则退出进程,触发pm2重启
      setTimeout(() => {
        if (!client.isReady()) process.exit(1);
      }, 30000);
    });
    
  • 配置pm2主动重启规则:
    • 基于内存阈值重启:防止内存泄漏导致的异常,比如设置内存超过500M时重启:
      pm2 restart <你的机器人进程名> --max-memory-restart 500M
      
    • 自定义健康检查脚本:编写简单的在线检测脚本check_bot.js:
      const { Client } = require('discord.js');
      const client = new Discord.Client({ intents: [] });
      
      client.login('你的机器人TOKEN')
        .then(() => { process.exit(0); })
        .catch(() => { process.exit(1); });
      
      用pm2定时执行脚本,检测失败则重启:
      pm2 start check_bot.js --name bot-health-check --cron "*/20 * * * *" --no-autorestart
      
  • 依赖版本升级:升级pm2和Discord.js到最新稳定版,修复已知的重连、进程监控bug:
    npm install -g pm2@latest
    npm install discord.js@latest
    
  • 网络配置优化:修改VPS DNS为Cloudflare 1.1.1.1或Google 8.8.8.8,减少DNS解析延迟;检查安全组/防火墙规则,确保Discord网关端口(443、80)无限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:07:45