私の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);
ありがとう。あなたの説明は私にとって意味があります。労働者をどのようにして別の港に縛ることができるか、私にいくつか指摘してください。 – user644745
server.jsファイルにapp.listen(9999)が必要かどうかはわかりません。おそらく、すべてのワーカーでポート9999をバインドしようとしています。私はクラスターが既にあなたのためのポートをバインドしていると思う。あなたがgithubを持っているなら私はコードのためにそれを修正し、おそらくそれを修正します。この例を見て、それが役立つかどうかを見てください:https://github.com/LearnBoost/cluster/blob/master/examples/express.js – EhevuTov
私のコードはgithubにはありません。私はコードからいくつかの行をコピーして貼り付けて質問を編集しました。それが十分であるかどうかわからない。 app.listen(9999)をコメントアウトすると、要求がタイムアウトします。 – user644745