# PM2 管理 Node 应用指南

URL: https://caijiao.org/posts/35
Source: docs/posts/35.md
Description: 本文详细介绍了如何使用 PM2 管理 Node.js 应用，包括安装、启动、管理、日志、开机自启和高级配置。

## 1. 什么是 PM2

[PM2](/pm2/) 是一个 Node.js 应用进程管理器，它可以让你：

- **守护进程**：应用崩溃自动重启
- **负载均衡**：支持 Cluster 模式，多核充分利用
- **日志管理**：集中管理应用日志
- **开机自启**：系统重启后自动启动应用
- **监控**：实时查看 CPU/内存使用情况

## 2. 安装 PM2

```bash
# 全局安装 PM2
npm install pm2 -g

# 查看版本
pm2 -v
````

## 3. 启动 Node 应用

假设你的应用入口是 `app.js`：

```bash
# 启动应用
pm2 start app.js

# 给进程起个名字
pm2 start app.js --name my-app
```

**常用选项**：

- `--watch`：监控文件变化，自动重启
- `-i max`：开启 Cluster 模式，充分利用 CPU 核心数

```bash
pm2 start app.js -i max --name my-app
```

## 4. 查看进程状态

```bash
# 查看所有进程状态
pm2 list

# 查看详细信息
pm2 show my-app
```

## 5. 管理进程

```bash
# 停止应用
pm2 stop my-app

# 重启应用
pm2 restart my-app

# 删除应用
pm2 delete my-app
```

## 6. 日志管理

```bash
# 查看实时日志
pm2 logs my-app

# 查看错误日志
pm2 logs --err

# 查看输出日志
pm2 logs --out

# 日志文件路径
pm2 info my-app
```

## 7. 开机自启

```bash
# 生成自启动脚本
pm2 startup

# 保存当前进程列表
pm2 save
```

## 8. 高级功能

- **Cluster 模式**：

```bash
pm2 start app.js -i 4 --name my-app
```

- **环境变量管理**：

```bash
pm2 start app.js --name my-app --env production
```

- **监控面板**：

```bash
pm2 monit
```

- **JSON 配置启动**：
  创建 `ecosystem.config.js`：

```js
module.exports = {
  apps: [
    {
      name: "my-app",
      script: "./app.js",
      instances: "max",
      autorestart: true,
      watch: false,
      env: {
        NODE_ENV: "development"
      },
      env_production: {
        NODE_ENV: "production"
      }
    }
  ]
};
```

启动：

```bash
pm2 start ecosystem.config.js --env production
```

## 9. 总结

PM2 的核心价值：

- **稳定运行**：崩溃自动重启
- **日志集中管理**
- **高可用**：Cluster 模式负载均衡
- **易于运维**：开机自启和监控
