特点
- 进程守护 - 稳定。进程崩溃,会自动重启。
- 多进程 - 高效:可以依赖CPU的核数,一般有几核就创建多少个进程。
-
基本使用
pm2 start xxx.js
- pm2 restart
// 硬重启 - pm2 reload // 重载:一个进程一个进程地重启,保证重启过程中有进程是可用的。
- pm2 list
- pm2 logs
- pm2 stop
- pm2 delete
- pm2 monit // 监控 可以查看内存使用量
配置
```javascript /**- @description pm2 app 配置信息 */
const os = require(‘os’)
const cpuCoreLength = os.cpus().length // CPU 几核
module.exports = { apps: [ name: ‘your-server-name’, script: ‘bin/www’, // 重要!!app的启动脚本 // watch: true, // 无特殊情况,不用实时监听文件,否则可能会导致很多restart ignorewatch: [‘nodemodules’, ‘__test‘, ‘logs’], // instances: cpuCoreLength, // 线上环境,多进程 instances: 1, // 测试环境,一个进程即可 error_file: ‘./logs/err.log’, out_file: ‘./logs/out.log’, log_date_format: ‘YYYY-MM-DD HH:mm:ss Z’, // Z 表示使用当前时区的时间格式 combine_logs: true, // 多个实例,合并日志 max_memory_restart: ‘300M’, // 内存占用超过 300M ,则重启 //内存泄漏,当Bug难以排查的时候,设置这个字段,超过就重启。 ] }
<a name="foCpT"></a>
## 代码修改
- 安装 `npm i pm2 -g`
- pm2 配置, 在 `bin/` 目录下
- 修改 package.json `scripts` (临时修改 `NODE_ENV=dev` 然后运行)
```javascript
"prd-dev": "cross-env NODE_ENV=dev pm2 start bin/pm2-prd-dev.config.js",
日志拆分
线上的pm2日志量一般很大,不拆分的话,排查问题的时候,日志会大到打不开。所以一般会按照天、小时或者分钟把日志进行拆分。
- 使用 pm2-logrotate,这是一个pm2插件。
- 安装
pm2 install pm2-logrotate
,运行pm2 list
即可看到 pm2-logrotate 的进程
拓展:crontab定时规则:一般有六位,如果有五位,则省略最前面一位。#默认配置如下∶
$ pm2 set pm2-logrotate:max_size 10M # 日志文件最大10M
$ pm2 set pm2-logrotate:retain 30 # 保留 30 个文件,多了就自动删掉
$ pm2 set pm2-logrotate:compress false # gzip压缩文件
$ pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
$ pm2 set pm2-logrotate:workerInterval 30 # 单位 s ,日志检查的时间间隔
$ pm2 set pm2-logrotate:rotateInterval 0 0 * * * # 定时规则:每天的0点0分去拆分日志。
$ pm2 set pm2-logrotate:rotateModule true # 分割 pm2 模块的日志
修改配置# 可修改配置pm2 set pm2-logrotate:<key> <value>