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代码
Oct 09 Javascript
JS实现点击下载的小例子
Jul 10 Javascript
js判断手机号运营商的方法
Oct 23 Javascript
js实现文件上传表单域美化特效
Nov 02 Javascript
如何使用jquery easyui创建标签组件
Nov 18 Javascript
利用AngularJs实现京东首页轮播图效果
Sep 08 Javascript
vue-dialog的弹出层组件
May 25 Javascript
react-redux中connect()方法详细解析
May 27 Javascript
JavaScript 中使用 Generator的方法
Dec 29 Javascript
vue.js层叠轮播效果的实例代码
Nov 08 Javascript
js实现抽奖的两种方法
Mar 19 Javascript
微信小程序picker组件两列关联使用方式
Oct 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
帖几个PHP的无限分类实现想法~
2007/01/02 PHP
php 截取字符串并以零补齐str_pad() 函数
2011/05/07 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
2014/08/23 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
CSS中简写属性要注意TRouBLe的顺序问题(避免踩坑)
2021/03/09 HTML / CSS
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
window.addEventListener来解决让一个js事件执行多个函数
2012/12/26 Javascript
js toFixed()方法的重写实现精度的统一
2014/03/06 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
Javascript学习笔记之相等符号与严格相等符号
2014/11/23 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
2017/12/18 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
Python面向对象编程中的类和对象学习教程
2015/03/30 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
Linux下通过python获取本机ip方法示例
2019/09/06 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
毕业自我评价
2014/02/05 职场文书
出纳试用期自我鉴定
2014/04/07 职场文书
六年级学生评语大全
2014/12/26 职场文书
保护校园环境倡议书
2015/04/28 职场文书
幼儿园小班教学反思
2016/03/03 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
Python 图片添加美颜效果
2022/04/28 Python