node.js中cluster的使用教程


Posted in Javascript onJune 09, 2017

本文主要给大家介绍了关于node.js中cluster使用的相关教程,分享出来供大家参考学习,下面来看看详细的介绍:

一、使用NODE中cluster利用多核CPU

var cluster = require('cluster'); 
var http = require('http'); 
var numCPUs = require('os').cpus().length; 
if (cluster.isMaster) { 
// 创建工作进程 
for (var i = 0; i < numCPUs; i++) { 
cluster.fork(); 
} 
cluster.on('death', function(worker) { 
console.log('worker ' + worker.pid + ' died'); 
cluster.fork();//重启子进程 
}); 
} else { 
// 工作进程创建http 服务器 
http.Server(function(req, res) { 
res.writeHead(200); 
res.end("hello world\n"); 
}).listen(8000); 
}

二、通过消息传递来监控工作进程状态

var cluster = require('cluster'); 
var http = require('http'); 
var numCPUs = require('os').cpus().length; 
var rssWarn = (12 * 1024 * 1024) 
  , heapWarn = (10 * 1024 * 1024) 
if(cluster.isMaster) { 
  for(var i=0; i<numCPUs; i++) { 
    var worker = cluster.fork(); 
    worker.on('message', function(m) { 
      if (m.memory) { 
        console.log(m.memory.rss,rssWarn) 
        if(m.memory.rss > rssWarn) { 
          console.log('Worker ' + m.process + ' using too much memory.') 
        } 
      } 
 
    }) 
  } 
} else { 
// 服务器 
  http.createServer(function(req,res) { 
    res.writeHead(200); 
    res.end('hello world\n') 
  }).listen(8000) 
// 每秒报告一次状态 
  setInterval(function report(){ 
    process.send({memory: process.memoryUsage(), process: process.pid}); 
  }, 1000) 
}

三、杀死僵尸进程

var cluster = require('cluster'); 
var http = require('http'); 
var numCPUs = require('os').cpus().length; 
var rssWarn = (50 * 1024 * 1024) 
  , heapWarn = (50 * 1024 * 1024) 
var workers = {} 
if(cluster.isMaster) { 
  for(var i=0; i<numCPUs; i++) { 
    createWorker() 
  } 
  setInterval(function() { 
    var time = new Date().getTime() 
    for(pid in workers) { 
      if(workers.hasOwnProperty(pid) && 
        workers[pid].lastCb + 5000 < time) { 
        console.log('Long running worker ' + pid + ' killed') 
        workers[pid].worker.kill() 
        delete workers[pid] 
        createWorker() 
      } 
    } 
  }, 1000) 
} else { 
// 服务器 
  http.Server(function(req,res) { 
// 打乱200 个请求中的1 个 
    if (Math.floor(Math.random() * 200) === 4) { 
      console.log('Stopped ' + process.pid + ' from ever finishing') 
      while(true) { continue } 
    } 
    res.writeHead(200); 
    res.end('hello world from ' + process.pid + '\n') 
  }).listen(8000) 
// 每秒钟报告一次状态 
  setInterval(function report(){ 
    process.send({cmd: "reportMem", memory: process.memoryUsage(), 
      process: process.pid}) 
  }, 1000) 
} 
function createWorker() { 
  var worker = cluster.fork() 
  console.log('Created worker: ' + worker.pid) 
// 允许开机时间 
  workers[worker.pid] = {worker:worker, lastCb: new Date().getTime()-1000} 
  worker.on('message', function(m) { 
    if(m.cmd === "reportMem") { 
      workers[m.process].lastCb = new Date().getTime() 
      if(m.memory.rss > rssWarn) { 
        console.log('Worker ' + m.process + ' using too much memory.') 
      } 
    } 
  }) 
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
May 24 Javascript
JavaScript实现简单的时钟实例代码
Nov 23 Javascript
使用jQuery实现星级评分代码分享
Dec 09 Javascript
js格式化时间的方法
Dec 18 Javascript
jQuery查找节点并获取节点属性的方法
Sep 09 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
Mar 07 Javascript
基于 Vue 的树形选择组件的示例代码
Aug 18 Javascript
vue 2.x 中axios 封装的get 和post方法
Feb 28 Javascript
Vue分页器实现原理详解
Jun 28 Javascript
JS实现可视化音频效果的实例代码
Jan 16 Javascript
javascript利用键盘控制小方块的移动
Apr 20 Javascript
VSCode插件安装完成后的配置(常用配置)
Aug 24 Javascript
vue bootstrap小例子一枚
Jun 09 #Javascript
详解webpack解惑:require的五种用法
Jun 09 #Javascript
Bootstrap输入框组件使用详解
Jun 09 #Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
Jun 09 #jQuery
微信分享调用jssdk实例
Jun 08 #Javascript
浅谈vue实现数据监听的函数 Object.defineProperty
Jun 08 #Javascript
jQuery Validate表单验证插件实现代码
Jun 08 #jQuery
You might like
Windows下的PHP安装pear教程
2014/10/24 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
php+ajax实现无刷新分页
2015/11/18 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
js使用for循环查询数组中是否存在某个值
2014/08/12 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
2016/02/16 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
从0开始学Vue
2016/10/27 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
获取IE浏览器Cookie信息的方法
2017/01/23 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
Vuex之理解Mutations的用法实例
2017/04/19 Javascript
javascript实现延时显示提示框效果
2017/06/01 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
2018/04/17 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
JS 5种遍历对象的方式
2020/06/16 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
Python编写屏幕截图程序方法
2015/02/18 Python
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
Python编程实现及时获取新邮件的方法示例
2017/08/10 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
python实现多进程通信实例分析
2019/09/01 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
css3.0新属性效果在ie下的解决方案
2010/05/10 HTML / CSS
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
HTML5 Canvas自定义圆角矩形与虚线示例代码
2013/08/02 HTML / CSS
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
用C语言实现文件读写操作
2013/10/27 面试题
英语教师个人总结
2015/02/09 职场文书