# 使用 PM2 管理进程

URL: https://caijiao.org/express/chapter10/1-pm2
Source: docs/express/chapter10/1-pm2.md
Description: 本章节将介绍如何使用 PM2 作为进程管理工具来管理和优化 Express 应用的运行，确保应用在生产环境中高效、稳定地运行。PM2 提供了进程守护、负载均衡、日志管理等功能，帮助开发者更好地管理 Node.js 应用。

在生产环境中，确保 Express 应用的高可用性和稳定性是至关重要的。PM2 是一个流行的进程管理工具，它能够帮助开发者管理和监控 Node.js 应用的进程，提供自动重启、负载均衡、日志管理等功能。本章节将介绍如何使用 PM2 来管理 Express 应用。

## 1. 什么是 PM2？

PM2 是一个高效的进程管理器，用于运行、监控和管理 Node.js 应用。它提供了以下关键功能：

- **进程守护**：如果应用崩溃或停止，PM2 会自动重启应用，确保应用持续运行。
- **负载均衡**：在多核 CPU 上，PM2 可以启动多个进程来实现负载均衡。
- **日志管理**：PM2 会自动收集应用的输出日志，便于后续查看和分析。
- **监控**：PM2 提供进程状态监控和应用性能指标。
- **集群模式**：PM2 支持启动 Node.js 应用的多实例，以充分利用服务器的多核处理能力。

## 2. 安装 PM2

PM2 可以通过 npm 安装。在全局范围内安装 PM2，以便在任何目录下使用：

```bash
npm install pm2@latest -g
````

安装完成后，可以通过 `pm2` 命令来启动、停止和管理应用。

## 3. 启动 Express 应用

假设你已经有一个 Express 应用，例如 `app.js` 文件。使用 PM2 启动应用非常简单：

```bash
pm2 start app.js
```

PM2 会启动 `app.js` 文件，并将其作为一个进程管理起来。如果应用崩溃或停止，PM2 会自动重启它。

### 3.1 指定应用名称

为了更方便地管理多个应用，你可以为应用指定一个名称：

```bash
pm2 start app.js --name "express-app"
```

这样，在使用 PM2 管理多个应用时，你可以通过名称来区分和操作每个进程。

### 3.2 启动多个实例（负载均衡）

PM2 支持多核负载均衡，你可以通过启动多个应用实例来充分利用服务器的多核处理能力：

```bash
pm2 start app.js -i max  # 启动与 CPU 核心数量相等的进程
```

或者，你也可以指定实例数量：

```bash
pm2 start app.js -i 4  # 启动 4 个进程
```

在启动多个实例时，PM2 会自动处理负载均衡，确保流量均匀分配到各个进程。

## 4. 查看应用状态

使用 `pm2 list` 命令查看当前所有进程的状态：

```bash
pm2 list
```

这个命令会显示所有由 PM2 管理的应用的基本信息，包括应用名称、ID、状态、内存使用量、CPU 使用量等。

## 5. 查看日志

PM2 会自动收集应用的日志信息，你可以通过以下命令查看日志：

```bash
pm2 logs
```

你还可以查看特定应用的日志：

```bash
pm2 logs express-app
```

PM2 会显示应用的输出日志，包括标准输出和错误日志。

## 6. 监控应用

PM2 提供了强大的监控功能，可以实时查看应用的 CPU 和内存使用情况。通过以下命令启动实时监控：

```bash
pm2 monit
```

这将打开一个实时的监控界面，展示所有管理进程的性能指标。

## 7. 停止和重启应用

### 7.1 停止应用

使用 `pm2 stop` 命令停止应用：

```bash
pm2 stop express-app
```

### 7.2 重启应用

使用 `pm2 restart` 命令重启应用：

```bash
pm2 restart express-app
```

这将优雅地重启应用，保持其进程 ID 不变。

### 7.3 删除应用

如果你不再需要某个应用，可以通过 `pm2 delete` 删除它：

```bash
pm2 delete express-app
```

## 8. 保存和恢复进程列表

PM2 允许你保存当前的进程列表，并在重启服务器后恢复这些进程。这样，即使服务器重启了，PM2 也会自动重新启动所有进程。

### 8.1 保存进程列表

```bash
pm2 save
```

这会将当前的进程列表保存到配置文件中。

### 8.2 恢复进程列表

如果你重启了服务器，可以使用以下命令恢复进程：

```bash
pm2 resurrect
```

## 9. 配置 PM2 自启动

为了确保服务器重启后 PM2 会自动启动你的应用，可以使用 `pm2 startup` 配置自启动。根据你的操作系统，PM2 会自动生成一个启动脚本。

### 9.1 配置自启动

```bash
pm2 startup
```

然后按照提示的命令执行（通常是 `sudo` 权限）。执行完毕后，PM2 会自动配置系统启动脚本，以便在系统重启时启动所有进程。

### 9.2 保存进程配置

```bash
pm2 save
```

这样，PM2 会将当前的进程列表和配置保存到启动脚本中，确保在系统重启后自动恢复。

## 10. 总结

在本章节中，我们学习了如何使用 PM2 管理 Express 应用：

1. **安装 PM2**：通过 npm 安装 PM2，并在全局范围内使用。
2. **启动应用**：使用 `pm2 start` 启动应用，并支持负载均衡和多实例运行。
3. **查看状态和日志**：使用 `pm2 list` 查看应用状态，使用 `pm2 logs` 查看应用日志。
4. **进程管理**：使用 `pm2 stop`、`pm2 restart`、`pm2 delete` 管理进程。
5. **保存和恢复进程列表**：使用 `pm2 save` 和 `pm2 resurrect` 保存和恢复进程配置。
6. **PM2 自启动**：配置 PM2 在服务器重启后自动启动应用。

PM2 提供了强大的进程管理功能，能够帮助开发者轻松地管理和监控 Express 应用，确保应用的高可用性和稳定性。在生产环境中，PM2 是一个不可或缺的工具。
