PM2速查

发布时间: 2025年12月4日 00:55

**PM2** 是 Node.js 应用的生产级进程管理工具,支持后台运行、自动重启、日志管理、集群部署、性能监控等。

PM2 速查手册(Node.js 进程管理利器)

PM2 是 Node.js 应用的生产级进程管理工具,支持后台运行、自动重启、日志管理、集群部署、性能监控等。本文档整理最常用命令与最佳实践,适用于开发、测试及运维场景。


一、安装

# 全局安装 npm install -g pm2 # 验证版本 pm2 --version

二、启动应用

1. 基础启动

# 启动一个 Node.js 应用 pm2 start app.js # 指定进程名称(推荐!避免重复) pm2 start app.js --name "my-api"

2. 多进程/集群模式(提升性能)

# 启动 4 个实例 pm2 start app.js -i 4 # 按 CPU 核心数自动启动(推荐用于生产) pm2 start app.js -i max

3. 启动其他语言脚本

# Python pm2 start script.py --interpreter python # Bash pm2 start script.sh --interpreter bash

⚠️ 使用 --interpreter 显式指定解释器,避免识别错误 ty-reference


三、进程管理

查看状态

# 列出所有进程 pm2 list # 实时监控 CPU/内存 pm2 monit # 查看详细信息(含 PID、启动时间、路径等) pm2 show <app-name-or-id>

重启与重载

# 平滑重载(0 秒停机,适合线上服务!) pm2 reload my-api # 强制重启(有短暂中断) pm2 restart my-api # 重载所有应用 pm2 reload all

reload vs restart

  • reload:逐个替换工作进程,保持服务可用(需应用支持)
  • restart:全部停止再启动,会中断请求 ty-reference

停止与删除

# 停止进程(保留注册信息) pm2 stop my-api # 彻底删除进程(从 PM2 注册表移除) pm2 delete my-api # 删除所有进程 pm2 delete all

💡 重要:同名进程必须通过 ID 删除,否则会删光所有同名进程!


四、日志管理

# 查看实时日志(合并 stdout + stderr) pm2 logs my-api # 只看错误日志 pm2 logs my-api --err # 只看标准输出 pm2 logs my-api --out # 清空日志文件(不停服务) pm2 flush # 启动时指定日志路径 pm2 start app.js --name "my-api" -o ./logs/out.log -e ./logs/error.log

📁 日志默认位置:~/.pm2/logs/


五、配置文件(推荐方式)

创建 ecosystem.config.js

// ecosystem.config.js module.exports = { apps: [{ name: 'blog', script: 'npx', args: 'next start -p 3000', cwd: '/var/www/blog', instances: 'max', exec_mode: 'cluster', autorestart: true, max_memory_restart: '1G', env: { NODE_ENV: 'production' } }] };

启动:

pm2 start ecosystem.config.js

✅ 优势:版本可控、团队共享、避免命令行拼写错误 ty-reference


六、持久化与开机自启

# 保存当前进程列表 pm2 save # 设置开机自启(按提示执行生成的命令) pm2 startup # 示例(Ubuntu): # sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u your-user --hp /home/your-user

🔁 服务器重启后,PM2 会自动恢复所有应用 ty-reference


七、高级操作

恢复已保存的进程

pm2 resurrect

查看资源使用

pm2 status # 简略状态 pm2 describe 0 # ID=0 的详细资源占用

更新 PM2 自身

pm2 update

杀掉所有 PM2 进程(慎用)

pm2 kill

八、常见问题速查

问题解决方案
同名进程无法区分?pm2 list 看 ID,通过 ID 操作
修改代码不生效?必须 pm2 reload 或重新 build(如 Next.js)
日志没输出?检查是否用了 console.log;避免用 npm run start 启动
内存泄漏?设置 max_memory_restart: '1G' 自动重启
开机不自启?执行 pm2 startup 并按提示运行生成的命令

九、最佳实践

  1. 始终使用唯一 --name
  2. 生产环境用 ecosystem.config.js
  3. 更新代码后用 pm2 reload 而非 restart
  4. 静态站点(如 Next.js)必须先 build 再启动
  5. 配合 nginx 做反向代理 + HTTPS
  6. 定期 pm2 save 保存进程状态

📚 参考:


✅ 将本文档保存为 pm2-cheatsheet.md,可作为团队标准操作指南。