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 相关文章推荐
点图片上一页下一页翻页效果
Jul 09 Javascript
jQuery对象和DOM对象使用说明
Jun 25 Javascript
JS获取图片实际宽高及根据图片大小进行自适应
Aug 11 Javascript
node.js中的buffer.slice方法使用说明
Dec 10 Javascript
javascript异步编程代码书写规范Promise学习笔记
Feb 11 Javascript
jquery计算鼠标和指定元素之间距离的方法
Jun 26 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
Jul 28 Javascript
2种简单的js倒计时方式
Oct 20 Javascript
Vue隐藏显示、只读实例代码
Jul 18 Javascript
angular 数据绑定之[]和{{}}的区别
Sep 25 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
Oct 29 Javascript
js实现弹窗猜数字游戏
Nov 26 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
PHP之sprintf函数用法详解
2014/11/12 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
学习ExtJS Column布局
2009/10/08 Javascript
js 编写规范
2010/03/03 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
javascript常用函数(2)
2015/11/05 Javascript
js仿京东轮播效果 选项卡套选项卡使用
2017/01/12 Javascript
基于JQuery及AJAX实现名人名言随机生成器
2017/02/10 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
jQuery EasyUI 选项卡面板tabs的使用实例讲解
2017/12/25 jQuery
对vux点击事件的优化详解
2018/08/28 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
Python日期的加减等操作的示例
2017/08/15 Python
python 列表删除所有指定元素的方法
2018/04/19 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
Python OpenCV之图片缩放的实现(cv2.resize)
2019/06/28 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
村捐赠仪式答谢词
2014/01/21 职场文书
新三好学生主要事迹
2014/01/23 职场文书
质量承诺书怎么写
2014/05/24 职场文书
毕业论文指导教师评语
2014/12/30 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
go mod 安装依赖 unkown revision问题的解决方案
2021/05/06 Golang