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 相关文章推荐
DOM 脚本编程中的兄弟节点
Oct 31 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
Sep 05 Javascript
jQuery EasyUI API 中文文档 - Spinner微调器使用
Oct 21 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
Jan 23 Javascript
深入理解JavaScript中的传值与传引用
Dec 09 Javascript
jQuery函数map()和each()介绍及异同点分析
Nov 08 Javascript
jQuery实现折线图的方法
Feb 28 Javascript
js实现创建删除html元素小结
Sep 30 Javascript
jQuery中inArray方法注意事项分析
Jan 25 Javascript
简单几步实现返回顶部效果
Dec 05 Javascript
js实现五星评价功能
Mar 08 Javascript
Angular4实现图片上传预览路径不安全的问题解决
Dec 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
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
PHP错误机制知识汇总
2016/03/24 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
javascript 写类方式之十
2009/07/05 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
js实现简单商品筛选功能
2021/02/02 Javascript
[39:21]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.24
2019/09/10 DOTA
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
Python的面向对象思想分析
2015/01/14 Python
Python生成随机MAC地址
2015/03/10 Python
python 全局变量的import机制介绍
2017/09/07 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
windows下Pycharm安装opencv的多种方法
2020/03/05 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
药品业务员岗位职责
2014/04/17 职场文书
低碳环保标语
2014/06/12 职场文书
公司给客户的感谢信
2015/01/23 职场文书
2015年售后服务工作总结
2015/04/25 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
2021/06/21 Oracle
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL
python编程学习使用管道Pipe编写优化代码
2021/11/20 Python
电频谱管理的原则是什么
2022/02/18 无线电
世界十大儿童漫画书排名,法国国宝漫画排第五,第二是轰动日本连环
2022/03/18 欧美动漫