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 相关文章推荐
一个XML格式数据转换为图表的例子
Feb 09 Javascript
jQuery 中$(this).index与$.each的使用指南
Nov 20 Javascript
JS简单实现动画弹出层效果
May 05 Javascript
浅析AngularJS Filter用法
Dec 28 Javascript
1秒50万字!js实现关键词匹配
Aug 01 Javascript
jQuery动态修改字体大小的方法【测试可用】
Sep 09 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
May 27 Javascript
Vue数组更新及过滤排序功能
Aug 10 Javascript
详谈表单重复提交的三种情况及解决方法
Aug 16 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
Nov 23 Javascript
微信小程序网络请求封装示例
Jul 24 Javascript
用vue设计一个日历表
Dec 03 Vue.js
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更快的提供文件下载的代码
2012/06/13 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
PHP下载远程图片的几种方法总结
2017/04/07 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
什么是DOM(Document Object Model)文档对象模型
2012/03/05 Javascript
对于Form表单reset方法的新认识
2014/03/05 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
超全面的vue.js使用总结
2017/02/12 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
详解Vue爬坑之vuex初识
2017/06/14 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
2017/08/25 Javascript
10个在JavaScript开发中常遇到的BUG
2017/12/18 Javascript
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
JavaScript一元正号运算符示例代码
2019/06/30 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
JS实现页面数据懒加载
2020/02/13 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
Python变量和字符串详解
2017/04/29 Python
python 获取当天每个准点时间戳的实例
2018/05/22 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
会计专业毕业生求职信分享
2014/01/03 职场文书
学校安全责任书
2014/04/14 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
2021/04/01 PHP