nodejs中cluster使用
来源:互联网 发布:后期制作软件 编辑:程序博客网 时间:2024/05/16 11:13
摘自<node.js即学即用>第3章
使用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.') } } })}
0 0
- nodejs中cluster使用
- nodejs中cluster的运用
- 【NodeJs】NodeJs中使用highstock
- 关于Nodejs Cluster全局变量
- NodeJS中使用shell
- Nodejs中使用Log4js
- nodejs中使用hashmap
- nodejs 中使用 ftp
- nodejs中使用mongodb
- Nodejs中使用Log4js
- Nodejs中Log4js使用
- 玩转nodeJS系列:使用cluster创建nodejs单机多核集群(多进程)
- NodeJs: 使用cluster创建nodejs单机多核集群(多进程)
- nodejs 多核处理模块cluster
- Nodejs cluster模块深入探究
- Oracle中Cluster Table的使用
- Oracle中Cluster Table的使用
- Oracle中Cluster Table的使用
- php扩展开发
- getWritableDatabase()和getReadableDatabase()方法区别
- JZOJ 4223.旅游
- 多路径后创建文件系统
- 代码块
- nodejs中cluster使用
- linux type
- Andriod源码下载与编译
- 压力测试的思路和方法小结
- 我需要把数据库的数据以图表的形式(饼状,线状,柱状)显示出来,不知道django下面有没有比较好用的一些插件工具或者自带的类等等
- cocos2d-x截屏
- Educational Codeforces Round 6 620C Pearls in a Row
- Add Two Number
- 实现对象的复用——享元模式(五):单纯、复合享元模式,享元模式总结