一、PM2是什么
- 是能够用于临盆环境的Nodejs的历程治理东西,而且它内置一个负载平衡。它不仅能够保证效劳不会中缀一向在线,而且供应0秒reload功用,另有其他一系列历程治理、监控功用。而且运用起来非常简朴。
- 嗯嗯,最好的用途就是监控我们的临盆环境下的node顺序运转状况,让它给我们日以继日的处于事情状况。
- pm2官方文档
二、为森么要运用pm2
原始社会的我们开辟node效劳端顺序平常历程:
- 编写好node顺序app.js,运转
node app.js
;或许写入script运用npm运转;翻开浏览器接见; - 彷佛须要修正内容,浏览器对修正的内容没有显现出来?->
node app.js
->再次运转; - 浏览器遽然接见不到效劳,彷佛失足啦?重启下->
node app.js
->再次运转; - 哎呀开了很多掌握台窗口,一不小心封闭了,效劳又接见不到了,继承翻开掌握台->
node app.js
->再次运转;
- 编写好node顺序app.js,运转
- 好崩溃!彷佛有个东西
nodemon
;装置运用nodemon app.js
;哇,能够自动监听文件修正变化自动重启,然则封闭掌握台效劳照样会被摧毁。 - 经由过程这个很经常使用的场景,我们相识到要防止这些贫苦一个效劳器最少须要有:背景运转和自动重启,这两个才能。
再来看看运用pm2可具有的才能:
- 日记治理;两种日记,pm2体系日记与治理的历程日记,默许会把历程的掌握台输出纪录到日记中;
- 负载平衡:PM2能够经由过程建立同享统一效劳器端口的多个子历程来扩大您的运用顺序。如许做还许可以零秒停机时候从新启动运用顺序。
- 终端监控:能够在终端中监控运用顺序并搜检运用顺序运转状况(CPU运用率,运用的内存,要求/分钟等)。
- SSH布置:自动布置,防止逐一在一切效劳器中举行ssh。
- 静态效劳:支撑静态效劳器功用
- 支撑开辟调试形式,非背景运转,pm2-dev start <appName>;
- 。。。。。太甚壮大!
pm2经常使用敕令
启动效劳
pm2 start <script_file|config_file> [options] 启动指定运用
pm2 start app.js //启动app.js运用 pm2 start app.js --name app //启动运用并设置name pm2 start app.sh //剧本启动 pm2 start app.js --watch //监听形式启动,当文件发作变化,自动重启 //max 示意PM2将自动检测可用CPU的数目并运转尽量多的历程 //max能够自定义,假如是4核CPU,设置为2则占用2个 pm2 start app.js -i max //启用聚集形式(自动负载平衡) pm2-dev start ... // 开辟形式启动,即不启用背景运转
- 检察启动列表
pm2 list
显现运用顺序详细信息
pm2 show <appName> [options] 显现指定运用概况
pm2 show [Name] //依据name检察 pm2 show [ID] //依据id检察
住手指定运用
pm2 stop <appName> [options] 住手指定运用
pm2 stop all //住手一切运用 pm2 stop [AppName] //依据运用名住手指定运用 pm2 stop [ID] //依据运用id住手指定运用
重启运用
pm2 reload|restart <appName> [options] 重启指定运用
pm2 restart app.js //同时杀死并重启一切历程,短时候内效劳不可用,天生环境慎用 pm2 reload app.js //从新启动一切历程,0秒重启,始终保持最少一个历程在运转 pm2 gracefulReload all //以聚集形式从新加载一切运用顺序
- 启动静态效劳器
pm2 serve ./dist 8080
将目次dist作为静态效劳器根目次,端口为8080 删除运用
pm2 delete <appName> [options] 删除指定运用
;假如修正了运用设置行动,须要先删除运用,从新启动后方才会见效,如修正剧本进口文件;pm2 delete all //封闭并删除运用 pm2 delete [AppName] //依据运用名封闭并删除运用 pm2 delete [ID] //依据运用ID封闭并删除运用
-
pm2 kill
杀掉pm2治理的一切历程; pm2 logs <appName>
检察指定运用的日记,即范例输出和范例毛病pm2 logs //检察一切运用日记 pm2 logs [Name] //依据指定运用名检察运用日记 pm2 logs [ID] //依据指定运用ID检察运用日记
-
pm2 monit
监控各个运用历程cpu和memory运用情况;
PM2设置体式格局
敕令临盆默许示例设置文件
pm2 ecosystem
或pm2 init
,运转默许会天生ecosystem.config.js
设置文件module.exports = { apps: [ { name: 'back-Api', //运用名 script: './server/start.js', //运用文件位置 env: { PM2_SERVE_PATH: "./apidoc", //静态效劳途径 PM2_SERVE_PORT: 8080, //静态效劳器接见端口 NODE_ENV: 'development' //启动默许形式 }, env_production : { NODE_ENV: 'production' //运用production形式 pm2 start ecosystem.config.js --env production }, instances:"max", //将运用顺序散布在一切CPU核心上,能够是整数或负数 instance_var: "INSTANCE_ID", exec_mode: "cluster", watch:[ "server", ], //监听形式,不能纯真的设置为true,易致使无穷重启,由于日记文件在变化,须要消除对其的监听 merge_logs: true, //集群情况下,能够兼并日记 } ], deploy: { production : { user: 'node', //ssh 用户 host: '212.83.163.1', //ssh 地点 ref: 'origin/master', //GIT长途/分支 repo: 'git@github.com:repo.git', //git地点 path: '/var/www/production', //效劳器文件途径 "post-deploy": 'npm install && pm2 reload ecosystem.config.js --env production' //布置后的行动 } } };
- 自定义json设置文件如:
processes.json
;启动pm2 start processes.json
{
"apps": [{
"name": "app", //称号
"script": "./", //顺序进口
"cwd": "./", //根目次
"watch":[
"views"
],//须要监控的目次
"error_file":"./logs/err.log",//毛病输出日记
"out_file":"./logs/out.log", //日记
"log_date_format":"YYYY-MM-DD HH:mm Z" //日期花样
}]
}
pm2经常使用设置项剖析
1. apps:json构造,apps是一个数组,每个数组成员就是对应一个pm2中运转的运用
2. name:运用顺序称号"app"
3. cwd:运用顺序地点的目次"./"
4. script:运用顺序的剧本途径"./"
5. log_date_format: 日记文件名输出日期花样"YYYY-MM-DD HH:mm Z"
6. error_file:自定义运用顺序的毛病日记文件"./logs/app-err.log",
7. out_file:自定义运用顺序日记文件"./logs/app-out.log"
8. instances: 运用启动实例个数,仅在cluster形式有用 默许为fork;或许 max
9. min_uptime:最小运转时候,这里设置的是60s即假如运用顺序在60s内退出,pm2会以为顺序非常退出,此时触发重启max_restarts设置数目
10. max_restarts:设置运用顺序非常退出重启的次数,默许15次(从0最先计数)
11. cron_restart:定时启动,处置惩罚重启能处置惩罚的题目
12. watch:是不是启用监控形式,默许是false。假如设置成true,当运用顺序更改时,pm2会自动重载。这里也能够设置你要监控的文件。
13. "ignore_watch": [ // 不必监听的文件
"node_modules",
"logs"
],
13. merge_logs:// 设置追加日记而不是新建日记
14. exec_interpreter:运用顺序的剧本范例,这里运用的shell,默许是nodejs
15. exec_mode:运用顺序启动形式,这里设置的是cluster_mode(集群),默许是fork
16. autorestart:启用/禁用运用顺序崩溃或退出时自动重启,默许为true, 发作非常的情况下自动重启
17. vizion:启用/禁用vizion特征(版本掌握)
18. "args": "", // 传递给剧本的参数
19. env: {
PM2_SERVE_PATH: "./apidoc", //静态效劳途径
PM2_SERVE_PORT: 8080, //静态效劳器接见端口
NODE_ENV: 'development' //启动默许形式
},
20. env_production : {
NODE_ENV: 'production' //运用production形式 pm2 start ecosystem.config.js --env production
},
pm2合营log4js处置惩罚日记
- pm2启动时通常会发明log4js纪录不到日记信息;
- 决解计划,装置pm2的
pm2-intercom
历程间通讯模块 在log4js的设置文件
logger.js
里增加以下敕令:pm2: true, pm2InstanceVar: 'INSTANCE_ID'
- pm2设置文件中增加
"instance_var": "INSTANCE_ID", // 增加这一行
字段 - 发明假如没有设置聚集形式
"exec_mode": "cluster"
,也会纪录不到;
其他
- log4js日记设置运用概况Koa日记中间件封装开辟(log4js)
“积跬步、行千里”—— 延续更新中~,喜好的话留下个赞和关注哦!
往期典范好文: