【每日一题NO.67】说下你对PM2的理解

前端印记

共 2336字,需浏览 5分钟

 ·

2021-10-25 04:57

话说,这是我携程面试遇到的真题呀……太难了啊。

pm2

pm2官网[1]

pm2 是一个带有负载均衡功能的 node 应用的进程管理器

我们都知道 node.js 是单进程执行的,当程序因出现错误而死掉之后需要能够自动重启,这时候就需要 pm2 了。

其他进程管理工具如 forever 等。

主要特性

  • 启动多子进程,充分使用 CPU
  • 子进程之间负载均衡
  • 0 秒重启
  • 界面友好
  • 提供进程交互接口

他是依据什么重启服务的?

pm2 采用 心跳检测 查看子进程是否处于活跃状态:
每隔数秒向子进程发送心跳包,子进程如果不回复,那么调用 kill 杀死这个进程,然后再重新 cluster.fork() 一个新的进程。
子进程可以监听到错误事件,这个时候可以发送消息给主进程,请求杀死自己,并且主进程此时重新调用 cluster.fork() 一个新的子进程。

拥有的能力

  • 日志管理:有两种日志,pm2 系统日志与管理的进程日志,默认会把进程的控制台输出记录到日志。
  • 负载均衡pm2 可以通过创建共享同一服务器端口的多个子进程来扩展你的应用程序。这样做还允许以零秒停机时间重新启动应用程序。
  • 终端监控:可以在终端中监控应用程序并检查应用程序运行状况(如:CPU 使用率、使用的内存、请求分钟数等等)。
  • SSH 部署:自动部署,避免逐个在所有服务器中进行 ssh
  • 静态服务:支持静态服务器功能。
  • 支持开发调试模式:非后台运行,执行pm2-dev[2]命令:pm2-dev start app.js

常用命令

启动服务

启动指定应用

pm2 start  [options]

举例:

pm2 start binary-file -- --port 1520

启动一个 node 程序

启动 app.js 应用

pm2 start app.js

启动进程并指定应用的程序名

启动程序,并设置应用 name 为 my-api

pm2 start app.js --name my-api

添加进程监视

监听模式启动,当文件发生变化,自动重启。

指定程序名的情况下

pm2 start app.js --name 程序名 --watch

未指定程序名的情况下

pm2 start app.js --watch

列出所有进程

pm2 list


效果展示:


简写:

pm2 ls

从进程列表中删除进程

pm2 delete [appname] | id

指定进程名删除

pm2 delete app

指定进程 id 删除

pm2 delete 0

如果修改了应用配置行为,需要先删除应用,重新启动后方才会生效, 如修改脚本入口文件

删除进程列表中所有进程

关闭并删除应用

pm2 delete all

查看某个进程具体情况

pm2 describe app

查看进程的资源消耗情况

监控各个应用进程 cpumemory 使用情况

pm2 monit

重启进程

同时杀死并重启所有进程,短时间内服务不可用,生成环境后慎用

pm2 restart app.js 

重启所有进程

pm2 restart all 

重新启动所有进行程, 0 秒重启,始终保持至少一个进程在运行

pm2 reload app.js 

以群集横式重新加载所有应用程序

pm2 gracefulReload all 

查看进程日志

根据指定应用名查看应用志

pm2 log3 [Name]

根据指定应用 ID 查看应用日志

pm2 logs [ID] 

查看所有进程的日志

pm2 logs all 

显示应用程序详细信息

显示指定应用详情

pm2 show [options]

根据 name 查看

pm2 show [Name] 

根据 id 查看

pm2 show [ID] 

停止指定应用

停止指定应用

pm2 stop  [options] 

停止所有应用

pm2 stop all 

根据应用名停止指定应用

pm2 stop [AppName] 

根据应用 id 停止指定应用

pm2 stop [ID] 

杀掉 pm2 管理的所有进程

pm2 kill 

启动静态服务器

将目录 dist 作为静态服务器根目录,端口为 8080

pm2 serve ./dist 8080 

集群模式启动

启用群集模式(自动负载均衡):

  • -i :表示 number-instances 实例数量
  • max :表示 pm2 将自动检测可用 CPU 的数量 可以自己指定数量
pm2 start app.js -i max 

开发模式启动,即不启用后台运行

pm2-dev start app.js

设置 pm2 开机自启

开启启动设置,执行命令后按照提示输入指定代码即可

pm2 startup centos # 此处是 `CentOS` 系统,其他系统替换最后一个选项。

系统的可选项: ubuntu , centos , redhat , gentoo , systemd , darwin , amazon

保存设置

pm2 save

参考资料

[1]

pm2官网: https://pm2.keymetrics.io/

[2]

pm2-dev: https://pm2.keymetrics.io/docs/usage/pm2-development/


所有《每日一题》的 知识大纲索引脑图 整理在此:https://www.yuque.com/dfe_evernote/interview/everyday
你也可以点击文末的 “阅读原文” 快速跳转


END
愿你历尽千帆,归来仍是少年。
浏览 32
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报