node.js中cluster的使用教程
本文主要給大家介紹了關(guān)于node.js中cluster使用的相關(guān)教程,分享出來供大家參考學(xué)習(xí),下面來看看詳細(xì)的介紹:
一、使用NODE中cluster利用多核CPU
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// 創(chuàng)建工作進(jìn)程
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('death', function(worker) {
console.log('worker ' + worker.pid + ' died');
cluster.fork();//重啟子進(jìn)程
});
} else {
// 工作進(jìn)程創(chuàng)建http 服務(wù)器
http.Server(function(req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(8000);
} 二、通過消息傳遞來監(jiān)控工作進(jìn)程狀態(tài)
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 {
// 服務(wù)器
http.createServer(function(req,res) {
res.writeHead(200);
res.end('hello world\n')
}).listen(8000)
// 每秒報(bào)告一次狀態(tài)
setInterval(function report(){
process.send({memory: process.memoryUsage(), process: process.pid});
}, 1000)
} 三、終止進(jìn)程
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 {
// 服務(wù)器
http.Server(function(req,res) {
// 打亂200 個(gè)請(qǐng)求中的1 個(gè)
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)
// 每秒鐘報(bào)告一次狀態(tài)
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)
// 允許開機(jī)時(shí)間
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.')
}
}
})
} 總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
node-sass@4.14.1報(bào)錯(cuò)的最終解決方案分享
最近在安裝node-sass@4.14.1的時(shí)候遇到了些問題,所以下面這篇文章主要給大家介紹了關(guān)于node-sass@4.14.1報(bào)錯(cuò)的最終解決方案,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
Node.js包管理器代理工具Verdaccio輕松創(chuàng)建管理本地npm包倉庫
這篇文章主要為大家介紹了Node.js包管理器代理工具Verdaccio輕松創(chuàng)建管理本地npm包倉庫的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Node.js用readline模塊實(shí)現(xiàn)輸入輸出
在學(xué)C++的時(shí)候,有cout和cin,Java也有println和Scanner控件,Node.js也有如同C++和Java的標(biāo)準(zhǔn)輸入,當(dāng)然,是用JavaScript實(shí)現(xiàn)的,它就是Readline模塊。下面這篇文章就給大家詳細(xì)介紹一下readline模塊,來實(shí)現(xiàn)Node.js的控制臺(tái)輸入輸出。有需要的可以參考借鑒。2016-12-12

