EC2でnode.jsスクリプトを実行して、ノードHTTPサーバーを子プロセスとして監視および実行しています。実行中Node.jsプロセスの実行が遅くなる
残念なことに、この子サーバーはゆっくりと速度が低下します。同じ要求が2秒以上かかると、0.2秒かかる要求はドラッグアウトを開始します。
このデバッグの一環として、子サーバーを強制終了して別のサーバーを起動するために2時間の再起動を実装しました。これは効果がありません! HTTPサーバーの子プロセスが再起動されますが、まだ遅いです!この親スクリプトを再起動するだけで、子がより速くなります。
なぜ、HTTPサーバーが強制終了され、再起動されても速度が低下しますか?
環境はEC2 Ubuntuサーバー上で0.4.9 Node.jsです。親スクリプトは以下の通りです。
var http = require('http');
var server,
firstOperated = null;
lastOperated = null;
function operating(str) {
return (str.toString().substring(0, 13) != 'SERVER ONLINE') ? log(str) :
lastOperated = new Date();
}
function log(str) {
str = str.toString('utf8');
if (str.length) console.log(str.replace(/\n+$/gim, ''));
}
function createServer() {
if (server) {
server.kill('SIGKILL');
return console.log('KILLED NON RESPONSIVE SERVER');
}
server = require('child_process').spawn('node', [__dirname + '/http.js', 80]);
firstOperated = new Date();
server.stdout.on('data', operating);
server.stderr.on('data', log);
server.on('exit', function(code) {
lastOperated = null;
server = null;
console.log("SERVER EXITED: " + code);
});
}
createServer();
setInterval(function() {
if (new Date() - firstOperated > 1000 * 60 * 60 * 2) return createServer();
if (new Date() - lastOperated < 5 * 1000) return; // server seems to be operating ok
createServer();
}, 5 * 1000);
createServer()を呼び出すたびにrequire( 'child_process')を呼び出すのはなぜですか? createServer()の外部でrequire( 'child_process')を呼び出すと、改善されますか? – Ivan