• pm2在Windows环境中的使用


    pm2 进程管理工具可以Windows操作系统上运行,当一台Windows电脑上需要运行多个进程时,或者运维时需要运行多个进程以提供服务时。可以使用pm2,而不再是使用脚本。

    1. 使用PM2管理进程

    1.1. 启动PM2项目

    1.1.1. 直接启动项目

    参数说明:

    • --watch:监听应用目录的变化,一旦发生变化,自动重启。如果要精确监听、不见听的目录,最好通过配置文件。
    • -i --instances:启用多少个实例,可用于负载均衡。如果-i 0或者-i max,则根据当前机器核数确定实例数目。
    • --ignore-watch:排除监听的目录/文件,可以是特定的文件名,也可以是正则。比如--ignore-watch="test node_modules "some scripts""
    • -n --name:应用的名称。查看应用信息的时候可以用到。
    • -o --output :标准输出日志文件的路径。
    • -e --error :错误输出日志文件的路径。
    • --interpreter :the interpreter pm2 should use for executing app (bash, python…)。比如你用的coffee script来编写应用。

    pm2支持直接运行server.js启动项目,如下:

    在这里插入图片描述## 1.2. 查看应用列表(查看当前机器执行的所有进程)

    1.2.1. 查看所有应用的情况

    pm2 list

    在这里插入图片描述

    1.2.2. 查看某一个应用的情况

    # pm2 show app_name|app_id
    pm2 show 0
    
    pm2 show hbbuild_gq
    
    
    # pm2 describe app_name|app_id
    pm2 describe 0
    
    pm2 describe hbbuild_gq
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    1.3. 重启、停止、删除

    1.3.1. 重启

    # pm2 show app_name|app_id|app.ks
    pm2 restart hbbuild_gq.js
    
    pm2 restart hbbuild_gq
    
    pm2 restart 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1.3.2. 停止

    #停止特定的应用。可以先通过`pm2 list`获取应用的名字(--name指定的)或者进程id。
    
    pm2 stop app_name|app_id
    
    #如果要停止所有应用,可以
    
    pm2 stop all
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1.3.3. 删除

    # 删除某一个应用
    pm2 delete app_name|app_id
    
    # 删除所有的应用
    pm2 delete all
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.4. 日志

    pm2 log 0
    
    • 1

    在这里插入图片描述

    1.4.1 查看最新的日志

    pm2 logs 0 --lines --raw  
      
    # 例如:  
      
    pm2 logs 0 --lines 3
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    1.5. 负载均衡

    命令如下,表示开启三个进程。如果-i 0,则会根据机器当前核数自动开启尽可能多的进程。

    pm2 start hbbuild_gq.js -i 3 # 开启三个进程
    pm2 start hbbuild_gq -i max # 根据机器CPU核数,开启对应数目的进程
    
    • 1
    • 2

    在这里插入图片描述

    1.6. 内存使用超过上限自动重启

    如果想要你的应用,在超过使用内存上限后自动重启,那么可以加上--max-memory-restart参数。(有对应的配置项)

    pm2 start hbbuild_gq.js --max-memory-restart 20M
    
    • 1

    1.7. 保存/冻结进程

    在重新启动时保存/冻结进程列表

    pm2 save
    
    • 1

    2. 总结

    微服务平台,总是表现为多个服务多个机器分布式运行,资源和算力拓展了,管理等复杂度提升了。
    可能两个服务登录不同机器,查看日志还容易,当服务到达成百上千的时候问题就很明显。
    所以,我们需要(孵化)像pm2这样的工具,提供下面的便利:
    开发和运维上的便利

    • 无缝接入服务管理

    这个对NodeJS应用来说,几乎是神器,pm2 原生地支持了应用程序管理,提供了命令管理查看用户应用。
    举Springboot开发的微服务平台为例,开发应用的同学需要引入SpringCloud等组件进行服务发现,注册到注册中心。本人也使用过春天全家桶来制作微服务平台,再简化还得定制一个通用SpringBoot Starter,理念也是类似的!

    • 统一管理日志工作台

    特别是在微服务环境下,多个服务,使用pm2 monit,可以很方便的一个monit工作台切换微服务日志。大型平台那就需要做日志搜索了,比较成百上千个服务在pm2 monit窗口切换也不现实,这也是pm2缺少的地方!
    不过,pm2还有一个在线版的Keymetics 做专业微服务平台监控管理的工作台(收费)。

    • 更容易的应用弹性伸缩

    上面启动后台服务的时候,加了一个-i参数,指定数量就能启动多worker服务。
    虽然在NodeJS中还是单进程多线程,但是这个参数化实例拓展,这个设计是很有指导意义的!

    • 服务启动/恢复操作的封装,原子性

    我们使用pm2 start/stop appname即可,而非开发进入多个应用目录手动打node app.js。再者pm2会常驻应用保证应用不掉线,这个设计也是值得参考。

  • 相关阅读:
    milvus数据管理-压缩数据
    C++ 语言学习 day11 复习(3)
    【翻译工具】如何复活谷歌翻译之二
    自动化测试系列 —— UI测试
    图文手把手教程--ESP32 MQTT连接阿里云生活物联网平台
    vscode与vue/react环境配置
    6.< tag-动态规划和打家劫舍合集(树形DP)>lt.198.打家劫舍 + lt.213. 打家劫舍 II + lt.337. 打家劫舍 III dbc
    SpringCloud学习笔记(十四)Sentinel 实现熔断与限流
    JUC并发编程与源码分析笔记04-说说Java“锁”事
    计算机毕业设计之java+ssm在线心理评测与咨询系统
  • 原文地址:https://blog.csdn.net/a13407142317/article/details/134492612