我永远得到了管理node.js
网站的脚本。
有时node.js
网站会挂起,响应时间会超过30秒。实际上网站已经关闭。然后快速治愈它正在重新启动forever
:
$ forever restart 3
其中3
是forever list
中的脚本编号。
是否可以自动制作?如果响应时间超过2秒,forever
中是否有选项可以重新启动?
或者我可能需要运行外部脚本来检查响应时间并使下降重新挂起forever
脚本。
或者我可能需要在node.js
网站内写这个逻辑吗?
答案 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服务器并等待所有挂起的请求完成)。您可以在应用程序中执行相同操作,但请确保所有内容都具有超时回调作为故障转移/备份计划。