长时间运行Node.js进程在运行几天后变慢

我正在EC2上运行node.js脚本来监视和运行节点HTTP服务器作为subprocess。

不幸的是这个子服务器慢慢减速,请求花费0.2秒开始拖出,几天后同样的请求花费2秒钟。

作为debugging的一部分,我实现了一个2小时重新启动来杀死子服务器,并启动另一个。 这没有效果! HTTP服务器subprocess重新启动,但仍然很慢! 只有重新启动这个父脚本才能让孩子更快。

为什么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); 

如果EC2实例是一个Micro实例,并且你在高cpu下运行超过15秒钟,那么你将会受到严重的限制。 这将解释这些症状。 解决办法是扩大到一个小例子。 (它不一定是消耗CPU周期的节点进程)。