上次发了个博问,@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 高并发请求的都要这样设置吗?
我遇到的是redis经常出现连接超时。最后改了ThreadPool.SetMinThreads解决了(不是code3.0 是core2.1)
我们用到redis的模块确实很多连接超时,是StackExchange.Redis这个库在.net core 下有问题。
我们发布 .net core 3.0 preview 7 版的博客站点,也在日志中发现了很多这样的错误
这个好像是正常的,客户端主动取消的请求好像就会报这个错
上面贴的报错,我们重现了,是客户端主动取消了请求,比如打开页面,有些请求还在处理,但是这时候又强制刷新了页面,就会出现上面的报错
– Alan_Liu 5年前今天看了下博客园的故障,跟我们的不一样
– Alan_Liu 5年前检查一下,有没有异步未等待的调用
– 刘发源 5年前@刘发源: 好的
– Alan_Liu 5年前