一、pm2命令介绍
pm2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持性能监控,进程守护,负载均衡等功能
pm2是基于npm进行安装的,在安装pm2之前要先安装npm
安装命令:
sudo npm install -y pm2 -g
查看安装的pm2的版本
pm2 -v
更新PM2
更新PM2非常快(少于几秒)并且无缝。
首先确保您正确保存了所有进程:
pm2 save
然后从NPM安装最新的PM2版本:
npm install pm2 -g
最后更新内存中的PM2进程:
pm2 update
二、pm2 的特性
pm2是node进程管理工具。
1、后台运行
普通启动方式:node index.js,关闭终端就结束进程;
pm2可以后台运行,终端关闭不影响。
2、自动重启
可以监听某些文件改动,自动重启
3、停止不稳定的进程
限制不稳定的重启的次数,达到上限就停止进程。
4、0 秒停机重启
集群模式下,可以达到重启时不停止服务。
5、简单日志管理
pm2可以收集日志,并有插件配合进行管理。
三、基础用法
1、启动进程:
pm2 start app.js
app.js是node的启动文件,控制台会有如下打印。
(1)其中app name 和id都是这个进程的标识,可以对他们进行别的操作,比如stop,delete等。
(2)mode:进程模式,cluster或fork。cluster有多个进程,而fork只有一个。
(3)status:进程是否在线
(4)restart:重启次数
(5)uptime:运行时间
(6)cpu:cpu占用率
(7)mem:内存占用大小
2、停止进程:
pm2 stop app_name|app_id|all
3、删除进程:
pm2 delete app_name|app_id|all
注:有时候遇到vue项目重启或start都不好使,但是程序没有代码错误的情况下,杀掉进程,重启即可。
此进程使用kill 无效,因为存在守护进程,所以手动kill掉某个进程后会自动重启
4、重启进程:
pm2 restart/reload app_name|app_id|all
集群模式下,restart中断服务,而reload不会
5、查看所有的进程:pm2 list/ls/status
id编号从1~4的是一个应用,分别对应4个进程。
6、查看某一个进程的信息:pm2 show app_name|app_id
第一张图是指进程的信息,比如status(状态)、restarts(重启次数)、uptime(运行时间)、script path(启动入口的路径)、script args(启动文件的参数)、error log path(错误日志的路径)、out log path(输出日志的路径)、exec mode(进程的模式)、watch&reload(是否开启监听文件变动重启)、unstable restarts(不稳定的重启次数)
第二张图是指代码指标:heap size(堆内存)、heap usage(堆内存使用率)、used heap size(堆内存使用情况)、event loop latency(事件循环时延)、event loop latency p95(事件循环时延 第95分位)
7、查看日志:pm2 logs
会打印下面的信息。但是一般不这么看,一般直接进入红框的路径,直接用less 命令查看日志文件。
pm2 logs —lines 200
pm2 logs —raw # 显示流中的所有进程日志
pm2 flush # 清空所有日志文件
pm2 reloadLogs # 重新加载所有日志p
8、监控所有进程:pm2 monit
左上角是进程的列举,右上角是全部的实时日志,左下角是选中进程的代码指标,右下角是进程的信息。
9、启动命令(start)还可以带参数
--name 给进程命名
--watch 是否开启自动重启
--max-memory-restart 最大重启内存
--log 指定日志文件路径
--no-autorestart 不要自动重启应用程序
-- arg1 arg2 arg3
其他参数
四、集成部署(Ecosystem File)
若使用cluster模式,必须是启动文件入口,不可通过npm启动
1、why
(1)不同环境(dev、test、master)
(2)通过命令行传递参数不方便
(3) 同时管理多个应用
2、how
生成一个配置文件:pm2 ecosystem
app是要管理应用的数组,每个对象都是一个应用的配置。
3、配置项
name:进程名
script:node启动文件的路径
cwd :项目所在的目录
args :通过命令行传递给node启动文件的参数
interpreter :编译器的绝对路径(默认node)
interpreter_args :传给编译器的参数
node_args:传给node的参数
{
"apps" : [
{
"name": "cfg-server",
"script": "app.js",
"env": {
"COMMON_VARIABLE": "true"
},
"env_production" : {
"NODE_ENV": "production"
}
}
],
"deploy" : {
"production" : {
"user" : "root",
"host" : "47.18.138.2 -p 13800",
"ref" : "origin/master",
"repo" : "git@gitlab.xxx.com:Front-end/xxx-node.git",
"path" : "/root/fesrc/cfg-node",
"post-deploy" : "git reset --hard && git pull && pm2 start ecosystem.json --env production"
}
}
}