gpt4 book ai didi

c# - AspNetCore (Kestrel) 请求超时

转载 作者:太空狗 更新时间:2023-10-29 20:40:59 27 4
gpt4 key购买 nike

我有以下设置:在应用程序负载均衡器 (AWS) 后面的几个 linux 容器(基于 aspnetcore 2.0.5 构建)中运行的 web api

正在使用 HttpClient 向此 api 发出请求的客户端。客户端正在并行运行对多个任务的调用。如果并行任务的数量增加,API 将开始抛出异常并显示消息“请求超时”。

调用栈是:

at Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.PipeCompletion.ThrowFailed() at Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.Pipe.GetResult(ReadResult& result) at 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() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Frame`1.d__2.MoveNext()

什么会导致此错误,谁在设置超时,我该如何进一步调查?

编辑:如果我尝试用 fiddler 捕获失败的请求,则不会再抛出错误(可能 fiddler 正在以较低的并行度打开连接)。

最佳答案

一个可能的原因是由于 I/O 绑定(bind)操作,您阻塞了 asp.net 线程。从问题描述来看,您的服务器似乎正在处理特定点的请求。除此之外,它无法做到这一点。

我认为如果您正确使用 Async/Await,那么您可以处理比当前限制更多的并发请求数。

还要检查一下,通过配置是否可以增加 Asp.Net 线程数。传统的 Asp.Net 支持这一点。不确定 Asp.Net Core 是否具有此功能。

最后,由于您在云端运行,请检查升级服务器配置的可行性。可能升级的配置将帮助您处理更多请求。显然这应该是最后的选择。首先关注使用现有硬件提高应用程序的性能。

关于c# - AspNetCore (Kestrel) 请求超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49167759/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com