PM2 是 Node.js 生态中最流行的进程管理工具,能让 Node.js 应用在后台持久运行、崩溃自动重启、开机自启,并提供日志聚合与集群模式。无论是小型 API 服务还是 Express/Koa 应用,PM2 都是部署到 VPS 的首选守护方案。
本文要点
- 安装 Node.js 与 PM2
- 启动、停止、重载应用
- 配置开机自启
- 查看日志与日志切割
- 集群模式充分利用多核 CPU
安装 Node.js 与 PM2
推荐用 NodeSource 的官方脚本安装指定版本的 Node.js(以 LTS v22 为例):
# 安装 Node.js 22 LTS
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs
node --version
npm --version
# 全局安装 PM2
npm install -g pm2
pm2 --version推荐使用 nvm 管理版本
若需要在同一台服务器跑多个不同 Node.js 版本的项目,推荐安装 nvm 来切换版本,PM2 配合 nvm 也能正常工作。
启动应用
假设你的应用入口文件是 /opt/myapp/app.js:
# 最简单的启动方式
pm2 start /opt/myapp/app.js --name myapp
# 指定环境变量与工作目录
pm2 start /opt/myapp/app.js \
--name myapp \
--cwd /opt/myapp \
--env production
# 查看运行状态
pm2 status
pm2 show myapp常用操作命令
| 命令 | 说明 |
|---|---|
| pm2 start app.js --name myapp | 启动应用 |
| pm2 stop myapp | 停止应用 |
| pm2 restart myapp | 重启应用 |
| pm2 reload myapp | 零停机热重载(用于更新代码) |
| pm2 delete myapp | 从 PM2 列表中移除 |
| pm2 list | 查看所有应用状态 |
| pm2 monit | 实时监控面板 |
使用 ecosystem.config.js 文件管理
对于正式项目,推荐用配置文件替代命令行参数:
// /opt/myapp/ecosystem.config.js
module.exports = {
apps: [{
name: "myapp",
script: "./app.js",
cwd: "/opt/myapp",
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: "300M",
env_production: {
NODE_ENV: "production",
PORT: 3000,
},
}],
};
# 使用配置文件启动
pm2 start ecosystem.config.js --env production配置开机自启
PM2 生成 systemd 开机启动配置只需两步:
# 生成并应用开机启动命令(按提示执行输出的命令)
pm2 startup
# 保存当前进程列表,下次开机时自动恢复
pm2 savesave 不能忘
pm2 startup 只是注册了服务,pm2 save 才把当前应用列表写入磁盘。两条都执行后,重启服务器验证一次,确认应用自动恢复。
日志管理
# 实时查看日志
pm2 logs myapp
# 查看最近 100 行
pm2 logs myapp --lines 100
# 清空日志
pm2 flush
# 安装日志切割模块(防止日志无限增长)
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 50M
pm2 set pm2-logrotate:retain 7集群模式
对于 CPU 密集型或高并发的 HTTP 服务,集群模式能充分利用多核 CPU:
# instances: "max" 表示使用所有 CPU 核心
pm2 start app.js --name myapp -i max
# 或在 ecosystem.config.js 中设置
// instances: "max" // 所有核心
// instances: 4 // 指定 4 个进程零停机部署
更新代码后,执行 pm2 reload myapp(非 restart)可以逐个重启进程,整个过程中服务不中断,实现零停机部署。
小结
- PM2 = 守护 + 自启 + 日志 + 集群,一站式解决
- ecosystem.config.js 让配置可版本控制、可复用
- 开机自启必须执行 pm2 startup && pm2 save 两步
- pm2-logrotate 防止日志撑满磁盘
常见问题
pm2 restart 和 pm2 reload 有什么区别?
restart 会先停止所有进程再全部重启,有短暂中断;reload 逐个重启进程,整个过程服务持续可用,适合生产环境更新代码。
进程崩溃了 PM2 会自动重启吗?
会。PM2 的 autorestart 默认为 true,进程异常退出后会自动重启;可在 ecosystem 配置中设置 max_restarts 限制最大重启次数,避免持续崩溃循环。
如何查看某个应用的错误日志?
执行 pm2 logs myapp 会同时显示 stdout 和 stderr;错误日志文件路径可通过 pm2 show myapp 查看(通常在 ~/.pm2/logs/)。