我有以下设置:在应用程序负载均衡器(AWS)后面的两个linux容器(构建在aspnetcore 2.0.5上)中运行的web
使用HttpClient向该api提出请求的客户端。客户端并行运行对多个任务的调用。如果并行任务的数量增加,api将开始抛出消息“请求超时”的异常。
调用堆栈是:
Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.PipeCompletion.ThrowFailed() at 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() at Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.ReadableBufferAwaitable.GetResult() at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.MessageBody.d__24.MoveNext() --从抛出异常的前一个位置开始的堆栈跟踪的结束--在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务中)在Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Frame`1.d__2.MoveNext()。
是什么导致了这个错误,是谁设置了一个超时,我如何进一步研究这个问题?
编辑:如果我尝试fiddler来捕获失败的请求,错误就不会再抛出了(也许fiddler正在以较小的并行度打开连接)。
发布于 2018-03-08 14:11:31
一个可能的原因是I/O绑定操作,您正在阻塞asp.net线程。从问题描述来看,您的服务器似乎一直在处理请求到一定程度。除此之外,它无法做到这一点。
我认为,如果您正确地使用异步/等待,那么您可以提供比当前限制更多的并发请求。
如果可以增加Asp.Net线程的值,也可以通过配置检查这一点。传统的Asp.Net支持这一点。不确定Asp.Net核心是否有此功能。
最后,由于您在云中运行,请检查升级服务器配置的可行性。可能升级后的配置会帮助您服务器上更多的请求。显然这应该是最后的选择。首先,将重点放在使用现有硬件提高应用程序的性能上。
https://stackoverflow.com/questions/49167759
复制相似问题