加载中...

PM2是 Node.js 应用的生产级进程管理工具,支持后台运行、自动重启、日志管理、集群部署、性能监控等。
PM2 是 Node.js 应用的生产级进程管理工具,支持后台运行、自动重启、日志管理、集群部署、性能监控等。本文档整理最常用命令与最佳实践,适用于开发、测试及运维场景。
# 全局安装 npm install -g pm2 # 验证版本 pm2 --version
# 启动一个 Node.js 应用 pm2 start app.js # 指定进程名称(推荐!避免重复) pm2 start app.js --name "my-api"
# 启动 4 个实例 pm2 start app.js -i 4 # 按 CPU 核心数自动启动(推荐用于生产) pm2 start app.js -i max
# 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 update
pm2 kill
| 问题 | 解决方案 |
|---|---|
| 同名进程无法区分? | 用 pm2 list 看 ID,通过 ID 操作 |
| 修改代码不生效? | 必须 pm2 reload 或重新 build(如 Next.js) |
| 日志没输出? | 检查是否用了 console.log;避免用 npm run start 启动 |
| 内存泄漏? | 设置 max_memory_restart: '1G' 自动重启 |
| 开机不自启? | 执行 pm2 startup 并按提示运行生成的命令 |
--nameecosystem.config.jspm2 reload 而非 restartbuild 再启动nginx 做反向代理 + HTTPSpm2 save 保存进程状态📚 参考:
- PM2 官方文档
- CSDN 技术社区《PM2 常用命令与实用技巧速查表》ty-reference
✅ 将本文档保存为 pm2-cheatsheet.md,可作为团队标准操作指南。