# PM2-NodeJS进程守护程序

## 1. PM2 是什么？

PM2（Process Manager 2）是目前最主流的 Node.js 生产环境**进程管理器**。它自带负载均衡、日志管理、性能监控和热重载功能。

如果你只是用 `node app.js` 启动程序，一旦代码报错或者服务器重启，你的服务就直接挂了。PM2 的存在就是为了确保你的程序**7x24 小时永不掉线** 。

---

## 2. 安装步骤

PM2 是一个全局的 npm 包，安装非常简单：

```Bash
# 使用 npm 安装
npm install pm2@latest -g

# 或者使用 yarn
yarn global add pm2
```

安装完成后，输入 `pm2 -v` 能看到版本号就说明成功了。

---

## 3. 基础使用教程

### 启动应用

最简单的启动方式：

```Bash
pm2 start app.js
```

为了方便管理，通常我们会给进程**起个名字**：

```Bash
pm2 start app.js --name "my-server"
```

### 自动保存与开机自启

这是最实用的功能。配置后，即便服务器断电重启，你的服务也会自动拉起：

1. **保存当前列表**：`pm2 save`
    
2. **生成自启脚本**：`pm2 startup`（根据提示拷贝并执行那行生成的命令即可，新版本可能不需要再执行额外命令）。
    

### 常用管理命令

- **查看状态**：`pm2 list` (或者 `pm2 status`)，查看所有进程的 CPU 和内存占用。
    
- **停止/重启**：`pm2 stop [Name/ID]` 或 `pm2 restart [Name/ID]`。
    
- **删除进程**：`pm2 delete [Name/ID]`（停止并从列表中移除）。
    
- **实时日志**：`pm2 logs`（调试神技，能看到控制台输出的所有信息）。
    

---

## 4. 进阶神技

### 负载均衡模式 (Cluster Mode)

如果你的服务器是多核 CPU，你可以让 PM2 自动开启多个实例来分担压力：

Bash

```
# 启动 4 个实例
pm2 start app.js -i 4

# 或者根据 CPU 核心数自动分配
pm2 start app.js -i max
```

---

## 5. 最佳实践：使用配置文件

在项目根目录创建一个 `ecosystem.config.js`，以后只需要执行 `pm2 start` 就能按配置启动了：

JavaScript

```
module.exports = {
  apps : [{
    name: "my-app",
    script: "./app.js",
    instances: "max",       // 开启集群模式
    exec_mode: "cluster",
    watch: true,            // 监听代码变化自动重启
    env: {
      NODE_ENV: "development",
    },
    env_production: {
      NODE_ENV: "production",
    }
  }]
}
```

