node.js中cluster的使用教程
更新时间:2017年6月15日 10:00 点击:2408
本文主要给大家介绍了关于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.') } } }) }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
上一篇: Nodejs回调加超时限制两种实现方法
下一篇: vue2 中如何实现动态表单增删改查实例
相关文章
- 这次文章要给大家介绍的是node.JS md5加密中文与php结果不一致怎么办,不知道具体解决办法的下面跟小编一起来看看。 因项目需要,需要Node.js与PHP做接口调用,发现nod...2017-07-06
- 使用require('crypto')调用加密模块。加密模块需要底层系统提供OpenSSL的支持。它提供了一种安全凭证的封装方式,可以用于HTTPS安全网络以及普通HTTP连接。该模块还提供了一套针对OpenSSL的hash(哈希),hmac(密钥哈希),cipher...2014-06-07
- 本文介绍基于nodejs+express+art-template的留言板功能。包含列表界面、添加界面和发送留言功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-21
- 1.什么是异步编程? 异步编程是指由于异步I/O等因素,无法同步获得执行结果时, 在回调函数中进行下一步操作的代码编写风格,常见的如setTimeout函数、ajax请求等等。示例: for (var i = 1; i <= 3; i++) {setTimeout(functi...2015-10-23
安装使用Mongoose配合Node.js操作MongoDB的基础教程
这篇文章主要介绍了安装使用Mongoose来让Node.js操作MongoDB的基础教程,前端js+后端node+js操作MongoDB正是所谓最流行的一种JavaScript全栈开发方案,需要的朋友可以参考下...2016-03-03- 这篇文章介绍的是一个小技巧来获取node.js项目根目录,这个技巧非常实用。有需要的朋友们可以参考借鉴,下面来一起看看吧。...2016-10-02
- 这篇文章主要为大家详细介绍了node.js从数据库获取数据的具体代码,nodejs可以获取具体某张数据表信息,感兴趣的朋友可以参考一下...2016-05-09
- post请求:复制代码 代码如下: request.post('/api/pet') .end(function(resp,err){ if (resp.body.status===200) { alert('yay got ' + JSON.stringify(res.body)); } else { return nex...2015-03-15
- 这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
- 这篇文章主要介绍了node.js和Deno的区别,对deno感兴趣的同学,可以参考下...2021-04-27
- 这篇文章主要为大家详细介绍了三种Node.js写文件的方式,感兴趣的小伙伴们可以参考一下...2016-03-10
- 这篇文章主要介绍了Node.js之http模块的用法,对Node.js感兴趣的同学,可以参考下...2021-04-25
- 这篇文章主要介绍了node.js 全局变量的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-15
- 本篇文章主要介绍了node.js爬虫爬取拉勾网职位信息的方法。具有很好的参考价值。下面跟着小编一起来看下吧 用node.js写了一个简单的小爬虫,用来爬取拉勾网上的招...2017-07-06
- 这两天为了这个问题, Gitter 上问, Twitter 上问, GitHub 上问, 两天没反应 原来写博客的 jlongster 不理我, 我也不知道 Webpack 作者的联系方式 最后在 Gitter 上发的消息他似乎看到了, 就粗略地解释了一遍, 醍醐灌...2015-10-23
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
这篇文章主要介绍了通过node-mysql搭建Windows+Node.js+MySQL环境的教程,node-mysql是JavaScript编写的一个Node的MySQL驱动,需要的朋友可以参考下...2016-03-03Linux下为Node.js程序配置MySQL或Oracle数据库的方法
这篇文章主要介绍了Linux下为Node.js程序配置MySQL或Oracle数据库的方法,这里默认已经装配好了Node环境然后我们利用npm包管理工具来进行配置,需要的朋友可以参考下...2016-03-22- Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出)。...2016-09-01
- 本文给大家分享的是如何在Node.js中使用jQuery的方法,包含步骤以及出错的处理,非常的详细,有需要的小伙伴可以参考下...2016-09-01
- 这篇文章主要介绍了node.js爬虫框架node-crawler的相关资料,帮助大家利用node.js进行爬虫,感兴趣的朋友可以了解下...2020-10-29