如何利用pm2 管理 node 应用

1、pm2是什么?

pm2, 全称是process manager 2,是一个进程管理工具,维护一个进程列表,可以用它来管理node进程

官网地址:pm2.keymetrics.io/

node应用需要用 pm2 的日志管理、进程管理、负载均衡、性能监控等功能。

分别对应 pm2 logs、pm2 start/restart/stop/delete、pm2 start -i、pm2 monit等命令。

2、pm2可做什么事情?

  • 监听文件变化,自动重启程序
  • 支持性能监控
  • 负载均衡
  • 程序崩溃自动重启
  • 服务器重新启动时自动重新启动
  • 自动化部署项目

3、pm2安装

3.1 全局安装

ruby 复制代码
$ npm install pm2@latest -g
# or
$ yarn global add pm2

3.2 查看版本

ruby 复制代码
$ pm2 -v

4、pm2 基础命令使用

1. 启动

(1)启动应用程序

ruby 复制代码
$ pm2 start app.js
  • 您还可以启动任何类型的应用程序,如 bash 命令、脚本、二进制文件:
ruby 复制代码
$ pm2 start "npm run start"
$ pm2 start "ls -la"
$ pm2 start app.py

(2)启动并显示日志流

  • 要启动应用程序并显示日志流,使用--attach选项
  • 通过 Ctrl-C 退出时,该应用程序仍将在后台运行。
sql 复制代码
$ pm2 start app.js --attach

(3)传递参数

  • --之后传递的所有选项都将作为参数传递给应用程序
sql 复制代码
$ pm2 start app.js -- arg1 arg2

(4)配置文件

  • 当同时管理多个应用程序或必须指定多个选项时,可以使用配置文件。

执行 pm2 ecosystem,会创建一个配置文件:

apps 部分就是配置应用的,scripts 就是应用的启动路径:

  • 然后可以通过配置文件同时启动两个应用程序:
arduino 复制代码
$ pm2 start ecosystem.config.js

2、restart

ruby 复制代码
$ pm2 restart app_name        # 重启应用
$ pm2 restart all      		  # 重启所有应用
$ pm2 restart app1 app3 app4  # 重启多个应用

3、停止

  • stop 停止应用
ruby 复制代码
$ pm2 stop app_name        # 停止应用
$ pm2 stop [process_id]    # 停止应用
$ pm2 stop all             # 停止所有应用
$ pm2 stop app1 app3 app4  # 停止多个应用

4、删除

  • delete停止和删除应用
perl 复制代码
$ pm2 delete app_name     # 停止和删除应用 
$ pm2 delete all          # 停止和删除所有应用 

5、列表

  • 列出所有应用
shell 复制代码
$ pm2 list
# Or
$ pm2 [list|ls|l|status]
  • 指定您希望应用程序列出的顺序
shell 复制代码
$ pm2 list --sort name:desc
# Or
$ pm2 list --sort [name|id|pid|memory|cpu|status|uptime][:asc|desc]

6、资源仪表板

  • PM2 为您提供了一种监视应用程序资源使用情况的简单方法。

  • Ctrl+C可以退出。

    pm2 monit

7、显示应用详情

ruby 复制代码
$ pm2 show app_name

8、重置重启计数

css 复制代码
$ pm2 reset all

9、集群模式启动(可作为负载均衡)

arduino 复制代码
// -i 表示 number-instances 实例数量
// 指定max或者0,表示PM2将自动检测可用CPU的核数量(如下,使用的cpu为8核),当然可以自己指定数量
pm2 start start.js -i max

5、Dockerfile中使用pm2 去代替node

如下Nest为例: 之前我们写的 Nest 的 dockerfile 是这样的:

bash 复制代码
# build stage
FROM node:18 as build-stage

WORKDIR /app

COPY package.json .

RUN npm config set registry https://registry.npmmirror.com/

RUN npm install

COPY . .

RUN npm run build

# production stage
FROM node:18 as production-stage

COPY --from=build-stage /app/dist /app
COPY --from=build-stage /app/package.json /app/package.json

WORKDIR /app

RUN npm install --production

EXPOSE 3000

CMD ["node", "/app/main.js"]

现在要改成这样:

使用pm2-runtime?

pm2 与 pm2-runtime的区别:

pm2-runtime是为 Docker 容器而设计的,它将应用程序保持在前台,从而使容器保持运行

pm2专为在后台发送或运行应用程序的正常使用而设计

docker 容器的生命周期就是 CMD 或 entrypoint 的生命周期。在这种情况下,使用 pm2 start 容器将在运行过程后立即死亡,导致无法访问,所以我们需要采用 docker-runtime start 的方式来启动。

6、通过pm2配置文件来自动部署项目

相关推荐
wordbaby8 分钟前
TanStack Router 实战:如何优雅地实现后台管理系统的“多页签” (TabList) 功能
前端·react.js
凌览20 分钟前
2026年1月编程语言排行榜|C#拿下年度语言,Python稳居第一
前端·后端·程序员
码事漫谈22 分钟前
【深度解析】为什么C++有了malloc,还需要new?
后端
user861581857815425 分钟前
Element UI 表格 show-overflow-tooltip 长文本导致闪烁的根本原因与解法
前端
不会写前端的小丁28 分钟前
前端首屏渲染性能优化小技巧
前端
晴虹29 分钟前
lecen:一个更好的开源可视化系统搭建项目--组件和功能按钮的权限控制--全低代码|所见即所得|利用可视化设计器构建你的应用系统-做一
前端·后端·低代码
Java编程爱好者31 分钟前
Java 并发编程:JUC 包中原子操作类的原理和用法
后端
爱分享的鱼鱼32 分钟前
Pinia 深度解析:现代Vue应用状态管理最佳实践
前端·后端
花归去33 分钟前
echarts 柱状图包含右侧进度
开发语言·前端·javascript
JOEH6033 分钟前
🚀 别再用 Future.get() 傻等了!CompletableFuture 异步编排实战,性能提升 300%!
后端·程序员