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.') } } }) }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
上一篇: Spring Boot中使用MongoDB数据库的方法
下一篇: MVC框架是什么 这里为你解答