当前位置: 首页 > news >正文

@Linux进程管理工具 - PM2全面指南

文章目录

  • PM2 进程管理
    • 1. PM2 简介
      • 主要特性
    • 2. 安装 PM2
      • 前提条件
      • 全局安装
      • 验证安装
    • 3. 基本使用
      • 启动应用
      • 常用命令
      • 集群模式
    • 4. 高级配置
      • 生态系统文件
      • 常用配置选项
    • 5. 日志管理
      • 查看日志
      • 日志配置
      • 日志轮转
    • 6. 监控与性能
      • 实时监控
      • 生成性能报告
      • Web 仪表板
    • 7. 开机自启动
      • 生成启动脚本
      • 保存当前进程列表
      • 恢复保存的列表
    • 8. 部署工作流
      • 部署配置
      • 部署命令
    • 9. 常用技巧
      • 环境变量管理
      • 使用 JSON 应用声明
      • 远程管理
    • 10. 故障排除
      • 常见问题
      • 调试命令
    • 11. 安全最佳实践
    • 12. 与其他工具集成
      • 与 Nginx 集成
      • 与 Docker 集成
      • 与 CI/CD 集成
    • 13. 资源与参考

PM2 进程管理

1. PM2 简介

PM2 (Process Manager 2) 是一个先进的、生产级的 Node.js 应用进程管理器,具有负载均衡功能。它允许您保持应用程序永久活跃,无需停机即可重新加载它们,并简化常见的系统管理任务。

主要特性

  • 进程守护:保持应用程序始终运行,崩溃后自动重启
  • 负载均衡:内置负载均衡器,可轻松实现集群模式
  • 零停机重启:支持热重载,更新代码时不中断服务
  • 日志管理:集中收集和管理应用程序日志
  • 监控:实时监控应用程序资源消耗
  • 启动脚本:生成系统启动脚本,保证服务器重启后应用自动运行
  • 生态系统:支持多应用管理,可配置复杂部署方案

2. 安装 PM2

前提条件

  • Node.js 环境 (推荐 LTS 版本)
  • npm 或 yarn 包管理器

全局安装

npm install pm2 -g
# 或
yarn global add pm2

验证安装

pm2 --version

3. 基本使用

启动应用

pm2 start app.js
# 或指定应用名称
pm2 start app.js --name "my-app"

常用命令

命令描述
pm2 start app.js启动应用
pm2 list列出所有应用
`pm2 show <idname>`
`pm2 stop <idname>`
`pm2 restart <idname>`
`pm2 delete <idname>`
pm2 logs显示日志
pm2 monit监控应用
pm2 flush清空日志

集群模式

启动集群(利用所有CPU核心):

pm2 start app.js -i max

4. 高级配置

生态系统文件

创建配置文件:

pm2 ecosystem

这会生成一个 ecosystem.config.js 文件,示例内容:

module.exports = {apps: [{name: "app",script: "./app.js",instances: "max",autorestart: true,watch: false,max_memory_restart: "1G",env: {NODE_ENV: "development",},env_production: {NODE_ENV: "production",}}]
};

使用配置文件:

pm2 start ecosystem.config.js
pm2 start ecosystem.config.js --env production

常用配置选项

选项描述
name应用名称
script启动脚本路径
args传递给脚本的参数
interpreter解释器 (如 node, python 等)
instances实例数 (数字或 “max”)
exec_mode执行模式 (“cluster” 或 “fork”)
watch是否监听文件变化自动重启
ignore_watch忽略监听的文件/目录
max_memory_restart内存超过限制时重启
env环境变量
log_date_format日志日期格式
error_file错误日志路径
out_file输出日志路径
merge_logs是否合并日志
cron_restart定时重启

5. 日志管理

查看日志

# 查看所有应用日志
pm2 logs# 查看特定应用日志
pm2 logs <app-name># 查看最后100行日志
pm2 logs --lines 100# 实时日志
pm2 logs --real-time

日志配置

在生态系统文件中:

{...log_date_format: "YYYY-MM-DD HH:mm Z",error_file: "/var/log/my-app/err.log",out_file: "/var/log/my-app/out.log",combine_logs: true,...
}

日志轮转

PM2 内置了日志轮转功能,需要安装 pm2-logrotate 模块:

pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30
pm2 set pm2-logrotate:compress true

6. 监控与性能

实时监控

pm2 monit

生成性能报告

pm2 report

Web 仪表板

pm2 plus

(需要注册 PM2 Plus 账户)

7. 开机自启动

生成启动脚本

pm2 startup

这会输出一个命令,按照提示执行即可。

保存当前进程列表

pm2 save

恢复保存的列表

pm2 resurrect

8. 部署工作流

PM2 支持高级部署功能,可以在多服务器上部署应用。

部署配置

在生态系统文件中添加 deploy 部分:

module.exports = {apps: [...],deploy: {production: {user: "node",host: ["server1.com", "server2.com"],ref: "origin/master",repo: "git@github.com:user/repo.git",path: "/var/www/production","post-deploy": "npm install && pm2 reload ecosystem.config.js --env production",env: {NODE_ENV: "production"}}}
}

部署命令

# 首次部署
pm2 deploy ecosystem.config.js production setup# 后续部署
pm2 deploy ecosystem.config.js production# 回滚到上一个版本
pm2 deploy ecosystem.config.js production revert 1

9. 常用技巧

环境变量管理

# 设置环境变量
pm2 set pm2:env {"NODE_ENV":"production","PORT":3000}# 获取环境变量
pm2 env <app-id>

使用 JSON 应用声明

pm2 start app.json

示例 app.json:

{"name": "my-app","script": "app.js","instances": 2,"env": {"NODE_ENV": "development"},"env_production": {"NODE_ENV": "production"}
}

远程管理

# 连接到远程 PM2
pm2 interact <public_key> <secret_key> <machine_name># 断开连接
pm2 interact stop

10. 故障排除

常见问题

  1. 应用不断重启

    • 检查内存限制 (max_memory_restart)
    • 检查应用错误日志
    • 尝试 pm2 logs <app-id> 查看详细错误
  2. PM2 命令无响应

    • 尝试 pm2 kill 然后重新启动应用
    • 检查 ~/.pm2/pm2.log 获取 PM2 自身日志
  3. 启动脚本不工作

    • 确保正确执行了 pm2 startuppm2 save
    • 检查系统服务是否正常运行 (systemctl status pm2-<user>)

调试命令

# 显示 PM2 守护进程日志
pm2 l# 显示详细调试信息
pm2 --version --details# 重置所有 PM2 状态
pm2 kill

11. 安全最佳实践

  1. 不要使用 root 运行 PM2

    sudo chown -R $USER:$USER ~/.pm2
    
  2. 保护生态系统文件

    • 不要将敏感信息(如密码)直接写入配置文件
    • 使用环境变量或密钥管理工具
  3. 限制日志访问权限

    chmod 600 /var/log/my-app/*.log
    
  4. 定期更新 PM2

    npm update pm2 -g
    

12. 与其他工具集成

与 Nginx 集成

示例 Nginx 配置:

server {listen 80;server_name example.com;location / {proxy_pass http://localhost:3000;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;}
}

与 Docker 集成

示例 Dockerfile:

FROM node:14WORKDIR /usr/src/appCOPY package*.json ./RUN npm installCOPY . .RUN npm install pm2 -gCMD ["pm2-runtime", "ecosystem.config.js", "--env", "production"]

与 CI/CD 集成

示例 GitHub Actions 工作流:

name: Node.js CIon: [push]jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: Use Node.jsuses: actions/setup-node@v1with:node-version: '14.x'- run: npm install- run: npm test- name: Deploy to productionif: github.ref == 'refs/heads/master'run: |ssh user@server "cd /var/www/production && git pull && pm2 reload ecosystem.config.js --env production"

13. 资源与参考

  • PM2 官方文档
  • PM2 GitHub 仓库
  • Node.js 最佳实践

通过本指南,您应该能够全面了解 PM2 的功能并有效地在生产环境中部署和管理 Node.js 应用。PM2 的强大功能可以显著提高应用的可靠性和可维护性,是 Node.js 开发者必备的工具之一。

http://www.dtcms.com/a/330139.html

相关文章:

  • 理财 - 基金
  • 【React】use-immer vs 原生 Hook:谁更胜一筹?
  • PromptPilot — AI 自动化任务的下一个环节
  • 云蝠智能 Voice Agent 多模型接入技术架构与实践
  • 微信小程序实现导航至目的地
  • 腾讯位置商业授权微信小程序关键词输入提示
  • python自学笔记7 可视化初步
  • 并发编程(八股)
  • epoll模型解析
  • 数据科学与计算:从基础到实践的全面探索
  • 深度学习(6):参数初始化
  • 动画相关 属性动画+animateToImmediately+ImageAnimator帧动画组件+模态转场
  • 【C++】哈希表的实现
  • EUDR的核心内容,EUDR认证的好处,EUDR意义
  • web开发,在线%射击比赛管理%系统开发demo,基于html,css,jquery,python,django,三层mysql数据库
  • lesson37:MySQL核心技术详解:约束、外键、权限管理与三大范式实践指南
  • SpringBoot工程妙用:不启动容器也能享受Fat Jar的便利
  • CAD 的 C# 开发中,对多段线(封闭多边形)内部的点进行 “一笔连线且不交叉、不出界
  • ECC的原理、背景、工作机制和数学基础
  • 升级Gradle版本后,安卓点击事件使用了SwitchCase的情况下,报错无法使用的解决方案
  • Query通过自注意力机制更新(如Transformer解码器的自回归生成)的理解
  • Unity3D 中纯 Shader 的双色纹理的平铺计算与实现
  • 二次筛法Quadratic Sieve因子分解法----C语言实现
  • [git diff] 对比检查变更 | 提交前复审 | 版本回退
  • SQL 核心操作全解析:从基础查询到关联关系实战
  • Spring Boot项目通过Feign调用三方接口的详细教程
  • 在es中安装kibana
  • 雨量系列篇一:翻斗雨量传感器与压电雨量传感器的区别是什么
  • java法定退休年龄计算器
  • Thinkphp(GUI)漏洞利用工具,支持各版本TP漏洞检测,命令执行,Getshell