目录
pm2是什么
特点
示例说明
配置文件
常用命令
背景
由于需要在容器云新增一个测试环境,改了代码相关的配置后,进行部署。发现服务一直启动不了。在和运维一起排查问题,他看到pm2的一些信息, 问我pm2是不是阻塞了,并不是很清楚pm2是什么。就初步学习了一下,进行记录。
PM2是什么
Precess Manager 2
PM2是一个进程管理工具,维护一个进程列表,可以用来管理正在用行的进程,实时查看日志,性能监控等功能
特点
- 日志管理 (已使用)
- 支持监听重启
- 支持部署工作流
- 支持集群模式
- 支持性能监控
- 支持pm2 开发
示例说明
首先 npm init 新建一个node项目
全局安装pm2 (npm install pm2 -g), 如果已经安装过,则不需要再次操作
在这个项目里新建index.js, (创建一个http服务器)
执行命令
pm2 ecosystem
, 默认会生成pm2的配置文件)( ecosystem.config.js)在配置文件里进行关于应用的各种配置
![屏幕快照 2020-08-26 19.35.23](/Users/jiaxiaoyu/Desktop/屏幕快照 2020-08-26 19.35.23.png)
配置文件
执行命令
pm2 ecosystem
, 默认会生成 ecosystem.config.js (和package.json放在一个根目录下)生成文件内容如下
module.exports = {
apps : [
{
script: 'index.js',
watch: '.'
},
{
script: './service-worker/',
watch: ['./service-worker']
}
],
deploy : {
production : {
user : 'SSH_USERNAME',
host : 'SSH_HOSTMACHINE',
ref : 'origin/master',
repo : 'GIT_REPOSITORY',
path : 'DESTINATION_PATH',
'pre-deploy-local': '',
'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production',
'pre-setup': ''
}
}
};
- apps 是一个数组, 每一项数组成员对应一个pm2中的应用
对配置文件详解
配置名 | 含义 |
---|---|
apps | json结构,是一个数组,里面每一项是一个pm2的应用 |
name | 应用程序名称 |
cwd | 应用程序所在目录 |
script | 应用程序启动文件所在目录 |
exec_mode | 应用启动模式,默认是fork, 可设置为 cluster集群 |
instances | 应用启动实例个数,仅在cluster模式有效 |
max_memory_restart | 最大内存限制数, 超出自动重启 |
log_date_format | 日志文件格式 |
error_file | 错误日志文件路径 |
out_file | 正常日志文件路径 |
merge_logs | 设置追加日志而不是新建日志 |
autorestart | 是否自动重启, true/false |
watch | 是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载 |
ignore_watch | 不用监听的文件,例如node_modules |
restart_delay | 延时重启时间 |
env | 生产环境变量 |
env_dev | 开发环境变量 |
env_test | 测试环境变量 |
min_uptime | 如果应用程序在这个时间退出,pm2会认为程序异常退出,此时触发重启max_restarts设置数量 |
max-restarts | 异常时重启次数 |
示例app进行配置如下:
module.exports = {
apps : [
{
name: 'xiaoyu_node_test', //名称
script: 'index.js', //程序入口
watch: '.', // 需要监控的目录
error_file: '/home/logs/err.log', //错误日志文件
out_file: '/home/logs/info.log', // 正常日志文件
log_date_format: 'YYYY-MM-DD HH:mm:ss', // 指定日志文件的时间格式
autorestart: true, // 发生异常是否自动重启, true重启, false不重启
env: {
NODE_ENV: 'production', //环境参数,当前指定为生产环境 process.env.NODE_ENV
REMOTE_ADDR: '' // process.env.REMOTE_ADDR
},
env_dev: {
NODE_ENV: 'development', //环境参数,当前指定为开发环境 pm2 start app.js --env_dev
REMOTE_ADDR: '' // process.env.REMOTE_ADDR
}
},
{
script: './service-worker/',
watch: ['./service-worker']
}
],
deploy : {
production : {
user : 'SSH_USERNAME',
host : 'SSH_HOSTMACHINE',
ref : 'origin/master',
repo : 'GIT_REPOSITORY',
path : 'DESTINATION_PATH',
'pre-deploy-local': '',
'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production',
'pre-setup': ''
}
}
};
常用命令
安装pm2
npm install pm2 -g // 要进行全局安装
启动进程(应用)
1.直接启动对应的js文件
pm2 start index.js
![屏幕快照 2020-08-26 11.07.44](/Users/jiaxiaoyu/Desktop/屏幕快照 2020-08-26 11.07.44.png)
2.启动pm2的配置文件
pm2 start ecosystem.config.js
![屏幕快照 2020-08-26 11.08.14](/Users/jiaxiaoyu/Desktop/屏幕快照 2020-08-26 11.08.14.png)
重启
pm2 restart ecosystem.config.js
查看日志
pm2 logs
![屏幕快照 2020-08-26 11.11.14](/Users/jiaxiaoyu/Desktop/屏幕快照 2020-08-26 11.11.14.png)
可以实时展示日志,而且会在自己配置文件中指定的路径生成日志文件
查看进程 以及 查看进程详情
pm2 list
![屏幕快照 2020-08-26 11.13.08](/Users/jiaxiaoyu/Desktop/屏幕快照 2020-08-26 11.13.08.png)
具体的查看某一个进程详情,例如查看id=4的进程
pm2 describe 4 //id号
![屏幕快照 2020-08-26 11.16.04](/Users/jiaxiaoyu/Desktop/屏幕快照 2020-08-26 11.16.04.png)
查看cpu和内存资源占用等一些性能指标
pm2 monit
![屏幕快照 2020-08-26 18.17.34](/Users/jiaxiaoyu/Desktop/屏幕快照 2020-08-26 18.17.34.png)
![屏幕快照 2020-08-26 18.17.42](/Users/jiaxiaoyu/Desktop/屏幕快照 2020-08-26 18.17.42.png)
*https://keymetrics.io/这个网址,经过一些设置,可以可视化看一些指标。由于打不开这个页面, 没有进行实际测试
停止进程
pm2 stop 0 // 0是id id|name|namespace|all|json|stdin
![屏幕快照 2020-08-26 18.22.58](/Users/jiaxiaoyu/Desktop/屏幕快照 2020-08-26 18.22.58.png)
status 已经变成 stoped
删除进程
pm2 delete 0. //id号
上述的列表里就会删掉这一条
开机自启动
pm2 start 配置文件
pm2 save
// 保存现有列表数据pm2 startup
//设置开机启动
结尾
Pm2 能做的还有很多,等待挖掘...