我在EC2上运行node.js脚本来监视并运行节点HTTP服务器作为子进程。
不幸的是,这个子服务器缓慢减速,花费0.2秒的请求开始拖出,经过几天相同的请求超过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);
答案 0 :(得分:1)
如果EC2实例是Micro实例,并且您在高CPU运行超过约15秒的使用时间,那么您将受到限制(严重)。这可以解释症状。解决方案是扩展到一个小实例。 (它不一定是消耗cpu周期的Node进程)。