PM2作为小邹一直在使用的node进程管理软件,我自己心里是感觉非常方便,它在解决node中间层进程异常方面有着不小的功劳,下面小邹就它的两种使用模式给大伙讲解一下:
运行模式
- fork_mode
- cluster_mode
pm2 start a 默认开启的是fork模式,pm2 start a -i max 是开启cluster模式(集群模式)。cluster模式的好处,请自行百度。
当然你也可以通过配置文件启动1个或多个node应用
// (也可以yml等配置文件) { "apps": [{ "name": "myblog", "script": "a", "instances": 2, //利用2个核心 "exec_mode": "cluster" }, { "name": "myblog-test", "script": "a", "instances": "max", "exec_mode": "cluster", "watch": true, "env": { "NODE_ENV": "development" }, "env_production": { "NODE_ENV": "production" }, "interpreter": "/usr/bin/node", "interpreter_args": "--harmony", "node_args": "--harmony", "log_date_format": "YYYY-MM-DD HH:mm Z", "error_file": "/web/klhut/www/log;, "out_file": "/web/klhut/www/log;, "pid_file": "/web/klhut/www/log; }] } // 启动应用 pm2 start //指定对应的运行环境 pm2 start --env production你可以在里写了几个命令
"scripts": { "start": "shell=(nvm use 7 ) && pm2 start ./", "restart": "pm2 restart ./", "stop": "pm2 stop ./", "delete": "npm run stop && pm2 delete ./" }pm2还可以设置开机自启动
$ pm2 save $ pm2 startup centos //具体看文档下面小邹讲讲cluster_mode的优势
1、重启异常进程
如果任意一个工作线程挂掉了,不用担心,PM2会立即将其重启。当然,你也完全可以在任何时候手动重启这些线程:
2、实时扩展集群
任何时候,如果你需要增加工作线程的数量,可以通过pm2 scale <app name> <n>来对集群进行扩展。参数<n>指定工作线程的数量,被用来增加或减少集群数。你也可以通过pm2 scale app +3的方式来指定要增加多少工作线程。
3、在产品环境实现零停机更新
PM2的reload <app name>功能将依次重启所有的工作线程。每一个线程会等待在新的线程创建之后才会被终止掉,因此,当你在产品环境部署新的代码时,server会不间断地一直保持运行。
使用gracefulReload功能可以达到相同的目的,不同的是它不会立即终止工作线程,而是通过IPC发送一个shutdown信号来关闭所有当前的连接并处理一些自定义的任务,然后再优雅地退出。如下面的代码:
('message', function(msg) { if (msg === 'shutdown') { close_all_connections(); delete_cache(); (); (0); } });