node.js中cluster的使用教程

前端之家收集整理的这篇文章主要介绍了node.js中cluster的使用教程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本文主要给大家介绍了关于node.js中cluster使用的相关教程,分享出来供大家参考学习,下面来看看详细的介绍:

一、使用NODE中cluster利用多核cpu

cpus = 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); }

二、通过消息传递来监控工作进程状态

cpus = require('os').cpus().length; var RSSWarn = (12 * 1024 * 1024),heapWarn = (10 * 1024 * 1024) if(cluster.isMaster) { for(var i=0; i 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)
}

三、杀死僵尸进程

cpus = require('os').cpus().length; var RSSWarn = (50 * 1024 * 1024),heapWarn = (50 * 1024 * 1024) var workers = {} if(cluster.isMaster) { for(var i=0; icpus; 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.') } } }) }

总结

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

原文链接:https://www.f2er.com/nodejs/38743.html

猜你在找的Node.js相关文章