pm2多进程合并日志
pm2开启多进程
pm2是一个能够开启多进程,处理高并发的环境
安装PM2
npm install pm2 -g
启动PM2
pm2 start xxx
默认启动是单实例fork模式。甚至可以用来启动PHP等脚本语言,个人觉得,在非集群模式下用fork模式跑pm2启动的项目基本上就是废了,还不如不用pm2。
pm2 start xxx -i 0
(备注:cpu有几核就启动几个cluster进程,如果指定>0 就按指定数字启动进程,进程数最高不高于cpu核心数,在非集群(k8s环境下,已经提供多实例环境了,再开cluster意义不大了)环境强烈推荐使用cluster模式,利用pm2提供的负载均衡,充分利用cpu)
停止PM2进程
停止指定pm2启动的进程
pm2 stop xxx
停止所有pm2进程
pm2 stop all
删除PM2进程
删除指定启动的进程
pm2 delete xxx
删除所有启动进程
pm2 delete all
杀死进程
pm2 kill
与上面的 pm2 delete all 删除进程的区别就是kill是彻底杀死进程,进程号会从头开始计算,delete删除进程后,启动新进程会延续上次的进程号继续往上加
eg:
操作1
用delete强制删除进程
再次启动多进程后,注意看前面的id号
操作2
用kill 杀死进程
再次启动,发现id号已经从头开始计算了
重启PM2进程
PM2重启指定项目进程
pm2 restart xxx
PM2重启所有项目进程
pm2 restart all
可以实现平滑无感知重启,项目不会中断
日志
查看所有日志
pm2 logs
查看json格式日志
pm2 logs --json
写入日志文件的日志为json格式
pm2 start xxx -i 0 --log-type=json
合并日志
如果是fork模式,如果没有指定日志位置,pm2日志默认位置在
Linux/Mac:
/root/.pm2/logs/
Windows系统:
C:\Users\用户\.pm2\logs
注意1:如果用cluster模式,并且没有指定启动进程数,默认是主动合并进程日志,如果指定进程数,就会按进程数生成进程日志文件
默认是这样的:
如果是pm2 start xxx -i num
启动,则会有进程日志文件
eg:我启动3个进程
生成日志是这样的
注意2:如果是fork模式,生成出来的日志和用-i 0启动是一样的没有进程日志
操作1:当确实需要用到指定进程数启动的话,又想合并日志,可以使用
pm2 start ./bin/www -i 3 --log-type=json --merge-logs -l --log /root/.pm2/logs/merge.log
合并后的日志(多进程的标准日志和错误日志合在一起了)
操作2:在多进程模式下,当想分开标准日志和错误日志的话,且合并多进程日志,可以使用
pm2 start ./bin/www -i 3 --log-type=json --merge-logs --output /root/.pm2/logs/out.log --error /root/.pm2/logs/error.log
清空日志
pm2 flush
轮询备份日志
安装pm2-logrotate
pm2 install pm2-logrotate
轮询备份日志
pm2 set pm2-logrotate:max_size 100M;
pm2 set pm2-logrotate:retain 3
上面命令分别是:
- 当超过100M后备份
- 轮询3个日志文件,超过3个后,自动替换掉最前面的日志文件
默认是30S检查一次
详细配置进:官网地址
常用命令总结
命令 | 作用 |
---|---|
pm2 start app.js |
启动fork模式 |
pm2 start app.js -i num |
启动cluster模式 |
pm2 restart app.js |
重启应用 |
pm2 restart all |
重启所有应用 |
pm2 stop app.js |
停止项目 |
pm2 stop all |
停止所有项目 |
pm2 delete app.js |
删除项目进程 |
pm2 delete all |
删除所有项目进程 |
pm2 kill |
杀死所有项目进程 |
pm2 logs |
查看所有pm2日志 |
pm2 flush |
清空所有pm2日志 |
pm2 start app.js -i 0 --log-type=json |
用json格式记录日志 |
pm2 start app.js -i 3 --log-type=json --merge-logs --output /path/xxx.log --error /path/xxx.log |
用json格式记录且合并日志 |