我正在进行以下设置:在应用程序负载均衡器(AWS)后面的几个Linux容器(构建在aspnetcore 2.0.5上)中运行的web api
使用HttpClient向此api发出请求的客户端。客户端并行运行多个任务的调用。如果并行任务的数量增加,则api开始抛出异常并显示消息“请求超时。”
调用堆栈是:
在 Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.PipeCompletion.ThrowFailed() 在 Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.Pipe.GetResult(ReadResult&安培; 结果)在 Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.Pipe.Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.IReadableBufferAwaiter.GetResult() 在 Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.ReadableBufferAwaitable.GetResult() 在 Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.MessageBody.d__24.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Frame`1.d__2.MoveNext()
导致此错误的是什么,谁设置了超时,我该如何进一步调查?
编辑:如果我尝试使用fiddler来捕获失败的请求,则不再抛出错误(也许fiddler正在以较低程度的并行性打开连接)。
答案 0 :(得分:0)
一个可能的原因是由于I / O绑定操作,您正在阻止asp.net线程。从问题描述看来,您的服务器似乎正在处理请求到某一点。除此之外,它无法做到这一点。
我认为如果您正确使用Async / Await,那么您可以提供比当前限制更多的并发请求。
如果可以增加Asp.Net线程的数量,还可以通过配置检查。传统的Asp.Net支持这一点。不确定Asp.Net Core是否具有此功能。
最后,由于您在云中运行,请检查升级服务器配置的可行性。可能是升级配置将帮助您更多的服务器请求。显然这应该是最后的选择。首先关注使用现有硬件提高应用程序的性能。