`
longzhun
  • 浏览: 371541 次
  • 性别: 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. }  
分享到:
评论

相关推荐

    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”的返回错误...

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

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

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

    `nodejs-cluster-uri` 是一个专门设计用于从集群中选择服务节点的库,它通过使用 URI(统一资源标识符)来定义不同的服务条目。URI 是一种标准格式,用于唯一地标识互联网上的资源。这个库将 URI 的概念引入到服务...

    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学习笔记和代码

    5. **集群(Cluster)**:NodeJS的集群模块可以利用多核CPU,提高服务性能。 至于`nodedemo`,这可能是一个包含实际代码示例的文件或目录,可能涵盖如下内容: 1. **Hello World**:基础的HTTP服务器示例,展示如何...

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

    "nodejs-cluster" 模块是 Node.js 内置的,它允许你创建一个主进程(master process),该主进程可以管理多个工作进程(worker processes)。这些工作进程可以共享相同的端口,并且能够分配接收的网络请求,实现负载...

    NodeJS开发指南_nodejs开发指南_

    NodeJS是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用JavaScript进行服务器端编程,打破了JavaScript只能在浏览器中运行的传统。本指南将深入探讨NodeJS的核心概念、开发工具、模块系统、网络编程...

    nodejs进程通信--pm2 cluster方式

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

    nodejs-api 中文文档

    这个文档详尽地涵盖了各种API的使用方法和相关概念,帮助开发者在实践中有效地运用Node.js。每个章节都专注于一个特定的模块或高级概念,如Buffer、Child Processes、Cluster、Console、Crypto、Debugger、DNS、...

    NodeJS实现服务器监控工具.zip

    NodeJS的cluster模块可以用来充分利用多核CPU,提高服务性能。 10. **部署与监控**:最后,部署和持续监控工具自身的行为也是关键。可以使用PM2这样的进程管理工具确保服务的稳定运行,同时配合Prometheus或Grafana...

    Nodejs学习笔记.rar

    10. **WebSocket**:如果笔记深入到实时通信,可能会介绍如何在Node.js中使用WebSocket库如ws实现双向通信。 11. **错误处理**:在Node.js中,错误处理是至关重要的。笔记会讲解如何正确捕获和处理错误,以确保程序...

    Nodejs最新API文档

    在"Nodejs最新API文档"中,我们可以找到关于Node.js 4.0版本的所有官方API接口及其用法。这个版本是Node.js发展中的一个重要里程碑,引入了许多改进和新特性,旨在提升性能和稳定性。以下是一些关键的知识点: 1. *...

    nodejs:nodejs中文文档

    9. **异步编程**:Node.js 中大量使用回调函数进行异步操作,但也会导致回调地狱问题,解决方案有 Promise、async/await 等,它们提高了异步代码的可读性和可维护性。 10. **性能监控**:Node.js 提供了如 `process...

    Node.js中的cluster模块深入解读

    NodeJS引入了Cluster模块试图简化这些体力劳动,使用Cluster模块可以运行并管理多个实例进程,下面这篇文章主要给大家介绍了关于Node.js中cluster模块的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧

    NodeJS实战

    NodeJS实战:深入理解与应用 Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它以其事件驱动、非阻塞I/O模型而闻名,尤其适合用于构建高效、可伸缩的网络应用程序。本实战指南旨在帮助开发者从零基础开始,...

    一个前端工程师眼里的NodeJS.docx

    此外,NodeJS的`cluster`模块是另一个解决方案,它允许NodeJS应用程序根据可用的CPU核心数自动创建并管理多个工作进程,共享同一套服务器端口,进一步提升了处理高并发的能力。这个功能在最新版本的NodeJS中得到了...

    NodeJS代码

    Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程。这个技术的出现,打破了JavaScript只能在浏览器中运行的传统,为全栈开发提供了可能。Node.js采用事件驱动、...

    Nodejs-API-中文文档.pdf

    * 模块系统:Node.js 提供了一个模块系统,允许开发者创建和使用自己的模块 * require 函数:用于加载模块 * module 对象:提供了对模块的访问和操作 Events * 事件驱动模型:Node.js 采用事件驱动模型,允许...

Global site tag (gtag.js) - Google Analytics