在ASP.NET MVC4 Web应用程序上,w3wp的CPU使用率上升到100%
我们有一个使用Entity Framework 4.0的ASP.NET MVC4应用程序.当我们在生产服务器上部署时,CPU会在一段时间(~2-5h)之后上升,直到接近100%.记忆也会上升到最大值.一段时间后,由于内存很高,应用程序池将自动重置.
服务器:Windows 2008 R2 Standard SP1 来自线程的调试诊断工具的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%左右. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何绑定gridview中数据表的复选框值
- asp.net-mvc – ASP.NET MVC – 查看多个模型
- .net-4.0 – 从自定义IHttpHandler调用MvcHttpHandler.Exec
- asp.net-mvc – 在带有Web Essentials的Visual Studio 2013
- asp.net-mvc – ModelState.AddModelError编码HTML
- asp.net-mvc – 如何将服务器错误的http状态代码捕获到ASP.
- asp.net – 用JavaScript计算时间间隔
- 清除ASP.NET临时文件缓存的麻烦
- asp.net – 有谁知道Razor,Spark和NVelocity视图引擎之间的
- asp.net – 如何在Repeater中查找控件