`
longzhun
  • 浏览: 360648 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

nodejs中cluster使用

 
阅读更多

摘自<Node.js即学即用>第3章

使用NODE中cluster利用多核CPU

 

[javascript] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. var cluster = require('cluster');  
  2. var http = require('http');  
  3. var numCPUs = require('os').cpus().length;  
  4. if (cluster.isMaster) {  
  5. // 创建工作进程  
  6. for (var i = 0; i < numCPUs; i++) {  
  7. cluster.fork();  
  8. }  
  9. cluster.on('death'function(worker) {  
  10. console.log('worker ' + worker.pid + ' died');  
  11. cluster.fork();//重启子进程  
  12. });  
  13. else {  
  14. // 工作进程创建http 服务器  
  15. http.Server(function(req, res) {  
  16. res.writeHead(200);  
  17. res.end("hello world\n");  
  18. }).listen(8000);  
  19. }  

 

通过消息传递来监控工作进程状态

 

[javascript] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. var cluster = require('cluster');  
  2. var http = require('http');  
  3. var numCPUs = require('os').cpus().length;  
  4. var rssWarn = (12 * 1024 * 1024)  
  5.     , heapWarn = (10 * 1024 * 1024)  
  6. if(cluster.isMaster) {  
  7.     for(var i=0; i<numCPUs; i++) {  
  8.         var worker = cluster.fork();  
  9.         worker.on('message'function(m) {  
  10.             if (m.memory) {  
  11.                 console.log(m.memory.rss,rssWarn)  
  12.                 if(m.memory.rss > rssWarn) {  
  13.                     console.log('Worker ' + m.process + ' using too much memory.')  
  14.                 }  
  15.             }  
  16.   
  17.         })  
  18.     }  
  19. else {  
  20. // 服务器  
  21.     http.createServer(function(req,res) {  
  22.         res.writeHead(200);  
  23.         res.end('hello world\n')  
  24.     }).listen(8000)  
  25. // 每秒报告一次状态  
  26.     setInterval(function report(){  
  27.         process.send({memory: process.memoryUsage(), process: process.pid});  
  28.     }, 1000)  
  29. }  

 

杀死僵尸进程

 

 

[javascript] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. var cluster = require('cluster');  
  2. var http = require('http');  
  3. var numCPUs = require('os').cpus().length;  
  4. var rssWarn = (50 * 1024 * 1024)  
  5.     , heapWarn = (50 * 1024 * 1024)  
  6. var workers = {}  
  7. if(cluster.isMaster) {  
  8.     for(var i=0; i<numCPUs; i++) {  
  9.         createWorker()  
  10.     }  
  11.     setInterval(function() {  
  12.         var time = new Date().getTime()  
  13.         for(pid in workers) {  
  14.             if(workers.hasOwnProperty(pid) &&  
  15.                 workers[pid].lastCb + 5000 < time) {  
  16.                 console.log('Long running worker ' + pid + ' killed')  
  17.                 workers[pid].worker.kill()  
  18.                 delete workers[pid]  
  19.                 createWorker()  
  20.             }  
  21.         }  
  22.     }, 1000)  
  23. else {  
  24. // 服务器  
  25.     http.Server(function(req,res) {  
  26. // 打乱200 个请求中的1 个  
  27.         if (Math.floor(Math.random() * 200) === 4) {  
  28.             console.log('Stopped ' + process.pid + ' from ever finishing')  
  29.             while(true) { continue }  
  30.         }  
  31.         res.writeHead(200);  
  32.         res.end('hello world from ' + process.pid + '\n')  
  33.     }).listen(8000)  
  34. // 每秒钟报告一次状态  
  35.     setInterval(function report(){  
  36.         process.send({cmd: "reportMem", memory: process.memoryUsage(),  
  37.             process: process.pid})  
  38.     }, 1000)  
  39. }  
  40. function createWorker() {  
  41.     var worker = cluster.fork()  
  42.     console.log('Created worker: ' + worker.pid)  
  43. // 允许开机时间  
  44.     workers[worker.pid] = {worker:worker, lastCb: new Date().getTime()-1000}  
  45.     worker.on('message'function(m) {  
  46.         if(m.cmd === "reportMem") {  
  47.             workers[m.process].lastCb = new Date().getTime()  
  48.             if(m.memory.rss > rssWarn) {  
  49.                 console.log('Worker ' + m.process + ' using too much memory.')  
  50.             }  
  51.         }  
  52.     })  
  53. }  
分享到:
评论

相关推荐

    docker-nginx-nodejs-cluster-test:docker,nginx,nodejs集群

    docker-nginx-nodejs-集群测试 一个具有nginx + 4个节点进程(2个单进程和2个集群进程)的Docker容器。 因此,在4个TCP端口上,后端总数为6。 Docker容器 Nginx(80) backend1(8000):1个单进程 backend2(8001...

    Nodejs中解决cluster模块的多进程如何共享数据问题

    本篇文章主要介绍了Nodejs中解决cluster模块的多进程如何共享数据问题,有需要的可以了解一下。

    nodejs-cluster:利用节点集群的示例应用程序

    nodejs集群 利用节点集群的示例应用程序

    nodejs进程通信--pm2 cluster方式

    nodejs进程通信--pm2 cluster方式, pm2版本 2.4.2,node 版本 v7.5.0

    nodejs-cluster-uri:用于从集群中选择服务节点的库,由各种图形条目 URI 定义

    nodejs-集群-uri 用于从集群中选择服务节点的库,由各种图形条目 URI 定义。

    nodejs-redis-cluster:redis3.0的nodejs扩展,支持集群

    nodejs-redis-cluster redis3.0 的 nodejs 扩展,支持基于 nodejs npm redis url 的集群: : 更改日志 当我们向 redis 集群的一个节点发送命令时,我们可能会收到类似“ERR: MOVED 111 127.0.0.1:6379”的返回错误...

    node.js使用cluster实现多进程

    首先郑重声明: nodeJS 是一门单线程!异步!非阻塞语言! nodeJS 是一门单线程!...但,大哥就是大哥,nodeJS在v0.8 的时候就已经加入了cluster的模块。 完全打脸php. 虽然,现在php 也开始抄袭nodeJS, 退出php7, 但

    nodeJs:nodejs学习的相关项目

    Nodejs cluster 多核处理模块cluster Nodejs+socket.io 聊天系统 Nodejs+socket.io 服务器监控 ##Nodejs+express4.x+boostrap web开发 项目地址: 详细参考: ##Nodejs cluster 多核处理模块cluster 项目地址: 详细...

    NodeCluster:了解NodeJS集群模块

    了解NodeJS集群模块 统计数据显示,Node.js作为服务器端运行时环境正变得越来越流行,尤其是对于高流量的网站而言。 而且,几个框架的可用性使其成为快速原型制作的良好环境。 Node.js具有事件驱动的体系结构,利用...

    cluster:如何使用群集模块轻松扩展和平衡负载

    簇如何使用群集模块轻松扩展和负载平衡这是一个非常小的应用程序,它演示了如何... 为了扩展和集群,还有另一个名为clusterdApp.js的文件,该文件实际上是分叉应用程序实例并使用核心nodejs的集群模块创建多个实例的。

    使用cluster 将自己的Node服务器扩展为多线程服务器

    nodejs在v0.6.x之后 增加了一个模块 cluster 用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核CPU机器上的性能表现。本文将介绍利用cluster模块创建的多线程的问题。

    cluster-nodejs-example

    cluster-nodejs-example 版权所有 (c) 2014,Pablo Araya Romero 保留所有权利。 如果满足以下条件,则允许以源代码和二进制形式重新分发和使用,无论是否修改: 源代码的重新分发必须保留上述版权声明、此条件...

    NodeJS父进程与子进程资源共享原理与实现方法

    主要介绍了NodeJS父进程与子进程资源共享原理与实现方法,结合实例形式分析了nodejs基于cluster模块实现父进程与子进程资源共享的相关操作技巧,需要的朋友可以参考下

    Nodejs cluster报错Error [ERR_IPC_CHANNEL_CLOSED]: channel closed

    这个错误是在Master进程向子进程send消息时发现pipe已经关闭了的情况下由Master... at Worker.send (internal/cluster/worker.js:54:28) 经排查这个问题原因是子进程占用内存太多,触发了Linux内核的OOM Killer机制

    node-cache:一个简单的针对nodejs的内存中缓存

    内存缓存 一个简单的针对node.js的内存缓存 安装 npm install memory-cache --save 用法 var cache = require ( 'memory-cache' ) ; // now just use the cache cache ....console ....// that wasn't too interesting, ...

    nodejs高大上的部署方式(PM2)

    如果直接通过node app来启动,如果报错了可能直接停在整个运行,supervisor感觉只是拿来... 内建负载均衡(使用Node cluster 集群模块) 后台运行 0秒停机重载,我理解大概意思是维护升级的时候不需要停机. 具有U

    memshared:类似于Redis的内存数据库,用于NodeJS集群应用程序

    共享 类似于Redis的内存数据库,用于NodeJS集群应用程序。为什么? 将Redis添加为依赖项将不可避免地增加应用程序和环境的复杂性。 如果要保持简单的体系结构,请使用此库,同时在需要时可以迁移到真实的内存数据库...

    用nodejs,express,ejs,mongo,extjs实现了简单了网站后台管理系统

    其实wind模块这次系统中没有使用。可以将它排除出去。我是出于学习wind的目的,才加入这个模块的。 本来准备使用wind模块,是为了实现同步的目的,由于后来改用了fibers模块之后,就没有使用它。这里说明一下 不是...

    node.js中cluster的使用教程

    主要介绍了node.js中cluster的使用教程,分别介绍使用NODE中cluster利用多核CPU、通过消息传递来监控工作进程状态以及杀死僵尸进程等功能,给出了详细的示例代码供大家参考学习,需要的朋友们下面来一起看看吧。

Global site tag (gtag.js) - Google Analytics