如何用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
相关产品推荐
相关产品推荐

