PM2的基本使用
NodeJS 进程管理器 pm2 的使用
1. pm2 简介
PM2 是一款非常优秀的 Node 进程管理工具,它有着丰富的特性:能够充分利用多核 CPU
且能够负载均衡、能够帮助应用在崩溃后、指定时间(cluster model)和超出最大内存限制
等情况下实现自动重启。
PM2 是开源的基于 Nodejs 的进程管理器,包括守护进程,监控,日志的一整套完整的功能
2. pm2的主要特性
-
内建负载均衡(使用 Node cluster 集群模块)
-
后台运行
-
0 秒停机重载,我理解大概意思是维护升级的时候不需要停机.
-
具有 Ubuntu 和 CentOS 的启动脚本
-
停止不稳定的进程(避免无限循环)
-
控制台检测
3. 常用命令
3.1 pm2的安装与更新
3.1.1 pm2安装
npm install pm2 -g
or
yarn global add pm2

查看版本好,确定是否安装成功

3.1.2 pm2更新
pm2 updated

3.2 pm2 启动运行指定的程序
通过pm2启动应用程序服务,守护进程
3.2.1 正常启动应用程序
pm2 start app.js
pm2 start index.js
示例:
多个应用程序

通过pm2启动应用程序
启动第一个应用程序

启动第而个应用程序

启动是否能正常运行程序

我们发现两个进程都可以正常访问,我们会发现两个进程都叫app,甚至都不太好区分谁是谁
因此我们在启动程序的时候,可以自定义命名
3.2.2 启动应用程序时并设置name
pm2 start app.js --name demo
上面的示例中,两个进程都是同一个名字,都不太好区分,启动第三个程序时修改进程名称

结果:

3.3 pm2 停止指定运行的程序
通过pm2停止正在运行的程序
3.3.1 停止特定的应用
- 根据应用名停止指定应用
pm2 stop [AppName]
- 根据应用id停止指定应用
pm2 stop [ID]
现在可以停止进程
通过进程名关闭进程

通过进程id关闭进程

结果

3.3.2 停止所有的应用
- 停止所有进程
pm2 stop all
all是关闭所有的进程

访问结果:

3.4 重启所有进程
3.4.1 重新启动
restart命令同时杀死并重启所有进程。短时间内服务不可用。生成环境推荐使用reload
pm2 restart all

3.4.2 0秒停机重载
重新启动所有进程,始终保持至少一个进程在运行
pm2 reload app.js

3.5 删除应用程序
删除应用程序,就是不在让pm2维护这个应用程序
3.5.1 删除指定的应用程序
- 根据应用名关闭并删除应用
pm2 delete [AppName]
- 根据应用ID关闭并删除应用
pm2 delete [ID]
通过进程名删除进程

通过进程id删除进程

3.5.2 删除所有的应用
- 关闭并删除所有的应用
pm2 delete all

3.6 显示所有进程状态
pm2 list
查看进程状态

3.7 显示日志
3.7.1 显示所有应用程序的日志
pm2 logs
查看进程日志

3.7.2 显示特定的进程日志
- 指定应用名查看应用日志
pm2 logs [Name]
- 指定应用ID查看应用日志
pm2 logs [ID]
3.8 查看每个应用占用情况
pm2 monit
image
3.9 显示应用程序所有信息
- 根据name查看
pm2 show [Name]
- 根据id查看
pm2 show [ID]

4. PM2配置文件方式
4.1 生成示例配置文件
pm2 ecosystem
or
pm2 init

