如果响应时间太大,请重新启动node.js

时间:2014-05-17 16:13:10

标签: node.js forever

我永远得到了管理node.js网站的脚本。

有时node.js网站会挂起,响应时间会超过30秒。实际上网站已经关闭。然后快速治愈它正在重新启动forever

$ forever restart 3

其中3forever list中的脚本编号。

是否可以自动制作?如果响应时间超过2秒,forever中是否有选项可以重新启动?

或者我可能需要运行外部脚本来检查响应时间并使下降重新挂起forever脚本。

或者我可能需要在node.js网站内写这个逻辑吗?

2 个答案:

答案 0 :(得分:3)

我假设您要重新启动服务器,如果大多数回复时间超过x秒。有许多工具可以帮助您根据健康状况重新启动实例。 Monit就是其中之一。在this指南中,如果回复未在10秒内返回,则monit重新启动实例。

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

答案 1 :(得分:1)

除了leorex solution之外,我之前有类似的事情要发送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);,以便永远立即取代您。

你可以让这更聪明。同样在我的应用程序中,如果发生未被捕获的错误,我会通知主管进程,以便它将启动另一个工作进程并正常关闭(关闭http服务器并等待所有挂起的请求完成)。您可以在应用程序中执行相同操作,但请确保所有内容都具有超时回调作为故障转移/备份计划。