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 相关文章推荐
常用一些Javascript判断函数
Aug 14 Javascript
php is_numberic函数造成的SQL注入漏洞
Mar 10 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
Mar 14 Javascript
使用coffeescript编写node.js项目的方法汇总
Aug 05 Javascript
JS简单循环遍历json数组的方法
Apr 22 Javascript
jQuery侧边栏实现代码
May 06 Javascript
javascript常用经典算法详解
Jan 11 Javascript
学习使用Bootstrap栅格系统
May 11 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
Sep 18 Javascript
微信小程序发送短信验证码完整实例
Jan 07 Javascript
微信小程序swiper使用网络图片不显示问题解决
Dec 13 Javascript
JQuery表单元素取值赋值方法总结
May 12 jQuery
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
PHP数组内存耗用太多问题的解决方法
2010/04/05 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
javascript基本类型详解
2014/11/28 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
2015/11/18 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
Html5 js实现手风琴效果
2020/04/17 Javascript
详解Angular的8个主要构造块
2017/06/20 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
Python实现从订阅源下载图片的方法
2015/03/11 Python
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
Python之list对应元素求和的方法
2018/06/28 Python
Python中按键来获取指定的值
2019/03/02 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
是否有自动比较结构的方法
2015/06/03 面试题
思想政治教育专业个人求职信范文
2013/12/20 职场文书
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
八一建军节感言
2014/02/28 职场文书
网站美工岗位职责
2014/04/02 职场文书
环保建议书300字
2014/05/14 职场文书
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
教师病假条范文
2015/08/17 职场文书
Python爬虫实战之爬取携程评论
2021/06/02 Python
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS