欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

node.js中cluster的使用教程

程序员文章站 2022-07-05 20:30:58
本文主要给大家介绍了关于node.js中cluster使用的相关教程,分享出来供大家参考学习,下面来看看详细的介绍: 一、使用node中cluster利用多核cpu...

本文主要给大家介绍了关于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.') 
      } 
    } 
  }) 
} 

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。