加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

在ASP.NET MVC4 Web应用程序上,w3wp的CPU使用率上升到100%

发布时间:2020-12-16 07:40:19 所属栏目:asp.Net 来源:网络整理
导读:我们有一个使用Entity Framework 4.0的ASP.NET MVC4应用程序.当我们在生产服务器上部署时,CPU会在一段时间(~2-5h)之后上升,直到接近100%.记忆也会上升到最大值.一段时间后,由于内存很高,应用程序池将自动重置. 服务器:Windows 2008 R2 Standard SP1 IIS:7
我们有一个使用Entity Framework 4.0的ASP.NET MVC4应用程序.当我们在生产服务器上部署时,CPU会在一段时间(~2-5h)之后上升,直到接近100%.记忆也会上升到最大值.一段时间后,由于内存很高,应用程序池将自动重置.

服务器:Windows 2008 R2 Standard SP1
IIS:7(V 7.5.7600.16385)
只有一个应用程序池和一个Web应用程序正在运行.

来自线程的调试诊断工具的Stacktrace消耗了大部分CPU:

SNIReadSyncOverAsync(SNI_ConnWrapper*,SNI_Packet**,Int32) 
.SNIReadSyncOverAsync(SNI_ConnWrapper*,Int32) 
System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr,System.Web.RequestNotificationStatus ByRef) 
System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr,System.Web.RequestNotificationStatus ByRef) 
ntdll!NtWaitForSingleObject 
KERNELBASE!WaitForSingleObjectEx 
System_Data!SNIReadSyncOverAsync 
System_Data_ni!load_config_used 
System_Data_ni!load_config_used 
System_Data_ni!load_config_used 
System_Data_ni!load_config_used 
System_Data_ni!load_config_used 
System_Data_ni!load_config_used 
System_Data_ni!load_config_used 
System_Data_ni!load_config_used 
System_Data_ni!load_config_used 
System_Data_ni!load_config_used 
System_Data_ni!load_config_used 
System_Data_ni!load_config_used 
System_Data_ni!load_config_used 
System_Data_ni!load_config_used 
System_Data_ni!load_config_used 
System_Data_Entity_ni 
System_Data_Entity_ni 
System_Data_Entity_ni 
System_Data_Entity_ni 
System_Core_ni 
System_Core_ni 
0x000007fe`99223112 
0x000007fe`99222a88 
0x000007fe`99222899 
0x000007fe`992205cb 
0x000007fe`99355596 
System_Web_Mvc_ni+138058 
System_Web_Mvc_ni+13ca67 
System_Web_Mvc_ni+13e71c 
System_Web_Mvc_ni+13ca03 
System_Web_Mvc_ni+13d175 
System_Web_Mvc_ni+13cbe9 
System_Web_Mvc_ni+1431df 
System_Web_Mvc_ni+13dade 
System_Web_Mvc_ni+14f5fe 
System_Web_Mvc_ni+13b0ef 
System_Web_Mvc_ni+14f514 
System_Web_ni 
System_Web_ni 
System_Web_ni 
System_Web_ni 
System_Web_ni 
System_Web_ni 
System_Web_ni 
System_Web_ni 
clr!UMThunkStub 
webengine4!W3_MGD_HANDLER::ProcessNotification 
webengine4!W3_MGD_HANDLER::DoWork 
webengine4!RequestDoWork 
webengine4!CMgdEngHttpModule::OnExecuteRequestHandler 
iiscore!NOTIFICATION_CONTEXT::RequestDoWork 
iiscore!NOTIFICATION_CONTEXT::CallModulesInternal 
iiscore!NOTIFICATION_CONTEXT::CallModules 
iiscore!W3_CONTEXT::DoWork 
iiscore!W3_CONTEXT::IndicateCompletion 
webengine4!MgdIndicateCompletion 
System_Web_ni 
System_Web_ni 
System_Web_ni 
System_Web_ni 
clr!UM2MThunk_WrapperHelper 
clr!UM2MThunk_Wrapper 
clr!Thread::DoADCallBack 
clr!UM2MDoADCallBack 
clr!UMThunkStub 
webengine4!W3_MGD_HANDLER::ProcessNotification 
webengine4!ProcessNotificationCallback 
clr!UnManagedPerAppDomainTPCount::DispatchWorkItem 
clr!ThreadpoolMgr::ExecuteWorkRequest 
clr!ThreadpoolMgr::WorkerThreadStart 
clr!Thread::intermediateThreadProc 
kernel32!BaseThreadInitThunk 
ntdll!RtlUserThreadStart

你知道这个CPU上升的原因是什么?

解决方法

嘿,我使用大量的线程时间与SNIReadSyncOverAsync有完全相同的问题(我发现这使用DebugDiag).

我不知道这是否会对其他人有所帮助,但看起来我们的问题出在我们使用的Azure数据库服务器上.我们将它设置为只有50个DTU,最多有100个并发请求.

基本上SNIReadSyncOverAsync是如此之大,因为Web服务器必须坐在那里等待来自DB服务器的响应,并且DB服务器一次只能处理100个请求,因此Web服务器最终等待很长时间(导致100 %CPU使用率和无法访问的网站).这可能会出现最近网络流量的增加(例如:如果你们最近购买广告并看到你们的网络流量大幅增加,现在100个并发请求是不够的)

因此,如果您像我们一样并且您正在使用Azure DB,请检查您的DTU%使用情况.如果它真的很高(80-90%等)尝试将它增加到两倍甚至四倍(这可能是昂贵的!).我们从“弹性标准”(50个eDTU)变为“标准S4”(400个DTU),我们还没有看到CPU使用率达到100%.事实上它自那以来一直漂浮在7-9%左右.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读