pm2 使用
11月 27, 2025
PM2 使用指南#
1. 什么是 PM2#
PM2(Process Manager 2)是一个 Node.js 应用程序的进程管理器,它提供了负载均衡、自动重启、日志管理、监控等功能,帮助开发者更轻松地管理和部署 Node.js 应用。
PM2 可以看作是 Node.js 应用的“守护进程”,它能够确保应用在后台持续运行,即使在服务器重启后也能自动恢复。
2. 为什么使用 PM2#
- 自动重启:当应用崩溃或出现异常时,PM2 会自动重启应用
- 负载均衡:支持在多个 CPU 核心上运行应用,提高性能
- 日志管理:集中管理应用日志,支持日志轮换和查看
- 监控:实时监控应用的 CPU、内存、网络等资源使用情况
- 零停机部署:支持无缝重启应用,不影响用户访问
- 配置简单:提供简洁的命令行界面和配置文件
- 支持多种应用类型:不仅支持 Node.js,还支持 Python、Ruby、PHP 等应用
3. 安装 PM2#
3.1 使用 npm 安装#
npm install -g pm23.2 验证安装#
pm2 --version如果输出 PM2 的版本号,则表示安装成功。
4. 快速入门指南#
4.1 启动第一个应用#
# 创建一个简单的 Node.js 应用
cat > app.js << 'EOF'
const http = require('http');
const PORT = process.env.PORT || 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World from PM2!\n');
});
server.listen(PORT, () => {
console.log(`Server running at http://localhost:${PORT}/`);
});
EOF
# 启动应用
pm2 start app.js --name "my-first-app"
# 查看应用状态
pm2 list
# 访问应用
curl http://localhost:30004.2 管理应用#
# 停止应用
pm2 stop my-first-app
# 重启应用
pm2 restart my-first-app
# 查看日志
pm2 logs my-first-app
# 删除应用
pm2 delete my-first-app5. 基本概念#
5.1 进程(Process)#
PM2 管理的每个应用实例称为一个进程。每个进程都有一个唯一的 ID(PID)和名称。
5.2 应用(App)#
在 PM2 中,一个应用可以包含多个进程(通过集群模式)。应用有一个唯一的名称或 ID 用于识别。
5.3 集群模式(Cluster Mode)#
集群模式允许 PM2 在多个 CPU 核心上运行应用的多个实例,实现负载均衡和高可用性。
5.4 守护进程(Daemon)#
PM2 本身以守护进程的形式运行在后台,负责管理所有应用进程。
6. 常用命令#
6.1 启动应用#
基本启动#
pm2 start app.js指定应用名称#
pm2 start app.js --name "my-app"集群模式启动#
# 根据 CPU 核心数自动创建进程
pm2 start app.js -i max
# 指定进程数量
pm2 start app.js -i 4启动其他类型应用#
# Python 应用
pm2 start script.py --interpreter python
# Ruby 应用
pm2 start script.rb --interpreter ruby
# Bash 脚本
pm2 start script.sh6.2 查看应用状态#
查看所有应用#
pm2 list
# 或
pm2 ls
# 或
pm2 status查看单个应用详情#
pm2 show my-app6.3 停止应用#
停止单个应用#
# 通过名称停止
pm2 stop my-app
# 通过 ID 停止
pm2 stop 0停止所有应用#
pm2 stop all6.4 重启应用#
重启单个应用#
pm2 restart my-app重启所有应用#
pm2 restart all零停机重启#
pm2 reload my-app6.5 删除应用#
删除单个应用#
pm2 delete my-app删除所有应用#
pm2 delete all6.6 日志管理#
查看应用日志#
# 查看所有日志
pm2 logs
# 查看单个应用日志
pm2 logs my-app
# 实时查看日志(类似 tail -f)
pm2 logs --follow
# 查看指定行数的日志
pm2 logs --lines 100清空日志#
pm2 flush6.7 监控应用#
实时监控#
pm2 monit查看应用指标#
pm2 metrics6.8 保存和恢复应用列表#
保存当前应用列表#
pm2 save开机自启#
# 生成开机自启脚本
pm2 startup
# 移除开机自启
pm2 unstartup恢复应用列表#
pm2 resurrect7. 配置文件#
PM2 支持使用配置文件来管理应用,配置文件可以是 JSON、YAML 或 JavaScript 格式。
7.1 创建配置文件#
JSON 格式(ecosystem.config.json)#
{
"apps": [
{
"name": "my-app",
"script": "app.js",
"instances": "max",
"autorestart": true,
"watch": false,
"max_memory_restart": "1G",
"env": {
"NODE_ENV": "development"
},
"env_production": {
"NODE_ENV": "production"
}
}
]
}YAML 格式(ecosystem.config.yaml)#
apps:
- name: my-app
script: app.js
instances: max
autorestart: true
watch: false
max_memory_restart: 1G
env:
NODE_ENV: development
env_production:
NODE_ENV: production7.2 使用配置文件启动应用#
# 启动所有应用
pm2 start ecosystem.config.json
# 启动指定环境
pm2 start ecosystem.config.json --env production7.3 常用配置选项#
| 选项 | 描述 | 默认值 |
|---|---|---|
| name | 应用名称 | 脚本文件名 |
| script | 启动脚本路径 | - |
| instances | 启动的进程数量 | 1 |
| autorestart | 应用崩溃时是否自动重启 | true |
| watch | 是否监听文件变化自动重启 | false |
| max_memory_restart | 内存使用达到阈值时重启 | - |
| env | 默认环境变量 | - |
| env_* | 特定环境的环境变量 | - |
| out_file | 标准输出日志文件路径 | ~/.pm2/logs/[app-name]-out.log |
| error_file | 错误输出日志文件路径 | ~/.pm2/logs/[app-name]-error.log |
| log_date_format | 日志时间格式 | YYYY-MM-DD HH:mm:ss |
8. 高级功能#
8.1 日志轮换#
PM2 支持自动轮换日志文件,防止日志文件过大。
# 安装日志轮换模块
npm install -g pm2-logrotate
# 激活日志轮换
pm2 install pm2-logrotate
# 配置日志轮换
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 108.2 应用监控面板#
PM2 提供了一个基于 Web 的监控面板,用于查看应用的实时状态和日志。
# 安装监控面板
npm install -g pm2-web
# 启动监控面板
pm2-web然后通过浏览器访问 http://localhost:8080 查看监控面板。
8.3 远程部署#
PM2 支持远程部署应用到多台服务器。
{
"apps": [
{
"name": "my-app",
"script": "app.js"
}
],
"deploy": {
"production": {
"user": "node",
"host": ["192.168.1.1", "192.168.1.2"],
"ref": "origin/master",
"repo": "git@github.com:user/my-app.git",
"path": "/home/node/my-app",
"post-deploy": "npm install && pm2 reload ecosystem.config.json --env production"
}
}
}# 部署应用
pm2 deploy ecosystem.config.json production
# 回滚到上一版本
pm2 deploy ecosystem.config.json production rollback8.4 健康检查#
PM2 支持定期检查应用的健康状态。
{
"apps": [
{
"name": "my-app",
"script": "app.js",
"health_check": {
"url": "http://localhost:3000/health",
"interval": 30000
}
}
]
}9. 最佳实践#
9.1 生产环境建议#
- 使用集群模式:充分利用多核 CPU,提高性能和可靠性
- 设置内存限制:防止内存泄漏导致应用崩溃
- 配置日志轮换:避免日志文件过大
- 启用开机自启:确保服务器重启后应用自动恢复
- 使用配置文件:统一管理应用配置,便于版本控制
- 定期备份配置:使用
pm2 save保存应用列表
9.2 开发环境建议#
- 启用 watch 模式:文件变化时自动重启应用,提高开发效率
- 使用不同的环境变量:通过
env和env_*配置区分开发和生产环境 - 限制实例数量:开发环境不需要太多实例,节省资源
9.3 安全建议#
- 使用非 root 用户运行 PM2:提高系统安全性
- 限制应用权限:应用只拥有必要的权限
- 定期更新 PM2:修复已知漏洞
- 加密敏感配置:不要在配置文件中明文存储敏感信息
10. 常见问题#
10.1 PM2 进程占用过高内存#
- 检查应用是否存在内存泄漏
- 适当调整
max_memory_restart参数 - 考虑优化应用代码
10.2 应用无法启动#
- 检查应用日志:
pm2 logs my-app - 确保依赖已安装:
npm install - 检查端口是否被占用
10.3 开机自启不生效#
- 确保已正确执行
pm2 startup命令 - 检查系统服务状态
- 查看系统日志获取详细错误信息
11. 总结#
PM2 是一个功能强大的 Node.js 进程管理器,它提供了丰富的功能来帮助开发者管理和部署应用。通过学习和使用 PM2,可以提高应用的可靠性、性能和可维护性。
本文介绍了 PM2 的基本概念、常用命令、配置文件和高级功能,希望能帮助你更好地使用 PM2 管理 Node.js 应用。
12. PM2 升级#
12.1 升级 PM2#
# 升级 PM2
npm install -g pm2
# 重启 PM2 守护进程
pm2 update12.2 迁移旧版本配置#
如果从旧版本升级,建议保存当前应用列表,然后重新启动:
# 保存当前应用列表
pm2 save
# 升级 PM2
npm install -g pm2
# 重启 PM2 并恢复应用
pm2 update