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 相关文章推荐
JS OffsetParent属性深入解析
Jan 13 Javascript
Jquery validation remote 验证的缓存问题解决方法
Mar 25 Javascript
JavaScript解析json格式数据简单示例
Dec 09 Javascript
JavaScript通过字典进行字符串翻译转换的方法
Mar 19 Javascript
AngularJS入门教程之ng-class 指令用法
Aug 01 Javascript
js判断一个字符串是以某个字符串开头的简单实例
Dec 27 Javascript
JS高仿抛物线加入购物车特效实现代码
Feb 20 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
Sep 25 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
Sep 05 jQuery
详细教你微信公众号正文页SVG交互开发技巧
Jul 25 Javascript
ant-design-vue按需加载的坑的解决
May 14 Javascript
Vue中 axios delete请求参数操作
Aug 25 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
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
PHP基于MySQL数据库实现对象持久层的方法
2015/06/17 PHP
php 截取utf-8格式的字符串实例代码
2016/10/30 PHP
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
js判断字符长度及中英文数字等
2014/03/19 Javascript
jquery 3D 标签云示例代码
2014/06/12 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
javascript实现的登陆遮罩效果汇总
2015/11/09 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
js不间断滚动的简单实现
2016/06/03 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
详解Layer弹出层样式
2017/08/21 Javascript
vue 中directive功能的简单实现
2018/01/05 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
解决使用vue.js路由后失效的问题
2018/03/17 Javascript
axios向后台传递数组作为参数的方法
2018/08/11 Javascript
js+html5 canvas实现ps钢笔抠图
2019/04/28 Javascript
使用 vue 实现灭霸打响指英雄消失的效果附demo
2019/05/06 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
Python实现登录接口的示例代码
2017/07/21 Python
对pandas的行列名更改与数据选择详解
2018/11/12 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
2020/06/24 Python
python如何设置静态变量
2020/09/07 Python
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
python re模块和正则表达式
2021/03/24 Python
产品设计开发计划书
2014/05/07 职场文书
机械系毕业生求职信
2014/05/28 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
预备党员自我评价范文
2015/03/04 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
详解JAVA的控制语句
2021/11/11 Java/Android