PM2
PM2 是一个带有内置负载均衡器的 Node.js 应用程序进程管理器。它可以让应用程序永远保持活跃,无需停机即可重新加载它们,并简化常见的系统管理任务。
1. 基础使用
1.1 安装
# 全局安装 PM2
npm install pm2 -g
# 更新 PM2
pm2 update
1.2 基本命令
# 启动应用
pm2 start app.js
# 启动应用并命名
pm2 start app.js --name "my-app"
# 启动 npm 命令
pm2 start npm -- start
# 集群模式启动
pm2 start app.js -i max # 根据CPU核心数启动最大进程数
pm2 start app.js -i 4 # 启动4个进程
# 监控文件变化自动重启
pm2 start app.js --watch
# 列出所有进程
pm2 list
# 显示进程详细信息
pm2 show <app-name>
# 显示日志
pm2 logs
pm2 logs <app-name>
# 重启应用
pm2 restart <app-name>
# 停止应用
pm2 stop <app-name>
# 删除应用
pm2 delete <app-name>
# 清空所有日志
pm2 flush
2. 配置文件
2.1 生态系统文件
// ecosystem.config.js
module.exports = {
apps: [{
name: "app",
script: "./app.js",
instances: "max",
exec_mode: "cluster",
watch: true,
env: {
NODE_ENV: "development",
},
env_production: {
NODE_ENV: "production",
}
}, {
name: 'worker',
script: 'worker.js'
}]
}
// 使用配置文件
pm2 start ecosystem.config.js // 使用开发环境配置
pm2 start ecosystem.config.js --env production // 使用生产环境配置
2.2 高级配置选项
module.exports = {
apps: [{
name: "app",
script: "./app.js",
// 进程配置
instances: 4,
exec_mode: "cluster",
// 重启配置
autorestart: true,
max_restarts: 10,
// 内存配置
max_memory_restart: "1G",
// 日志配置
log_date_format: "YYYY-MM-DD HH:mm:ss",
error_file: "logs/error.log",
out_file: "logs/out.log",
merge_logs: true,
// 监控配置
watch: ["server", "client"],
ignore_watch: ["node_modules", "logs"],
watch_options: {
followSymlinks: false
},
// 环境变量
env: {
NODE_ENV: "development",
PORT: 3000
},
env_production: {
NODE_ENV: "production",
PORT: 80
}
}]
}
3. 集群模式
3.1 负载均衡
# 启动集群
pm2 start app.js -i max # 根据 CPU 核心数启动最大进程数
pm2 start app.js -i 0 # 同上
pm2 start app.js -i 4 # 启动4个进程
# 扩展/收缩集群
pm2 scale app +3 # 增加3个进程
pm2 scale app 2 # 设置为2个进程
# 重新加载集群
pm2 reload app # 零停机重新加载
3.2 集群配置
module.exports = {
apps: [{
script: 'app.js',
instances: 4,
exec_mode: 'cluster',
instance_var: 'INSTANCE_ID',
increment_var: 'PORT',
env: {
PORT: 3000
}
}]
}
4. 监控和日志
4.1 监控
# 启动监控界面
pm2 monit
# 查看仪表板
pm2 plus # 启动 web 界面监控
# 状态
pm2 status
# 性能指标
pm2 prettylist