高负载下Azure App Service中.NET API启动挂起问题及解决
Azure App Service托管.NET API高负载启动挂起问题及解决
问题现象
- 使用单实例P2v3规格,正常负载下应用启动无异常;当负载升高至约100req/s时,启动过程会挂起,且无法自行恢复
- 应用启动耗时5-10秒,挂起时所有请求均超时,应用日志中无请求接收记录,仅存在请求转发超时日志
- 日志中频繁出现以下内容:
Failed to forward request to http://xxx.xxx.xxx.3:8080. Encountered a System.Threading.Tasks.TaskCanceledException exception after 300002.419ms with message: The request was cancelled due to the configured HttpClient.Timeout of 300 seconds elapsing.. Check application logs to verify the application is properly handling HTTP traffic.
- 应用已输出
now listening on...启动完成日志,但前端返回503、504、500混合状态码;曾出现15分钟日志空白期,期间仅能看到上述超时日志
临时恢复手段
采用部署至冷插槽,待应用预热完成后进行插槽交换的方式恢复服务
本地复现与优化尝试
已在本地环境复现该问题;将本地启动时间从约3分钟缩短至10秒后,本地可正常处理高负载请求
最终解决方案
即使将启动时间优化至10秒,高负载生产环境下问题仍存在;部署至少3个应用服务实例后,该问题未再出现
内容的提问来源于stack exchange,提问作者acandylevey
相关产品推荐
相关产品推荐

