【问题标题】:CPU usage of w3wp rises to 100% on a ASP.NET MVC4 web applicationw3wp 的 CPU 使用率在 ASP.NET MVC4 Web 应用程序上上升到 100%
【发布时间】:2013-01-14 13:42:46
【问题描述】:

我们有一个使用 Entity Framework 4.0 的 ASP.NET MVC4 应用程序。当我们在生产服务器上部署时,CPU 会在一段时间(~2-5h)后上升,直到接近 100%。内存也随之上升,直到最大值。一段时间后,应用程序池会因为内存过高而自动重置。

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

来自消耗大部分 CPU 的线程的调试诊断工具的堆栈跟踪:

SNIReadSyncOverAsync(SNI_ConnWrapper*, SNI_Packet**, Int32) 
.SNIReadSyncOverAsync(SNI_ConnWrapper*, SNI_Packet**, 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 上升的原因是什么吗?

【问题讨论】:

  • 您是否曾在应用程序或系统事件日志中看到任何崩溃?
  • 这是虚拟服务器吗?我们有一个有问题的虚拟服务器可以做到这一点。值得一试。
  • 在应用程序日志中没有崩溃,只记录应用程序池回收。是的,它是一个虚拟服务器。虚拟服务器出了什么问题?
  • @SteveStokes 这个问题解决了吗?我也在使用类似设置的虚拟服务器上,并且刚刚开始看到这个问题 - 尽管它在大约 3 周后开始......

标签: asp.net cpu w3wp


【解决方案1】:

嘿,我在使用大量线程时间时遇到了与 SNIReadSyncOverAsync 完全相同的问题(我使用 DebugDiag 发现了这一点)。

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

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

因此,如果您像我们一样使用 Azure DB,请检查您的 DTU % 使用率。如果它经常很高(80-90% 等),请尝试将其增加到两倍甚至四倍(这可能很昂贵!)。我们从“Elastic Standard”(50 个 eDTU)升级到“Standard S4”(400 个 DTU),但我们还没有看到 CPU 使用率达到 100%。事实上,自那以后它一直在 7-9% 左右浮动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 2015-04-05
    • 1970-01-01
    相关资源
    最近更新 更多