我已经在 azure 的应用程序服务上部署了一个 Node js Web 应用程序。问题是我的应用程序偶尔会因未知原因被终止。我已经使用 kudu 对所有日志罚款进行了详尽的搜索。
如果我重新启动应用程序服务,应用程序将开始工作。
有什么方法可以在节点应用程序崩溃后重新启动它。无论如何都要永远奔跑。例如,如果部署在 IIS 中的 asp.net 代码发生任何错误,IIS 永远不会崩溃,它会继续为其他传入请求提供服务。
比如在 azure 应用服务中使用forever/pm2。
Azure 应用服务中的 node.js 由以下人员提供支持IISNode https://tomasz.janczuk.org/2011/08/hosting-nodejs-applications-in-iis-on.html,它会处理您所描述的一切,包括监视您的进程是否出现故障并重新启动它。
考虑以下 POC:
var http = require('http');
http.createServer(function (req, res) {
if (req.url == '/bad') {
throw 'bad';
}
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('bye');
}).listen(process.env.PORT || 1337);
如果我将其托管在 Web 应用程序中并发出以下请求序列:
- GET /
- GET /bad
- GET /
然后第一个将产生 HTTP 200,第二个将抛出到服务器上并产生 HTTP 500,第三个将产生 HTTP 200,而无需我执行任何操作。 IISNode 将仅检测崩溃并重新启动进程。
因此,您不需要 PM2 或类似的解决方案,因为它是内置于应用服务中的。但是,如果您真的愿意,他们现在有应用程序服务Preview在 Linux 上,它由 PM2 提供支持并允许您配置 PM2。更多关于此here https://azure.microsoft.com/en-us/documentation/articles/app-service-linux-using-nodejs-pm2/。但你已经把它开箱即用了。
另一件需要考虑的事情是始终开启设置 https://azure.microsoft.com/en-us/documentation/articles/web-sites-configure/默认情况下处于打开状态:
默认情况下,如果 Web 应用程序闲置一段时间,就会卸载它们。这可以让系统节省资源。在基本或标准模式下,您可以启用始终开启以保持应用程序始终加载。如果您的应用程序运行连续的 Web 作业,您应该启用 Always On,否则 Web 作业可能无法可靠运行。
这是问题的另一个可能的根本原因,解决方案是禁用 Web 应用程序的“始终开启”(请参阅上面的链接)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)