簡體   English   中英

node.js表示集群和高CPU使用率

[英]node.js express cluster and high CPU usage

我的node.js應用程序使用express,socket.io並通過mongoose與mongodb對話。 所有這些工作正常,CPU使用率低。 當我使用集群運行應用程序時,它運行正常,但CPU使用率確實非常高。 這就是我在做的事情。

var settings = require("./settings"),
    cluster = require('cluster');

cluster('./server')
  .use(cluster.logger('logs'))
  .use(cluster.stats())
  .use(cluster.pidfiles('pids'))
  .use(cluster.cli())
  .use(cluster.repl(8888))
  .listen(7777);

當我檢查master.log時,我明白了

[Fri, 21 Oct 2011 02:59:51 GMT] INFO master started
[Fri, 21 Oct 2011 02:59:53 GMT] ERROR worker 0 died
[Fri, 21 Oct 2011 02:59:53 GMT] INFO spawned worker 0
[Fri, 21 Oct 2011 02:59:54 GMT] ERROR worker 0 died
[Fri, 21 Oct 2011 02:59:54 GMT] INFO spawned worker 0
[Fri, 21 Oct 2011 02:59:56 GMT] ERROR worker 0 died
[Fri, 21 Oct 2011 02:59:56 GMT] INFO spawned worker 0
.....

[Fri, 21 Oct 2011 03:11:08 GMT] INFO spawned worker 0
[Fri, 21 Oct 2011 03:11:10 GMT] WARNING shutting down master
[Fri, 21 Oct 2011 03:12:07 GMT] INFO spawned worker 0
[Fri, 21 Oct 2011 03:12:07 GMT] INFO spawned worker 1
[Fri, 21 Oct 2011 03:12:07 GMT] INFO master started
[Fri, 21 Oct 2011 03:12:09 GMT] ERROR worker 1 died
[Fri, 21 Oct 2011 03:12:09 GMT] INFO spawned worker 1
[Fri, 21 Oct 2011 03:12:10 GMT] ERROR worker 1 died
[Fri, 21 Oct 2011 03:12:10 GMT] INFO spawned worker 1

在workers.access.log中,我看到所有控制台消息,socket.io日志等...

在workers.error.log中,我看到以下錯誤消息,看起來有些不對勁......

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
Error: EADDRINUSE, Address already in use
    at HTTPServer._doListen (net.js:1106:5)
    at net.js:1077:14
    at Object.lookup (dns.js:153:45)
    at HTTPServer.listen (net.js:1071:20)
    at Object.<anonymous> (/cygdrive/c/HTML5/RENT/test/server/server.js:703:5)
    at Module._compile (module.js:402:26)
    at Object..js (module.js:408:10)
    at Module.load (module.js:334:31)
    at Function._load (module.js:293:12)
    at require (module.js:346:19)

server.js:703 - 指向app.listen(9999);

編輯:server.js代碼

var express = require("express"),
    fs = require("fs"),
    form = require('connect-form'),
    app = module.exports = express.createServer(
        form({ keepExtensions: true })
    ),
    sys = require("sys"),
    RentModel = require("./rent_schema"),
    UserModel   = require("./track_schema"),
    email   = require("./email_connect"),
    SubscriptionModel = require("./subscription_schema"),
    io = require("socket.io"),
    fb = require('facebook-js'),
    Twitter = require('./Twitter_Analysis'),
    Foursquare = require('./Foursquare_Analysis'),
    YQL = require("yql"),
    settings = require("./settings");
//    


 var cluster = require('cluster');
 cluster(app)
  .use(cluster.logger('logs'))
  .use(cluster.stats())
  .use(cluster.pidfiles('pids'))
  .use(cluster.cli())
  .use(cluster.debug())
  .use(cluster.repl(settings.ADMIN_PORT))
  .listen(settings.PORT);



socket = io.listen(app);
.....
.....
//app.listen(settings.PORT);

看起來您正試圖將您的工作人員綁定到同一個端口,這會導致工作人員崩潰,但群集正在重新啟動工作人員。 所以你處在一個無限的死亡循環中。

我不確定你的server.js文件中是否需要app.listen(9999),這可能是試圖在所有工作者中綁定端口9999。 請參閱集群包中的示例以獲取一個很好的示例: https//github.com/LearnBoost/cluster/blob/master/examples/express.js

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM