摘自<Node.js即学即用>第3章
使用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-redis-cluster redis3.0 的 nodejs 扩展,支持基于 nodejs npm redis url 的集群: : 更改日志 当我们向 redis 集群的一个节点发送命令时,我们可能会收到类似“ERR: MOVED 111 127.0.0.1:6379”的返回错误...
本篇文章主要介绍了Nodejs中解决cluster模块的多进程如何共享数据问题,有需要的可以了解一下。
`nodejs-cluster-uri` 是一个专门设计用于从集群中选择服务节点的库,它通过使用 URI(统一资源标识符)来定义不同的服务条目。URI 是一种标准格式,用于唯一地标识互联网上的资源。这个库将 URI 的概念引入到服务...
docker-nginx-nodejs-集群测试 一个具有nginx + 4个节点进程(2个单进程和2个集群进程)的Docker容器。 因此,在4个TCP端口上,后端总数为6。 Docker容器 Nginx(80) backend1(8000):1个单进程 backend2(8001...
5. **集群(Cluster)**:NodeJS的集群模块可以利用多核CPU,提高服务性能。 至于`nodedemo`,这可能是一个包含实际代码示例的文件或目录,可能涵盖如下内容: 1. **Hello World**:基础的HTTP服务器示例,展示如何...
"nodejs-cluster" 模块是 Node.js 内置的,它允许你创建一个主进程(master process),该主进程可以管理多个工作进程(worker processes)。这些工作进程可以共享相同的端口,并且能够分配接收的网络请求,实现负载...
NodeJS是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用JavaScript进行服务器端编程,打破了JavaScript只能在浏览器中运行的传统。本指南将深入探讨NodeJS的核心概念、开发工具、模块系统、网络编程...
nodejs进程通信--pm2 cluster方式, pm2版本 2.4.2,node 版本 v7.5.0
这个文档详尽地涵盖了各种API的使用方法和相关概念,帮助开发者在实践中有效地运用Node.js。每个章节都专注于一个特定的模块或高级概念,如Buffer、Child Processes、Cluster、Console、Crypto、Debugger、DNS、...
NodeJS的cluster模块可以用来充分利用多核CPU,提高服务性能。 10. **部署与监控**:最后,部署和持续监控工具自身的行为也是关键。可以使用PM2这样的进程管理工具确保服务的稳定运行,同时配合Prometheus或Grafana...
10. **WebSocket**:如果笔记深入到实时通信,可能会介绍如何在Node.js中使用WebSocket库如ws实现双向通信。 11. **错误处理**:在Node.js中,错误处理是至关重要的。笔记会讲解如何正确捕获和处理错误,以确保程序...
在"Nodejs最新API文档"中,我们可以找到关于Node.js 4.0版本的所有官方API接口及其用法。这个版本是Node.js发展中的一个重要里程碑,引入了许多改进和新特性,旨在提升性能和稳定性。以下是一些关键的知识点: 1. *...
9. **异步编程**:Node.js 中大量使用回调函数进行异步操作,但也会导致回调地狱问题,解决方案有 Promise、async/await 等,它们提高了异步代码的可读性和可维护性。 10. **性能监控**:Node.js 提供了如 `process...
NodeJS引入了Cluster模块试图简化这些体力劳动,使用Cluster模块可以运行并管理多个实例进程,下面这篇文章主要给大家介绍了关于Node.js中cluster模块的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧
NodeJS实战:深入理解与应用 Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它以其事件驱动、非阻塞I/O模型而闻名,尤其适合用于构建高效、可伸缩的网络应用程序。本实战指南旨在帮助开发者从零基础开始,...
此外,NodeJS的`cluster`模块是另一个解决方案,它允许NodeJS应用程序根据可用的CPU核心数自动创建并管理多个工作进程,共享同一套服务器端口,进一步提升了处理高并发的能力。这个功能在最新版本的NodeJS中得到了...
Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程。这个技术的出现,打破了JavaScript只能在浏览器中运行的传统,为全栈开发提供了可能。Node.js采用事件驱动、...
* 模块系统:Node.js 提供了一个模块系统,允许开发者创建和使用自己的模块 * require 函数:用于加载模块 * module 对象:提供了对模块的访问和操作 Events * 事件驱动模型:Node.js 采用事件驱动模型,允许...