浅析PM2实用入门指南

简介: PM2 是一个守护进程管理器,可以用它来管理你的node进程,负责所有正在运行的进程,并查看node进程的状态,也支持性能监控,负载均衡等功能。使用起来也是非常简单

PM2 是一个守护进程管理器,可以用它来管理你的node进程,负责所有正在运行的进程,并查看node进程的状态,也支持性能监控,负载均衡等功能。使用起来也是非常简单。

一 特性

  • 日志管理:收集日志,并有插件配合进行管理
  • 负载均衡:减轻服务器压力
  • 终端监控:可以在终端中监控您的应用程序并检查应用程序运行状况
  • 静态服务:支持静态服务器功能
  • 集成管理:多个进程,不同环境,统一配置
  • SSH部署:自动部署,避免在所有服务器中进行ssh
  • 0秒重载:维护升级不需要停机
  • 提供HTTP API

二 安装

我们可以通过 NPM 或 Yarn 安装,在安装之前需要安装 Node.js 和 NPM,您可以使用 NVM 来管理Node环境。

npm install pm2@latest -g
# or
yarn global add pm2

网络异常,图片无法展示
|

查看pm2的安装路径

whereis pm2

网络异常,图片无法展示
|

由于系统使用nvm版本管理node,所以前面会有版本号,如果是普通的安装,格式应该为

/usr/local/bin/pm2

再查看下版本号

pm2 -v

网络异常,图片无法展示
|

出现上图就表示已经安装成功,接下来就可以上手体验了。

三 上手使用

最近由于小程序云开发规则的调整,正好把之前用云开发的项目重构,这里我们用 Nest 项目讲解。关于 Nest 教程,翻看历史记录可以找到。Nest 是基于 Node.js 服务器端应用程序的 WEB 应用框架,可以很轻松的编写 API 接口。

pm2已经安装成功,接下来就是把 Nest 开发的项目部署到服务器上。

首先把整个项目(不是打包后的,至于为什么请看【Nest教程】Nest项目部署在ubuntu服务器)通过 FTP 上传到服务器指定目录,如果你的项目在git库上,可以直接clone到服务器上。

进入项目根目录安装依赖

npm install

如果安装了yarn,可以使用yarn

yarn

a安装完成,直接打包项目

npm run build

生成 dist 文件

网络异常,图片无法展示
|

如果不放心的话,可以先通过npm run dev 运行下,看项目是是否正常在打包。

1 启动项目

我的项目启动文件是 main.js。用 PM2 启动方式如下

pm2 start main.js

网络异常,图片无法展示
|

查看项目启动结果

pm2 list

网络异常,图片无法展示
|
网络异常,图片无法展示
|

出现上图,并且status为online,则代表启动成功。

2 查看日志
pm2 logs

网络异常,图片无法展示
|
网络异常,图片无法展示
|

此时屏幕上会同时输出 error log 和 实时 log , 同时会打印出日志文件的路径。类似:

网络异常,图片无法展示
|

如果想查询指定日志,用 tail 命令即可。

tail -f /root/.pm2/logs/main-out.log

网络异常,图片无法展示
|

日志其他操作

# 显示流中的所有进程日志
pm2 logs --raw
# 清空所有日志文件
pm2 flush
# 重新加载所有日志
pm2 reloadLogs

网络异常,图片无法展示
|

但是pm2自带的日志功能是不支持自动分割的,这就会导致随之时间的推移,我们的日志文件会越来越大,不但会影响性能,在后期排查问题的时候也会很麻烦,我们可以使用pm2-logrotate插件来解决上面的问题。

安装也是非常简单

pm2 install pm2-logrotate

网络异常,图片无法展示
|

安装完成后就可以通过pm2 list命令查看模块列表了

网络异常,图片无法展示
|

通过 pm2 conf pm2-logratate 可以查看详细的配置

pm2 conf pm2-logratate

网络异常,图片无法展示
|

pm2-logrotate 具体配置说明:

网络异常,图片无法展示
|

比如我们可以设置日志文件大小为1KB

pm2 set pm2-logratate:max_size 1K

网络异常,图片无法展示
|

retain是日志文件的最大总数,比如上面的默认值是30,当我们的日志文件超过30个之后,插件会自动将最早的日志文件删除掉,我们就不用花时间再去整理日志文件了,省了我们的不少时间。

切记:修改完不要忘记重启服务,否则不会生效。

pm2 restart all

网络异常,图片无法展示
|

当大小达到1KB就会自动分割,格式如:main-out__2022-07-29_11-00-32.log 的文件。

pm2日志文件储存在 /root/.pm2/logs 文件夹下。

网络异常,图片无法展示
|

3 停止项目

我们可以根据项目启动进程的name和id来停止项目。

pm2 stop www
# or 
pm2 stop 0

网络异常,图片无法展示
|

4 重启项目

用name和id来重启项目

pm2 restart www
# or 
pm2 restart 0

网络异常,图片无法展示
|

5 删除项目

同样的删除项目也是可以根据name和id来删除的

pm2 delete www
# or 
pm2 delete 0

网络异常,图片无法展示
|

四 高级用法

有些用法可能不是很常用(对于我来说),但确实是比较好用的功能。

1 重命名

pm2常规启动都是使用默认name,默认name就是你启动的文件名,如果说启动一两个项目,到还很好分辨,如果项目很多,并且都使用默认名字,那就见鬼了,因此,我们可以通过--name来设置

如果项目没有启动,可以通过

pm2 start main.js --name newName

如果已经启动,则可以通过

pm2 restart main.js --name newName

网络异常,图片无法展示
|

2 监听

在功能升级时,我们需要更新替换文件,然后重启项目,pm2也提供了--watch 功能帮我们完成自动重启

pm2 start main.js --watch

在使用这一参数的时候,有两个需要注意的地方:

  1. 请在程序所在的目录执行启动命令,否则将会监视的不是程序所在目录,而是你执行目录当前所在的目录。
  2. 开启 --watch 参数后,就算你手动停止进程(不删除),进程也会在文件发生改变后自动启动,解决该问题的方法是在停止进程的时候加入如下参数:
pm2 stop 0 --watch

这样只要当前目录下有任意文件发生改变,pm2都会尝试重启进程。

网络异常,图片无法展示
|

3 集群模式

只需要一行,即可实现多线程

pm2 start main.js -i max

网络异常,图片无法展示
|

适时调整集群数量也是很方便

# 加
pm2 scale main +3
# 改为两个
pm2 scale main 2
4 开机自启

运行 pm2 save,会将当前pm2所运行的应用保存在/root/.pm2/dump.pm2下

运行 pm2 startup,即在/etc/init.d/目录下生成pm2-root的启动脚本,且自动将pm2-root设为服务。

当开机重启时,运行pm2-root服务脚本,并且到/root/.pm2/dump.pm2下读取应用并启动。

网络异常,图片无法展示
|

5 环境切换

PM2 通过 env 选项声明多个环境配置,规则如下 env 为默认的环境配置(生产环境),env_dev、env_test则分别是开发、测试环境。可以通过process.env.REMOTE_ADDR等来读取配置中的环境变量。

网络异常,图片无法展示
|

启动指定环境也很简单

网络异常,图片无法展示
|

6 帮助

通过 -- help 命令可以看到 PM2 支持的子命令还是蛮多的,可以自己查询用法,也可以去官网查看详细文档。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
JSON 运维 JavaScript
进程管理工具PM2在python项目中的使用
说到进程管理,后端和运维的同学都不陌生。生产项目以及一些脚本任务都需要进行进程管理。现在市场上用得最多的当属supervisor了,但是它只能运行在 Unix-Like 的系统上,也就是说supervisor不能再windows上运行。 我们这里说的是另外一个进程管理工具PM2,PM2不仅仅适用于Unix-Like系统,同样适用于windows系统。这点对于开发者来说也是个福音,下面我们来说说PM2的简单使用。
795 0
进程管理工具PM2在python项目中的使用
|
3月前
|
JavaScript Java 开发工具
Python+Appium2.0的APP自动化环境搭建
Python+Appium2.0的APP自动化环境搭建
111 0
|
负载均衡 监控 Ubuntu
学习Pm2 第一章
pm2 是 node 进程管理工具,可以利用它来简化很多 node 应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,因为在工作中遇到服务器重启后,需要一个个去重新启动每个服务,这样不仅繁琐、效率低,而且容易遗忘开启一些服务。
95 0
学习Pm2 第一章
|
JSON 负载均衡 监控
PM2 工具的认识与使用
PM2是node进程管理工具。简化node应用管理的繁琐任务,如性能监控,自动重启,负载均衡
175 0
|
负载均衡 监控
如何使用pm2 管理应用,进来一看便知
如何使用pm2 管理应用,进来一看便知
135 0
如何使用pm2 管理应用,进来一看便知
SAP PM 入门系列14 – PM模块与其它模块的集成
SAP PM 入门系列14 – PM模块与其它模块的集成
SAP PM 入门系列14 – PM模块与其它模块的集成
|
搜索推荐 JavaScript 数据挖掘
SAP PM 入门系列9 – PM模块的User-Exits & BADIs
SAP PM 入门系列9 – PM模块的User-Exits & BADIs
|
JavaScript
SAP PM 入门系列8 - PM事务代码
SAP PM 入门系列8 - PM事务代码
|
自然语言处理 数据挖掘
SAP PM 入门系列6 - PM常用表
SAP PM 入门系列6 - PM常用表