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 客户端验证上传图片的大小(兼容IE和火狐)
Aug 15 Javascript
js 内存释放问题
Apr 25 Javascript
Jquery实现弹出层分享微博插件具备动画效果
Apr 03 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
Dec 09 Javascript
Bootstrap中的Panel和Table全面解析
Jun 13 Javascript
JQuery动态添加Select的Option元素实现方法
Aug 29 Javascript
jQuery复制节点用法示例(clone方法)
Sep 08 Javascript
纯JS实现表单验证实例
Dec 24 Javascript
Vue.js组件tab实现选项卡切换
Mar 23 Javascript
运用jQuery写的验证表单(实例讲解)
Jul 06 jQuery
JS实现的JSON数组去重算法示例
Apr 11 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
Jul 27 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
simplehtmldom Doc api帮助文档
2012/03/26 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
php利用cookies实现购物车的方法
2014/12/10 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
php中JSON的使用方法
2015/04/30 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
javascript,jquery闭包概念分析
2010/06/19 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
Angular.JS利用ng-disabled属性和ng-model实现禁用button效果
2017/04/05 Javascript
Vuex之理解state的用法实例
2017/04/19 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
[00:10]神之谴戒
2019/03/06 DOTA
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
使用Python的PIL模块来进行图片对比
2016/02/18 Python
python 队列详解及实例代码
2016/10/18 Python
python实现的AES双向对称加密解密与用法分析
2017/05/02 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
Python3中详解fabfile的编写
2018/06/24 Python
Python的垃圾回收机制详解
2019/08/28 Python
Python numpy数组转置与轴变换
2019/11/15 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
Python基于模块Paramiko实现SSHv2协议
2020/04/28 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
深入了解Python enumerate和zip
2020/07/16 Python
购买一个高级域名:BuyDomains
2018/03/11 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
介绍一下UNIX启动过程
2013/11/14 面试题
零件设计自荐信范文
2013/11/27 职场文书
护士自荐信范文(2016推荐篇)
2016/01/28 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle