2011-10-21 36 views
3

私のnode.jsアプリケーションはexpress、socket.ioを使用し、mongooseからmongodbに話します。これらはすべて、低CPU使用率で正常に動作しています。 私はクラスタでアプリケーションを稼働させてもうまく動作しますが、CPU使用率は非常に高くなります。ここに私がやっていることがあります。node.jsクラスタが高速で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をチェックすると、私はworkers.access.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 

を参照してください、私は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からへのポイント

EDIT: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); 

答えて

4

あなたが同じポートを使用して、労働者をバインドしようとしているように見え、それが労働者をクラッシュされていますが、クラスタは、労働者を再起動されます。あなたは無限の死のサイクルに入っています。

server.jsファイルにapp.listen(9999)が必要かどうかはわかりません。おそらく、すべてのワーカーでポート9999をバインドしようとしています。適切な例については、クラスタパッケージの例を参照してください。https://github.com/LearnBoost/cluster/blob/master/examples/express.js

+0

ありがとう。あなたの説明は私にとって意味があります。労働者をどのようにして別の港に縛ることができるか、私にいくつか指摘してください。 – user644745

+0

server.jsファイルにapp.listen(9999)が必要かどうかはわかりません。おそらく、すべてのワーカーでポート9999をバインドしようとしています。私はクラスターが既にあなたのためのポートをバインドしていると思う。あなたがgithubを持っているなら私はコードのためにそれを修正し、おそらくそれを修正します。この例を見て、それが役立つかどうかを見てください:https://github.com/LearnBoost/cluster/blob/master/examples/express.js – EhevuTov

+0

私のコードはgithubにはありません。私はコードからいくつかの行をコピーして貼り付けて質問を編集しました。それが十分であるかどうかわからない。 app.listen(9999)をコメントアウトすると、要求がタイムアウトします。 – user644745