优秀的编程知识分享平台

网站首页 > 技术文章 正文

node进程管理器神器——PM2(值得收藏)

nanyue 2024-08-09 07:13:02 技术文章 10 ℃

PM2作为小邹一直在使用的node进程管理软件,我自己心里是感觉非常方便,它在解决node中间层进程异常方面有着不小的功劳,下面小邹就它的两种使用模式给大伙讲解一下:

运行模式

  1. fork_mode
  2. cluster_mode

pm2 start app.js 默认开启的是fork模式,pm2 start app.js -i max 是开启cluster模式(集群模式)。cluster模式的好处,请自行百度。

当然你也可以通过配置文件启动1个或多个node应用

// process.json(也可以yml等配置文件)
{
 "apps": [{
 "name": "myblog",
 "script": "app.js",
 "instances": 2, //利用2个核心
 "exec_mode": "cluster"
 }, {
 "name": "myblog-test",
 "script": "app.js",
 "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/logs/err.log",
 "out_file": "/web/klhut/www/logs/out.log",
 "pid_file": "/web/klhut/www/logs/app-id.pid"
 }]
}
// 启动应用
pm2 start process.json
//指定对应的运行环境
pm2 start process.json --env production

你可以在package.json里写了几个命令

"scripts": {
 "start": "shell=(nvm use 7 ) && pm2 start ./process.json",
 "restart": "pm2 restart ./process.json",
 "stop": "pm2 stop ./process.json",
 "delete": "npm run stop && pm2 delete ./process.json"
}

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信号来关闭所有当前的连接并处理一些自定义的任务,然后再优雅地退出。如下面的代码:

process.on('message', function(msg) { 
 if (msg === 'shutdown') {
 close_all_connections();
 delete_cache();
 server.close();
 process.exit(0);
 }
});

Tags:

最近发表
标签列表