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自带函数备忘 数组
Dec 29 Javascript
javascript动态向网页中添加表格实现代码
Feb 19 Javascript
JavaScript学习笔记之Cookie对象
Jan 22 Javascript
JS实现的文字与图片定时切换效果代码
Oct 06 Javascript
jQuery Mobile操作HTML5的常用函数总结
May 17 Javascript
JavaScript对象数组排序实例方法浅析
Jun 15 Javascript
vue 中自定义指令改变data中的值
Jun 02 Javascript
react-native之ART绘图方法详解
Aug 08 Javascript
React 高阶组件入门介绍
Jan 11 Javascript
vue2.0项目实现路由跳转的方法详解
Jun 21 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
Sep 23 Javascript
webpack3.0升级4.0的方法步骤
Apr 02 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
PHPShop存在多个安全漏洞
2006/10/09 PHP
php多个字符串替换成同一个的解决方法
2013/06/18 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
Avengerls vs KG BO3 第二场2.18
2021/03/10 DOTA
jQuery 插件开发指南
2014/11/14 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
JQuery判断checkbox是否选中及其它复选框操作方法合集
2015/06/01 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
2017/02/21 Javascript
Google 爬虫如何抓取 JavaScript 的内容
2017/04/07 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
2019/07/16 jQuery
[01:55]《走出家门看比赛》——DOTA2 2015国际邀请赛同城线下观战
2015/07/18 DOTA
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
Eclipse + Python 的安装与配置流程
2013/03/05 Python
python编写暴力破解FTP密码小工具
2014/11/19 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
Django通过dwebsocket实现websocket的例子
2019/11/15 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
python 成功引入包但无法正常调用的解决
2020/03/09 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
软件测试笔试题
2012/10/25 面试题
大学生大二自我鉴定
2013/10/28 职场文书
岗位职责说明书
2014/05/07 职场文书
查摆问题整改措施
2014/10/24 职场文书
办公室规章制度范本
2015/08/04 职场文书