pm2 使用

11月 27, 2025
DevOps, Frontend, Nodejs, Linux, ByAI

https://pm2.keymetrics.io/

PM2 使用指南#

1. 什么是 PM2#

PM2(Process Manager 2)是一个 Node.js 应用程序的进程管理器,它提供了负载均衡、自动重启、日志管理、监控等功能,帮助开发者更轻松地管理和部署 Node.js 应用。

PM2 可以看作是 Node.js 应用的“守护进程”,它能够确保应用在后台持续运行,即使在服务器重启后也能自动恢复。

2. 为什么使用 PM2#

  • 自动重启:当应用崩溃或出现异常时,PM2 会自动重启应用
  • 负载均衡:支持在多个 CPU 核心上运行应用,提高性能
  • 日志管理:集中管理应用日志,支持日志轮换和查看
  • 监控:实时监控应用的 CPU、内存、网络等资源使用情况
  • 零停机部署:支持无缝重启应用,不影响用户访问
  • 配置简单:提供简洁的命令行界面和配置文件
  • 支持多种应用类型:不仅支持 Node.js,还支持 Python、Ruby、PHP 等应用

3. 安装 PM2#

3.1 使用 npm 安装#

npm install -g pm2

3.2 验证安装#

pm2 --version

如果输出 PM2 的版本号,则表示安装成功。

4. 快速入门指南#

4.1 启动第一个应用#

# 创建一个简单的 Node.js 应用
cat > app.js << 'EOF'
const http = require('http');
const PORT = process.env.PORT || 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World from PM2!\n');
});

server.listen(PORT, () => {
  console.log(`Server running at http://localhost:${PORT}/`);
});
EOF

# 启动应用
pm2 start app.js --name "my-first-app"

# 查看应用状态
pm2 list

# 访问应用
curl http://localhost:3000

4.2 管理应用#

# 停止应用
pm2 stop my-first-app

# 重启应用
pm2 restart my-first-app

# 查看日志
pm2 logs my-first-app

# 删除应用
pm2 delete my-first-app

5. 基本概念#

5.1 进程(Process)#

PM2 管理的每个应用实例称为一个进程。每个进程都有一个唯一的 ID(PID)和名称。

5.2 应用(App)#

在 PM2 中,一个应用可以包含多个进程(通过集群模式)。应用有一个唯一的名称或 ID 用于识别。

5.3 集群模式(Cluster Mode)#

集群模式允许 PM2 在多个 CPU 核心上运行应用的多个实例,实现负载均衡和高可用性。

5.4 守护进程(Daemon)#

PM2 本身以守护进程的形式运行在后台,负责管理所有应用进程。

6. 常用命令#

6.1 启动应用#

基本启动#

pm2 start app.js

指定应用名称#

pm2 start app.js --name "my-app"

集群模式启动#

# 根据 CPU 核心数自动创建进程
pm2 start app.js -i max

# 指定进程数量
pm2 start app.js -i 4

启动其他类型应用#

# Python 应用
pm2 start script.py --interpreter python

# Ruby 应用
pm2 start script.rb --interpreter ruby

# Bash 脚本
pm2 start script.sh

6.2 查看应用状态#

查看所有应用#

pm2 list
# 或
pm2 ls
# 或
pm2 status

查看单个应用详情#

pm2 show my-app

6.3 停止应用#

停止单个应用#

# 通过名称停止
pm2 stop my-app

# 通过 ID 停止
pm2 stop 0

停止所有应用#

pm2 stop all

6.4 重启应用#

重启单个应用#

pm2 restart my-app

重启所有应用#

pm2 restart all

零停机重启#

pm2 reload my-app

6.5 删除应用#

删除单个应用#

pm2 delete my-app

删除所有应用#

pm2 delete all

6.6 日志管理#

查看应用日志#

# 查看所有日志
pm2 logs

# 查看单个应用日志
pm2 logs my-app

# 实时查看日志(类似 tail -f)
pm2 logs --follow

# 查看指定行数的日志
pm2 logs --lines 100

清空日志#

pm2 flush

6.7 监控应用#

实时监控#

pm2 monit

查看应用指标#

pm2 metrics

6.8 保存和恢复应用列表#

保存当前应用列表#

pm2 save

开机自启#

# 生成开机自启脚本
pm2 startup

# 移除开机自启
pm2 unstartup

恢复应用列表#

pm2 resurrect

7. 配置文件#

PM2 支持使用配置文件来管理应用,配置文件可以是 JSON、YAML 或 JavaScript 格式。

7.1 创建配置文件#

JSON 格式(ecosystem.config.json)#

{
  "apps": [
    {
      "name": "my-app",
      "script": "app.js",
      "instances": "max",
      "autorestart": true,
      "watch": false,
      "max_memory_restart": "1G",
      "env": {
        "NODE_ENV": "development"
      },
      "env_production": {
        "NODE_ENV": "production"
      }
    }
  ]
}

YAML 格式(ecosystem.config.yaml)#

apps:
  - name: my-app
    script: app.js
    instances: max
    autorestart: true
    watch: false
    max_memory_restart: 1G
    env:
      NODE_ENV: development
    env_production:
      NODE_ENV: production

7.2 使用配置文件启动应用#

# 启动所有应用
pm2 start ecosystem.config.json

# 启动指定环境
pm2 start ecosystem.config.json --env production

7.3 常用配置选项#

选项描述默认值
name应用名称脚本文件名
script启动脚本路径-
instances启动的进程数量1
autorestart应用崩溃时是否自动重启true
watch是否监听文件变化自动重启false
max_memory_restart内存使用达到阈值时重启-
env默认环境变量-
env_*特定环境的环境变量-
out_file标准输出日志文件路径~/.pm2/logs/[app-name]-out.log
error_file错误输出日志文件路径~/.pm2/logs/[app-name]-error.log
log_date_format日志时间格式YYYY-MM-DD HH:mm:ss

8. 高级功能#

8.1 日志轮换#

PM2 支持自动轮换日志文件,防止日志文件过大。

# 安装日志轮换模块
npm install -g pm2-logrotate

# 激活日志轮换
pm2 install pm2-logrotate

# 配置日志轮换
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 10

8.2 应用监控面板#

PM2 提供了一个基于 Web 的监控面板,用于查看应用的实时状态和日志。

# 安装监控面板
npm install -g pm2-web

# 启动监控面板
pm2-web

然后通过浏览器访问 http://localhost:8080 查看监控面板。

8.3 远程部署#

PM2 支持远程部署应用到多台服务器。

{
  "apps": [
    {
      "name": "my-app",
      "script": "app.js"
    }
  ],
  "deploy": {
    "production": {
      "user": "node",
      "host": ["192.168.1.1", "192.168.1.2"],
      "ref": "origin/master",
      "repo": "git@github.com:user/my-app.git",
      "path": "/home/node/my-app",
      "post-deploy": "npm install && pm2 reload ecosystem.config.json --env production"
    }
  }
}
# 部署应用
pm2 deploy ecosystem.config.json production

# 回滚到上一版本
pm2 deploy ecosystem.config.json production rollback

8.4 健康检查#

PM2 支持定期检查应用的健康状态。

{
  "apps": [
    {
      "name": "my-app",
      "script": "app.js",
      "health_check": {
        "url": "http://localhost:3000/health",
        "interval": 30000
      }
    }
  ]
}

9. 最佳实践#

9.1 生产环境建议#

  1. 使用集群模式:充分利用多核 CPU,提高性能和可靠性
  2. 设置内存限制:防止内存泄漏导致应用崩溃
  3. 配置日志轮换:避免日志文件过大
  4. 启用开机自启:确保服务器重启后应用自动恢复
  5. 使用配置文件:统一管理应用配置,便于版本控制
  6. 定期备份配置:使用 pm2 save 保存应用列表

9.2 开发环境建议#

  1. 启用 watch 模式:文件变化时自动重启应用,提高开发效率
  2. 使用不同的环境变量:通过 envenv_* 配置区分开发和生产环境
  3. 限制实例数量:开发环境不需要太多实例,节省资源

9.3 安全建议#

  1. 使用非 root 用户运行 PM2:提高系统安全性
  2. 限制应用权限:应用只拥有必要的权限
  3. 定期更新 PM2:修复已知漏洞
  4. 加密敏感配置:不要在配置文件中明文存储敏感信息

10. 常见问题#

10.1 PM2 进程占用过高内存#

  • 检查应用是否存在内存泄漏
  • 适当调整 max_memory_restart 参数
  • 考虑优化应用代码

10.2 应用无法启动#

  • 检查应用日志:pm2 logs my-app
  • 确保依赖已安装:npm install
  • 检查端口是否被占用

10.3 开机自启不生效#

  • 确保已正确执行 pm2 startup 命令
  • 检查系统服务状态
  • 查看系统日志获取详细错误信息

11. 总结#

PM2 是一个功能强大的 Node.js 进程管理器,它提供了丰富的功能来帮助开发者管理和部署应用。通过学习和使用 PM2,可以提高应用的可靠性、性能和可维护性。

本文介绍了 PM2 的基本概念、常用命令、配置文件和高级功能,希望能帮助你更好地使用 PM2 管理 Node.js 应用。

12. PM2 升级#

12.1 升级 PM2#

# 升级 PM2
npm install -g pm2

# 重启 PM2 守护进程
pm2 update

12.2 迁移旧版本配置#

如果从旧版本升级,建议保存当前应用列表,然后重新启动:

# 保存当前应用列表
pm2 save

# 升级 PM2
npm install -g pm2

# 重启 PM2 并恢复应用
pm2 update

13. 参考资料#

本文共 2376 字,上次修改于 Nov 27, 2025,以 CC 署名-非商业性使用-禁止演绎 4.0 国际 协议进行许可。

相关文章

» Serverless与边缘计算:从底层硬件到架构的深度解析

» WebRTC 介绍

» 使用 GDB 调试 Python

» Prisma 和 Drizzle 对比

» Shell Script to Check if a File Exists