部署 Node.js 应用之 PM2

什么是 pm2

PM2 是一个非常流行的 Node.js 应用进程管理工具,它帮助你管理和保持 Node.js 应用的高可用性。PM2 提供了进程守护、日志管理、负载均衡等功能,非常适合生产环境使用。

安装 pm2

bash 复制代码
npm install pm2 -g

验证是否安装成功

bash 复制代码
pm2 --version

PM2 常用命令

启动 Node.js 应用(启动打包后的)

复制代码
pm2 start app.js

停止 Node.js 应用(启动打包后的)

复制代码
pm2 stop app.js

停止 Node.js 应用,使用 pid 停止

复制代码
pm2 stop <pid>

重启 Node.js 应用

复制代码
pm2 restart app.js

重启 Node.js 应用,使用 pm2 应用名称的方式

复制代码
pm2 restart <name>

查看所有正在运行的应用

复制代码
pm2 list

查看应用状态

复制代码
pm2 status

删除 Node.js 应用

bash 复制代码
pm2 delete <入口js文件>
pm2 delete <pm2应用名称>

查看日志

bash 复制代码
pm2 logs
pm2 logs <pm2应用名称>         # 查看某个应用的日志

清空日志

bash 复制代码
pm2 flush

PM2 配置文件

pm2.json

bash 复制代码
{
    "apps": [{
            "name": "app1",                             // 应用名称
            "script": "./app.js",                       // 启动脚本
            "instances": "max",                         // 启动实例数量
            "exec_mode": "cluster",                     // 使用 cluster 模式
            "watch": true,                              // 启用文件监控(自动重启)
            "env": {                                    // 开发环境变量
                "NODE_ENV": "development"
            },
            "env_production": {                         // 生产环境变量
                "NODE_ENV": "production"
            },
            "log_file": "./logs/app.log",                // 日志文件路径
            "error_file": "./logs/error.log",            // 错误日志文件路径
            "log_date_format": "YYYY-MM-DD HH:mm:ss"     // 日志日期格式
        },
        {
            "name": "app2",
            "script": "./app2.js",
            "instances": 1,
            "exec_mode": "fork",
            "watch": false
        }
    ]
}

参数说明:

apps 是一个数组,其中包含要启动的多个应用配置。每个应用可以有以下字段:

  • name: 应用的名称,用于标识应用。
  • script: 启动应用的脚本文件路径,通常是 Node.js 应用的入口文件,例如 app.js。
  • instances: 指定应用实例的数量。每个实例都将启动一个独立的 Node.js 进程。你可以使用它来并行处理多个请求,从而提升应用的性能,尤其是在多核 CPU 上,例如:
  • exec_mode: 执行模式,值为 fork(单进程)或 cluster(多进程)。以便更好地利用多核 CPU。当instances设置为多个时,fork 相当于独立的进程,没有多进程间的共享内存。cluster 自动为这些进程提供负载均衡,每个进程会共享主进程。
  • watch: 是否监视文件变化,并在文件变化时自动重启应用。在开发环境中非常有用。
  • env: 定义开发环境中的环境变量,通常用于开发模式。
  • env_production: 定义生产环境中的环境变量,用于生产模式。
  • log_file: 设置日志文件路径,记录应用的输出日志。例如:"./logs/app.log"
  • out_file:设置标准输出日志文件路径。例如:"./logs/app-out.log"
  • error_file: 设置错误日志文件的路径。例如:"./logs/app-error.log"
  • merge_logs: 设置是否合并多个实例的日志输出。默认值为 false
  • log_date_format: 设置日志输出的日期格式。例如:YYYY-MM-DD HH:mm:ss
  • autorestart:当应用崩溃或退出时是否自动重启。默认值为 true
  • min_uptime: 设置应用稳定运行的最小时间(以毫秒为单位)。如果应用崩溃或重启时间短于该时间,PM2 会认为它失败并停止重启。
  • max_restarts: 设置最大重启次数。如果应用在启动时多次失败(超过该次数),PM2 会停止重启。
  • max_memory_restart:应用的内存限制(以 MB 或 GB 为单位)。当应用的内存使用超过此限制时,PM2 会重启应用。例如:512M
  • pid_file:设置应用的 PID 文件路径。例如:"./logs/app.pid"
  • kill_timeout:设置在 PM2 终止应用时,等待进程停止的超时时间(毫秒)。默认为 1600 毫秒。
  • cron_restart:设置一个 Cron 表达式,根据定时任务重启应用。例如:"0 0 * * *"
  • interpreter:指定应用程序运行时使用的解释器
  • interpreter_args:为 Node.js 解释器传递的额外参数。
  • node_args:设置启动应用时传递给 Node.js 进程的命令行参数。

使用 pm2.json 文件 启动应用

bash 复制代码
pm2 start pm2.json

停止所有通过 pm2.json 文件启动的应用

bash 复制代码
pm2 stop pm2.json

如果你修改了 pm2.json 文件,可以使用以下命令重新加载配置

bash 复制代码
pm2 reload pm2.json
相关推荐
玉林路扛把子7 分钟前
基于当前项目通过npm包形式暴露公共组件
前端·npm·node.js
程序猿小D42 分钟前
第30节 Node.js C/C++ 插件
c语言·c++·后端·node.js·vim
爱分享的程序员42 分钟前
Nodejs特训专栏-基础篇:2. JavaScript核心知识在Node.js中的应用
前端·javascript·node.js
爱分享的程序员1 小时前
Nodejs特训专栏-基础篇:1. Node.js环境搭建与项目初始化详细指南
前端·node.js
军军君012 小时前
基于Springboot+UniApp+Ai实现模拟面试小工具一:系统需求分析及设计
前端·vue.js·人工智能·spring boot·后端·uni-app·node.js
liuyang___9 小时前
日期的数据格式转换
前端·后端·学习·node.js·node
贩卖纯净水.10 小时前
webpack其余配置
前端·webpack·node.js
程序猿小D13 小时前
第24节 Node.js 连接 MongoDB
数据库·mongodb·npm·node.js·编辑器·vim·express
无知好快_Sosoo浪浪13 小时前
Node.js版本管理
node.js
不想说话的麋鹿16 小时前
《NestJS 实战:RBAC 系统管理模块开发 (三)》:角色权限分配与数据一致性
前端·后端·node.js