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

【前后端】使用 PM2 管理 Node 进程

  • 什么是 PM2 ?
    pm2 是 node 进程管理工具,可以利用它来简化很多 node 应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,因为在工作中遇到服务器重启后,需要一个个去重新启动每个服务,这样不仅繁琐、效率低,而且容易遗忘开启一些服务。
  • PM2 特点
    内建负载均衡(使用 Node cluster 集群模块)
    后台运行
    0 秒停机重载
    具有 Ubuntu 和 CentOS 的启动脚本
    停止不稳定的进程(避免无限循环)
    控制台检测
    提供 HTTP API
    远程控制和实时的接口 API ( Nodejs 模块,允许和 PM2 进程管理器交互 )

使用

前言:我们在在运行node.js 本地后端程序时 , 终端关闭了,后端服务就会停止运行,这时候我们可以使用 PM2 来管理 node.js 进程,实现即使终端关闭,后台服务依旧能正常访问。

npm install -g pm2pm2 start app.js
pm2 start server.js --name 自定义别名

其他命令:
pm2 stop all 停止所有服务
pm2 list 显示所有进程信息
pm2 logs 显示所有进程日志
pm2 restart app_name | pid 重启进程/应用,写pid或者name
pm2 delete app_name | pid 删除进程
pm2 stop app_name | pid 结束进程
pm2 restart all 重启所有的进程
pm2 delete all 删除所有的进程
pm2 monit 监视每个node进程的CPU和内存的使用情况

  • 命令行参数
    可以在最基本的启动命令后面,添加一些参数选项
    常用的参数选项如下所示:
    –watch:监听应用目录的变化,一旦发生变化,自动重启。
    -i or --instance:启用多少个实例,可用于负载均衡,如果 -i 0 或者 -i max,则根据当前机器核数确定实例数目。
    –ignore-watch:排除监听的目录或文件,可以是特定的文件名,也可以是正则。
  • 配置文件
    如果我们使用命令行参数定义一些选项,那么每次启动进程时,都需要敲上一大堆的命令,非常繁琐;所以我们可以使用配置文件来将命令行参数进行配置。配置文件里的配置项跟命令行参数是基本一致的。
    如下所示 pm2 的配置文件 pm2.json ,我们 package.json 文件中配置启动命令 “pm2”: “pm2 start pm2.json” ,这样我们只需要运行 npm run pm2 就可以使用 pm2 启动我们的 express 项目,并且相关运行参数直接在 pm2.json 中配置好了:
{"apps": {"name": "express_project",       // 项目名          "script": "app.js",              // 执行文件"cwd": "./",                     // 根目录"args": "",                      // 传递给脚本的参数"interpreter": "",               // 指定的脚本解释器"interpreter_args": "",          // 传递给解释器的参数"watch": true,                   // 是否监听文件变动然后重启"ignore_watch": [                // 不用监听的文件"node_modules","public"],"exec_mode": "cluster_mode",     // 应用启动模式,支持 fork 和 cluster 模式"instances": "max",              // 应用启动实例个数,仅在 cluster 模式有效 默认为 fork"error_file": "./logs/app-err.log",         // 错误日志文件"out_file": "./logs/app-out.log",           // 正常日志文件"merge_logs": true,                         // 设置追加日志而不是新建日志"log_date_format": "YYYY-MM-DD HH:mm:ss",   // 指定日志文件的时间格式"min_uptime": "60s",                        // 应用运行少于时间被认为是异常启动"max_restarts": 30,                         // 最大异常重启次数"autorestart": true,                        // 默认为 true, 发生异常的情况下自动重启"restart_delay": "60"                       // 异常重启情况下,延时重启时间"env": {"NODE_ENV": "production",                // 环境参数,当前指定为生产环境"REMOTE_ADDR": ""               },"env_dev": {"NODE_ENV": "development",              // 环境参数,当前指定为开发环境"REMOTE_ADDR": ""},"env_test": {                               // 环境参数,当前指定为测试环境"NODE_ENV": "test","REMOTE_ADDR": ""}}
}
  • 高阶应用
    1、负载均衡
    可以使用 -i 参数配置集群数,实现负载均衡,相关命令如下,可以查看官网章节。
pm2 start app.js -i 3    // 开启三个进程
pm2 start app.js -i max  // 根据机器CPU核数,开启对应数目的进程 

2、日志查看
通过打开日志文件查看日志外,还可以通过 pm2 logs 来查看实时日志,这点有对于线上问题排查;

pm2 logs      // 查看所有进程的日志pm2 logs [Name]  //根据指定应用名查看应用日志pm2 logs [ID]   //根据指定应用ID查看应用日志

3、监控
使用以下命令,查看当前通过 pm2 运行的进程的状态, 出现动态监控界面:

pm2 monit

在这里插入图片描述

written by liaoyi

http://www.lryc.cn/news/601190.html

相关文章:

  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现标签条码一维码的检测(C#代码,UI界面版)
  • vue3.6更新哪些内容
  • 学习游戏制作记录(改进投掷剑的行为)7.27
  • Python 使用 asyncio 包处理并 发(避免阻塞型调用)
  • 创建属于自己的github Page主页
  • 【自动化运维神器Ansible】Ansible常用模块之archive模块详解
  • github上传本地项目过程记录
  • 【C语言网络编程基础】DNS 协议与请求详解
  • STM32的蓝牙通讯(HAL库)
  • 飞牛NAS本地化部署n8n打造个人AI工作流中心
  • 用 Flask 打造宠物店线上平台:从 0 到 1 的全栈开发实践
  • idea总结
  • JVM工具
  • 【优选算法】BFS解决FloodFill算法
  • Element表格单元格类名动态设置
  • VILA系列论文解读
  • 基于mnn架构在本地 c++运行llm与mllm模型
  • PostgreSQL AND OR 操作符详解
  • esp32s3创建rust工程 window成功mac
  • 前后端分离:架构模式与实践
  • Qt 分裂布局:QSplitter 使用指南
  • 四、搭建springCloudAlibaba2021.1版本分布式微服务-加入openFeign远程调用和sentinel流量控制
  • UNet 改进(38):融合多尺度输入与可变形卷积、门控特征融合的医学图像Unet分割网络
  • MySQL 事务和锁
  • 02人工智能中优雅草商业实战项目视频字幕翻译以及声音转译之以三方AI模型API制作方式预算-卓伊凡|莉莉
  • 车载诊断架构 ---面向售后的DTC应该怎么样填写?
  • KNN算法实战:手写数字识别详解
  • 前端基础班学习路线
  • Git+宝塔面板部署Hugo博客
  • net8.0一键创建辅助开发的个人小工具