• 喜欢前端以及PHP的朋友们可以加PHP同好会QQ群 点击加入qq群
  • 最近在写一个项目---"小A微信托管平台",大家可以去帮忙测试一下!功能在不断完善中,敬请关注!点击进入
  • 本站使用了PHP8.1与HTTP2.0协议,速度简直超级快有木有?

使用pm2进程管理工具来管理nodejs进程

Linux Mr.Adam 4年前 (2020-11-19) 1465次浏览 已收录 0个评论

使用 pm2 进程管理工具来管理 nodejs 进程

使用 pm2 进程管理工具来管理 nodejs 进程

对于后台进程的管理,常用的工具是 crontab,可用于两种场景:定时任务和常驻脚本。关于常驻脚本,今天介绍一款更好用的工具:pm2,基于 nodejs 开发的进程管理器,适用于后台常驻脚本管理,同时对 node 网络应用有自建负载均衡功能。
官方的说法,pm2 是一个带有负载均衡功能的 Node 应用的进程管理器,个人认为,并不准确,因为 pm2 支持多种语言,只是对于除 node 之外的其他进程无负载均衡的能力。

以下部分内容摘录于知乎
知乎地址

pm2 特点:

说一些 pm2 有哪些优点好处呢?

01. 支持进程行为配置 ,即可以通过配置,实现对 pm2 管理应用的一些基础属性更新修改,如应用名称,启动模式等;

02. 支持集群模式,支持负载均衡,但因采用 nodejs 的 cluster 模块实现,仅适用于 nodejs 进程;

03. 支持 source map,此项针对 js, source map 文件是 js 源文件的信息文件,里面存储着源文件的位置信息;

04. 支持热重启;

05. 支持部署工作流,pm2 可依据测试环境和线上环境自动部署到不同的服务器,同时运行在不同配置下;

06. 支持监听重启,在文件更新等情况下可实现进程自动重启;

07. 支持 linux 的 startup 进程启动,startup 是指系统 boot, 进程自启动,如 centos 的 chkconfig;

08. 日志管理,两种日志,pm2 系统日志与管理的进程日志,默认会把进程的控制台输出记录到日志中;

09. 命令自动补全功能,个人感觉这个功能意义不大,而且尝试了一下,没有原生的 linux 命令自动补全反应敏捷;

10. 监控功能,pm2 monit 监控 cpu 和 memory 使用情况,keymetrics 监控更为详细;

11. 支持开发调试模式,非后台运行,pm2-dev start

12. 支持 pm2 模块开发,实现 pm2 的功能扩展;

13. keymetrics 监控,比 pm2 monit 监控更为详细友好,通过 web 页面展示;

14. 最大内存重启,设置最大内存限制,超过限制自动重启;

15. 编程 API,提供 API 供开发者通过编程方式灵活管理进程;

以上简要概述了 pm2 进程管理工具的特点。

pm2 常用命令

常用命令通常都是比较简单。下面列举一些 pm2 常用的管理命令
pm2 start [options] 启动指定应用,如 pm2 start index.js --name httpServer
pm2 stop [options] 停止指定应用,如 pm2 stop httpServer
pm2 reload|restart [options] 重启指定应用,如 pm2 restart httpServer
pm2 show [options] 显示指定应用详情,如 pm2 show httpServer
pm2 delete [options] 删除指定应用,如 pm2 delete httpServer,如果修改应用配置行为,最好先删除应用后,重新启动方才生效,如修改脚本入口文件;
pm2 kill 杀掉 pm2 管理的所有进程;
pm2 logs 查看指定应用的日志,即标准输出和标准错误;
pm2 monit 监控各个应用进程 cpu 和 memory 使用情况;

pm2 常用配置

pm2 配置方式

命令行方式

pm2 start index.js --name HttpServer --interpreter node

此处通过命令的选项配置应用名称为 httpServer,index.js 脚本文件解释器为 node,更多选项可查看 pm2 –help 获取;

配置文件方式

pm2 配置文件方式支持 yml 与 json 格式

processes.yml 文件

apps:
  - script:./api.js
    name:'api-app'
    instances:4
    exec_mode:cluster
  - script:./worker.js
    name:'worker'
    watch:true
    env:
       NODE_ENV:development
    env_production:
       NODE_ENV:production    

processes.json

{
  apps:[
     {
       name:'worker',
       script:'./worker.js',
       watch:true,
       env:{
          "NODE_ENV":"development"
       },
       env_production:{
          "NODE_ENV":"production"
       }
     },
     {
       name:"api-app",
       script:"./api.js",
       instances:4,
       exec_mode:"cluster"
     },
     ...
  ]
}

配置项如下:

配置项 说明
name 应用进程名称
script 启动脚本路径
cwd 应用启动的路径
args 传递给脚本的参数
interpreter 指定的脚本解释器
interpreter_args 传递给解释器的参数
instances 应用启动实例个数,仅在 cluster 模式有效,默认为 fork;
exec_mode 应用启动模式,支持 fork 和 cluster 模式
watch 监听重启,启用情况下,文件夹或子文件夹下变化应用自动重启
ignore_watch 忽略监听的文件夹,支持正则表达式
max_memory_restart 最大内存限制数,超出自动重启
env 环境变量,object 类型,如{“NODE_ENV”:”production”, “ID”: “42”};
log_date_format 指定日志日期格式,如 YYYY-MM-DD HH:mm:ss;
error_file 记录标准错误流,$HOME/.pm2/logs/XXXerr.log),代码错误可在此文件查找
out_file 记录标准输出流,$HOME/.pm2/logs/XXXout.log),如应用打印大量的标准输出,会导致 pm2 日志过大
min_uptime 应用运行少于时间被认为是异常启动
max_restarts 最大异常重启次数,即小于 min_uptime 运行时间重启次数
autorestart 默认为 true, 发生异常的情况下自动重启
cron_restart crontab 时间格式重启应用,目前只支持 cluster 模式
force 默认 false,如果 true,可以重复启动一个脚本。pm2 不建议这么做
restart_delay 异常重启情况下,延时重启时间

fork 与 cluster 启动模式

pm2 启动进程支持 2 种方式:fork 与 cluster,关于它们的区别,个人认为就是 node api 的 child_process.fork 与 cluster 的区别.
fork 不可以启动多个实例进程,cluster 可以启动多个实例进程.
fork 模式可以应用于其他语言,如 php,java,perl,bash 等,而 cluster 只能应用于 node.
fork 不支持定时重启,cluster 支持定时重启.
定时重启也就是配置中的 cron_restart 配置项.

pm2 的监控

pm2 的监控有 2 种方式:

cli 方式监控

pm2 monit 是专门用来监控的命令,监控项包括 cpu 与内存.
缺点 monit 展示内容太过粗糙,不够详细.

pm2 list 展示当前所有 pm2 的管理项目

可以查看出每个进程的运行状态。

如果需要更详细的监控内容,对于 cli 而言一般都是可以实现的。

这种监控方式的缺点:

a. 不够直观,需要自己去执行命令并分析结果;

b. 不便于多台服务器的应用监控管理;

由于这些缺点,就需要一种更好的方式去监控我们的应用

keymetrics 监控

keymetrics 监控是 PM2 的开发者的开发和维护的一款监控工具,安装配置非常容易.

keymetrics 监控平台

日志

日志系统对于任意应用而言,通常都是必不可少的一个辅助功能。pm2 的相关文件默认存放于$HOME/.pm2/目录下,其日志主要有两类:

稳定运行建议

pm2 日常应用(以 linux 为例)

1.安装 pm2
npm install -g pm2

2.在 linux 服务器上开启 pm2 开机启动(重要)
执行该命令之后会在当前登录用户下设置 systemd 启动脚本,并自动执行 systemctl enable pm2-{user}
pm2 startup systemd
设置过 pm2 开机启动之后则 pm2 可以通过 systemd 进行控制

3.保存 pm2 设置
pm2 save

以下是 pm2 的官方文档,比较详细,推荐阅读!
pm2 详细文档


小 A 空间 , 版权所有丨如未注明转载 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明使用 pm2 进程管理工具来管理 nodejs 进程
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址