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è)請求中的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)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Node.js實(shí)現(xiàn)前端后端數(shù)據(jù)傳輸加密解密
這篇文章主要介紹了Node.js實(shí)現(xiàn)前端后端數(shù)據(jù)傳輸加密解密,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08Node.js操作MySQL8.0數(shù)據(jù)庫無法連接的問題解決
使用node.js連接數(shù)據(jù)庫MySQL 8時(shí)候,顯示報(bào)錯(cuò) ER_NOT_SUPPORTED_AUTH_MODE,本文就來介紹一下解決方法,感興趣的可以了解一下2023-10-10node.js中的querystring.unescape方法使用說明
這篇文章主要介紹了node.js中的querystring.unescape方法使用說明,本文介紹了querystring.unescape的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12NodeJS實(shí)現(xiàn)阿里大魚短信通知發(fā)送
本文給大家介紹的是nodejs實(shí)現(xiàn)使用阿里大魚短信API發(fā)送消息的方法和代碼,有需要的小伙伴可以參考下。2016-01-01安裝 node-Sass 報(bào)錯(cuò)的解決記錄(三步解決法)
本文主要介紹了安裝 node-Sass 報(bào)錯(cuò)的解決記錄(三步解決法),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05Koa從零搭建到Api實(shí)現(xiàn)項(xiàng)目的搭建方法
這篇文章主要介紹了Koa從零搭建到Api實(shí)現(xiàn)項(xiàng)目的搭建方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07