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 相关文章推荐
一个原生的用户等级的进度条
Jul 03 Javascript
jQuery实现下拉框选择图片功能实例
Aug 08 Javascript
Jquery ajax基础教程
Nov 20 Javascript
基于jQuery实现简单的折叠菜单效果
Nov 23 Javascript
最简单的JavaScript图片轮播代码(两种方法)
Dec 18 Javascript
Javascript实现汉字和拼音互转的终极方案
Oct 19 Javascript
全面介绍vue 全家桶和项目实例
Dec 27 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
Dec 25 Javascript
原生js实现针对Dom节点的CRUD操作示例
Aug 26 Javascript
vue学习笔记之给组件绑定原生事件操作示例
Feb 27 Javascript
使用Node.js实现base64和png文件相互转换的方法
Mar 11 Javascript
详解Vue3中对VDOM的改进
Apr 23 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
生成sessionid和随机密码的例子
2006/10/09 PHP
php使用百度ping服务代码实例
2014/06/19 PHP
PHP中exec函数和shell_exec函数的区别
2014/08/20 PHP
关于PHP文件的自动运行方法分析
2016/05/13 PHP
通过jquery实现tab标签浏览效果
2007/02/20 Javascript
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
地址栏上的一段语句,改变页面的风格。(教程)
2008/04/02 Javascript
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
浅谈javascript的调试
2015/01/28 Javascript
jQuery获取字符串中出现最多的数
2016/02/22 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
2016/04/15 Javascript
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
javascript中mouseenter与mouseover的异同
2017/06/06 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
[44:37]完美世界DOTA2联赛PWL S3 Forest vs access 第一场 12.11
2020/12/13 DOTA
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
玩转python爬虫之cookie使用方法
2016/02/17 Python
python读取文本中的坐标方法
2018/10/14 Python
Python2和Python3的共存和切换使用
2019/04/12 Python
python批量处理文件或文件夹
2020/07/28 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
PYcharm 激活方法(推荐)
2020/03/23 Python
keras的三种模型实现与区别说明
2020/07/03 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
德国百年厨具品牌WMF美国站:WMF美国
2016/09/12 全球购物
幼儿教师个人求职信范文
2013/09/21 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
教师求职自荐信
2014/03/09 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
少年派的奇幻漂流观后感
2015/06/08 职场文书
教师教育心得体会
2016/01/19 职场文书
解决jupyter notebook启动后没有token的坑
2021/04/24 Python