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

如何用PM2监控多进程Node.js Discord Bot的整体资源使用?

解决PM2监控Discord Bot传统分片进程的方案

一、优先使用PM2的解决方案

1. 直接用PM2启动所有分片进程(推荐)

传统分片的Discord Bot可通过指定分片ID与总分片数启动单个分片进程,你可以通过PM2配置文件批量管理这些进程:

  • 创建PM2配置文件(如ecosystem.config.js),为每个分片单独配置:
module.exports = {
  apps: [
    {
      name: "discord-bot-shard-0",
      script: "./bot.js",
      args: "--shard-id 0 --shard-count 4", // 示例总分片数为4,按需调整
      instances: 1,
      autorestart: true,
      max_memory_restart: "512M", // 单个分片达到内存阈值自动重启
      env: {
        NODE_ENV: "production"
      }
    },
    {
      name: "discord-bot-shard-1",
      script: "./bot.js",
      args: "--shard-id 1 --shard-count 4",
      instances: 1,
      autorestart: true,
      max_memory_restart: "512M",
      env: {
        NODE_ENV: "production"
      }
    },
    // 依次添加剩余分片的配置项
  ]
};
  • 启动命令:pm2 start ecosystem.config.js
  • 执行pm2 list即可查看所有分片进程的CPU、内存占用数据,同时单个分片达到内存阈值时会自动重启,完全满足监控与自动运维需求。

2. 开启PM2子进程追踪(适用于主进程自动创建分片的场景)

如果你的Bot是通过主进程自动创建分片子进程,可开启PM2的子进程追踪功能:

  • 修改PM2配置文件,添加trace_processes选项:
module.exports = {
  apps: [
    {
      name: "discord-bot-main",
      script: "./main.js",
      instances: 1,
      autorestart: true,
      trace_processes: true, // 开启子进程追踪
      env: {
        NODE_ENV: "production"
      }
    }
  ]
};
  • 启动后执行pm2 show discord-bot-main可查看子进程信息,但PM2默认的max_memory_restart仅监控主进程内存。若要监控集群总内存,可编写定时脚本:遍历PM2进程列表(含子进程)计算总内存占用,达到阈值时触发所有分片进程重启。

二、备选进程管理工具(若PM2无法满足需求)

  • PM2 Plus:PM2的付费版本,支持集群级别的资源汇总监控,可基于集群总CPU/内存阈值配置自动重启规则。
  • Docker Compose:将每个分片打包为独立Docker容器,通过docker stats查看集群总资源占用,同时可配置容器内存限制,达到上限时自动重启容器。
  • systemd + monit:为每个分片创建单独的systemd服务,通过systemctl管理;搭配monit工具实现资源监控与自动重启逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:23:12