node.js中cluster的使用教程,node.jscluster

來源:互聯網
上載者:User

node.js中cluster的使用教程,node.jscluster

本文主要給大家介紹了關於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.')       }     }   }) } 

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的協助,如果有疑問大家可以留言交流,謝謝大家對幫客之家的支援。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.