如果响应时间太长,重新启动node.js永久进程

我有永久的脚本来pipe理node.js网站。

有时node.js站点挂起,响应时间超过30秒。 而事实上网站已经closures了。 那么快速治愈就是forever重新开始:

 $ forever restart 3 

其中3forever list脚本编号。

是否有可能自动? 例如,如果响应时间超过2秒,是否有可以重新启动的选项?

或者,也许我得运行外部脚本,这将检查响应时间,并使下降重新启动挂forever脚本。

或者,也许我需要在我的node.js网站内写这个逻辑?

我假设你想要重新启动服务器,如果大部分的答复是花费超过x秒。 有很多工具可以帮助您根据自己的健康状况重新启动您的实例。 Monit就是其中之一。 在本指南中,如果答复在10秒内未回来,请重新启动实例。

如果你想要杀死实例,如果有一个请求,如果有任何的请求太长,那么你记下你接受请求的时间,记下请求离开的时间。 如果时间太长,抛出一个你知道不会被捕获的exception,服务器会自行重启。 如果您使用express,那么请在开发模式下检查其日志logging的代码,因为它会跟踪响应时间。

除了leorex解决scheme之外,我还有类似的事情要发送500个超时请求:

 var writeHead = res.writeHead; var timeout = setTimeout(function () { res.statusCode = 500; res.end('Response timed out'); // To avoid errors being thrown for writes after this, they should be ignored. res.writeHead = res.write = res.end = function () {}; }, 40000); res.writeHead = function () { // This was called in time. clearTimeout(timeout); writeHead.apply(this, arguments); }; 

您可以使用addTimeout模块来取走超时清除部分。

一旦你实现了,你可以随心所欲地处理,你可以调用process.exit(1); 所以永远会立即取代你。

你可以做得更聪明 同样在我的应用程序中,如果发生未被捕获的错误,我会发信号给监督程序进程,这样它会启动另一个工作进程并优雅地closures(closureshttp服务器并等待所有待处理的请求完成)。 您可以在您的应用程序中执行相同的操作,但要确保所有内容都具有超时callback作为故障切换/备份计划。