首页 新闻 会员 周边 捐助

升级到.net core 3.0 Preview 7之后,高峰期部分请求返回慢

1
悬赏园豆:50 [已解决问题] 解决于 2019-08-09 09:41

上次发了个博问,@dudu 大佬建议升级到3.0,我们升级3.0之后,总体来说确实是快了,但在流量高峰期时,部分客户反馈系统打开的时候空白页,我们监控到是有些请求返回超级慢,导致数据没有及时返回,所以页面空白(我们是单页面应用),目前我们只部署在windows下面,不是docker。我怀疑是core 3.0的web服务器有问题,2.2根本就不会这样,我们写了个全局中间件,专门记录每个请求时间花销,那些返回慢的请求,没有出现在请求时间长的日志,所以我怀疑是web服务器Kestrel的问题。

还有,3.0经常报下面这些错误,2.2根本就没有出现过:

服务器异常!请求Id:0HLOQ0JIQV3LG:00000001,请求:POST /workflow/GetWFDataInstances/,异常类型:Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException,异常信息:Unexpected end of request content.,堆栈信息: at Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException.Throw(RequestRejectionReason reason)
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1ContentLengthMessageBody.ReadAsyncInternal(CancellationToken cancellationToken)
at Microsoft.AspNetCore.WebUtilities.FormPipeReader.ReadFormAsync(CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Features.FormFeature.InnerReadFormAsync(CancellationToken cancellationToken)
at Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProviderFactory.AddValueProviderAsync(ValueProviderFactoryContext context)
at Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.CreateAsync(ActionContext actionContext, IList`1 factories)
at Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.CreateAsync(ControllerContext controllerContext)
at Microsoft.AspNetCore.Mvc.Controllers.ControllerBinderDelegateProvider.<>c__DisplayClass0_0.<<CreateBinderDelegate>g__Bind|0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)

还有就是,我们是从.net framework 移植过来的,mvc里很多Action没有使用使用异步( async await),这个不会有影响吧?

有园友说设置一下最小线程池,ThreadPool.SetMinThreads,你们使用.net core 高并发请求的都要这样设置吗?

Alan_Liu的主页 Alan_Liu | 初学一级 | 园豆:61
提问于:2019-08-06 11:22

上面贴的报错,我们重现了,是客户端主动取消了请求,比如打开页面,有些请求还在处理,但是这时候又强制刷新了页面,就会出现上面的报错

Alan_Liu 5年前

今天看了下博客园的故障,跟我们的不一样

Alan_Liu 5年前

检查一下,有没有异步未等待的调用

刘发源 5年前

@刘发源: 好的

Alan_Liu 5年前
< >
分享
最佳答案
0

应用越来越慢的问题已经找到原因了:https://q.cnblogs.com/q/117260/

Alan_Liu | 初学一级 |园豆:61 | 2019-08-09 09:40
其他回答(2)
0

我遇到的是redis经常出现连接超时。最后改了ThreadPool.SetMinThreads解决了(不是code3.0 是core2.1)

收获园豆:25
通信的搞程序 | 园豆:1757 (小虾三级) | 2019-08-06 12:26

我们用到redis的模块确实很多连接超时,是StackExchange.Redis这个库在.net core 下有问题。

支持(0) 反对(0) Alan_Liu | 园豆:61 (初学一级) | 2019-08-06 12:37
0

我们发布 .net core 3.0 preview 7 版的博客站点,也在日志中发现了很多这样的错误

收获园豆:25
dudu | 园豆:30925 (高人七级) | 2019-08-08 13:02

这个好像是正常的,客户端主动取消的请求好像就会报这个错

支持(0) 反对(0) Alan_Liu | 园豆:61 (初学一级) | 2019-08-09 09:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册