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与vbscript数据共享
Jan 09 Javascript
ExtJS自定义主题(theme)样式详解
Nov 18 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
Oct 09 Javascript
原生js实现放大镜效果
Jan 11 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
Feb 21 Javascript
提高JavaScript执行效率的23个实用技巧
Mar 01 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
Sep 28 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
Mar 01 Javascript
基于jQuery实现无缝轮播与左右点击效果
May 13 jQuery
解决vue.js 数据渲染成功仍报错的问题
Aug 25 Javascript
微信小程序如何获取群聊的openGid以及名称详解
Jul 17 Javascript
OpenLayer3自定义测量控件MeasureTool
Sep 28 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设计模式 Command(命令模式)
2011/06/26 PHP
PHP中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
PHP中使用BigMap实例
2015/03/30 PHP
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
js禁止回车提交表单的示例代码
2013/12/23 Javascript
js中运算符&amp;&amp; 和 || 的使用记录
2014/08/21 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
angularJS 入门基础
2015/02/09 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
js检查是否关闭浏览器的方法
2016/08/02 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
JS获取动态添加元素的方法详解
2019/07/31 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
python字符串编码识别模块chardet简单应用
2015/06/15 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
python实现读取excel文件中所有sheet操作示例
2019/08/09 Python
AUC计算方法与Python实现代码
2020/02/28 Python
python else语句在循环中的运用详解
2020/07/06 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
html5使用canvas实现图片下载功能的示例代码
2017/08/26 HTML / CSS
菲律宾领先的在线时尚商店:Zalora菲律宾
2018/02/08 全球购物
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
医药营销专业个人自荐信
2013/09/29 职场文书
社会实践感言
2014/01/25 职场文书
幼儿园运动会加油词
2014/02/14 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
乡镇消防安全责任书
2014/07/23 职场文书
pycharm代码删除恢复的方法
2021/06/26 Python
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers