Зависание запроса IIS для одного запроса AJAX на этапе AquireRequestState - PullRequest
0 голосов
/ 08 ноября 2019

У нас есть приложение AngularJS, взаимодействующее с бэкэндом веб-форм .NET;он выполняет несколько запросов AJAX к нескольким системам и объединяет большое количество информации на одной странице, чтобы сделать ее более быстрой для пользователей. Страница загружается очень быстро, но есть один AJAX-запрос (GetPatientRadiology), который иногда кажется зависает - то есть, если я захожу в Просмотр текущих запросов в AppPool, я вижу, что он находится там, в AquireRequestState.

Память для AppPool остается низкой (обычное поведение), однако, когда это происходит, загрузка ЦП для AppPool увеличивается примерно до 30% (необычно для этого приложения). Так будет до тех пор, пока я не перезапущу appPool, по какой-то причине он никогда не истекает - мы наблюдаем, что он длится более 17 часов.

Приложение обслуживает эту страницу (и, следовательно, делает запрос GetPatientRadiology) около 22 000 раз в день, и, кажется, это происходит <10 раз в день. Запрос представляет собой один запрос к базе данных Oracle, который возвращает в SQL Developer менее 0,1 секунды. Существует несколько других запросов к одной и той же ConnectionString, и с ними проблем нет. </p>

Он выполняется на сервере Windows 2008R2 (IIS7.5) и ASP.NET 4.6.1. Да, я знаю, что оно старое ... но мы застряли на каком-то устаревшем оборудовании :(

Я пролистал и прочитал десятки статей, но не вижу ничего, что поможет конкретно;предложения по использованию MS Debug Diags, которые я сделал и записал процесс, когда он происходит в производстве, ниже приводится выдержка из него, но я не знаю, с чего начать его интерпретацию, и надеюсь на некоторую помощь.

Топ 5 потоков по времени процессора

Thread ID: 44     Total CPU Time: 00:00:07.222     Entry Point for Thread: clr!StrongNameFreeBuffer+35dc0 
Thread ID: 3     Total CPU Time: 00:00:06.972     Entry Point for Thread: w3tp+2040 
Thread ID: 46     Total CPU Time: 00:00:06.145     Entry Point for Thread: clr!StrongNameFreeBuffer+35dc0 
Thread ID: 5     Total CPU Time: 00:00:05.911     Entry Point for Thread: w3tp+2040 ```

Thread 43 - System ID 5224

Entry point   clr!StrongNameFreeBuffer+35dc0 
Create time   8/11/2019 11:22:24 a.m. 
Time spent in user mode   0 Days 00:05:02.595 
Time spent in kernel mode   0 Days 00:05:06.853 


This thread is not fully resolved and may or may not be a problem. Further analysis of these threads may be required.


.NET Call Stack


System_Data_ni!DomainNeutralILStubClass.IL_STUB_PInvoke(System.Data.Odbc.OdbcStatementHandle, UInt16, SQL_C, System.Data.Odbc.CNativeBuffer, IntPtr, IntPtr ByRef)+e8 
[[InlinedCallFrame] (System.Data.Common.UnsafeNativeMethods.SQLGetData)] System.Data.Common.UnsafeNativeMethods.SQLGetData(System.Data.Odbc.OdbcStatementHandle, UInt16, SQL_C, System.Data.Odbc.CNativeBuffer, IntPtr, IntPtrByRef) 
System_Data_ni!System.Data.Odbc.OdbcStatementHandle.GetData(Int32, SQL_C, System.Data.Odbc.CNativeBuffer, Int32, IntPtr ByRef)+30 
System_Data_ni!System.Data.Odbc.OdbcDataReader.GetData(Int32, SQL_C, Int32, Int32 ByRef)+74 
System_Data_ni!System.Data.Odbc.OdbcDataReader.internalGetString(Int32)+1d4 
System_Data_ni!System.Data.Odbc.OdbcDataReader.GetValue(Int32, System.Data.Odbc.TypeMap)+73 
System_Data_ni!System.Data.Odbc.OdbcDataReader.GetValue(Int32)+43 
_Default.GetPatientRadiology(System.String)+330 
[[DebuggerU2MCatchHandlerFrame]] 
[[HelperMethodFrame_PROTECTOBJ] (System.RuntimeMethodHandle.InvokeMethod)] System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean) 
mscorlib_ni!System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(System.Object, System.Object[], System.Object[])+80 
mscorlib_ni!System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)+8e 
System.Web.Script.Services.WebServiceMethodData.CallMethod(System.Object, System.Collections.Generic.IDictionary`2)+139 
System.Web.Script.Services.RestHandler.InvokeMethod(System.Web.HttpContext, System.Web.Script.Services.WebServiceMethodData, System.Collections.Generic.IDictionary`2)+74 
System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(System.Web.HttpContext, System.Web.Script.Services.WebServiceMethodData)+5d 
System.Web.Handlers.ScriptModule.OnPostAcquireRequestState(System.Object, System.EventArgs)+120 
System_Web_ni!System.Web.HttpApplication+SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+8b 
System_Web_ni!System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep)+c3 
System_Web_ni!System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef)+58 
System_Web_ni!System.Web.HttpApplication+PipelineStepManager.ResumeSteps(System.Exception)+5bc 
System_Web_ni!System.Web.HttpApplication.BeginProcessRequestNotification(System.Web.HttpContext, System.AsyncCallback)+79 
System_Web_ni!System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest, System.Web.HttpContext)+1db 
System_Web_ni!System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)+3cd 
System_Web_ni!System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32)+13 
System_Web_ni!DomainNeutralILStubClass.IL_STUB_ReversePInvoke(Int64, Int64, Int64, Int32)+52 
System_Web_ni!DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, System.Web.RequestNotificationStatus ByRef)+7e 
[[InlinedCallFrame] (System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion)] System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr, System.Web.RequestNotificationStatusByRef) 
System_Web_ni!System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)+595 
System_Web_ni!System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32)+13 
System_Web_ni!DomainNeutralILStubClass.IL_STUB_ReversePInvoke(Int64, Int64, Int64, Int32)+52 
[[ContextTransitionFrame]] 

Full Call Stack


ntdll!NtSetEvent+a 
KERNELBASE!SetEvent+c 
sqora32+17a3 
sqora32!SQLGetData+175 
odbc32!SQLGetData+897 
System_Data_ni!DomainNeutralILStubClass.IL_STUB_PInvoke(System.Data.Odbc.OdbcStatementHandle, UInt16, SQL_C, System.Data.Odbc.CNativeBuffer, IntPtr, IntPtr ByRef)+e8 
[[InlinedCallFrame] (System.Data.Common.UnsafeNativeMethods.SQLGetData)] System.Data.Common.UnsafeNativeMethods.SQLGetData(System.Data.Odbc.OdbcStatementHandle, UInt16, SQL_C, System.Data.Odbc.CNativeBuffer, IntPtr, IntPtrByRef) 
System_Data_ni!System.Data.Odbc.OdbcStatementHandle.GetData(Int32, SQL_C, System.Data.Odbc.CNativeBuffer, Int32, IntPtr ByRef)+30 
System_Data_ni!System.Data.Odbc.OdbcDataReader.GetData(Int32, SQL_C, Int32, Int32 ByRef)+74 
System_Data_ni!System.Data.Odbc.OdbcDataReader.internalGetString(Int32)+1d4 
System_Data_ni!System.Data.Odbc.OdbcDataReader.GetValue(Int32, System.Data.Odbc.TypeMap)+73 
System_Data_ni!System.Data.Odbc.OdbcDataReader.GetValue(Int32)+43 
_Default.GetPatientRadiology(System.String)+330 
clr!LogHelp_LogAssert+2043 
clr!LogHelp_LogAssert+1ef8 
clr!DllUnregisterServerInternal+60f46 
clr!DllUnregisterServerInternal+613ff 
[[DebuggerU2MCatchHandlerFrame]] 
[[HelperMethodFrame_PROTECTOBJ] (System.RuntimeMethodHandle.InvokeMethod)] System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean) 
mscorlib_ni!System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(System.Object, System.Object[], System.Object[])+80 
mscorlib_ni!System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)+8e 
System.Web.Script.Services.WebServiceMethodData.CallMethod(System.Object, System.Collections.Generic.IDictionary`2<System.String,System.Object>)+139 
System.Web.Script.Services.RestHandler.InvokeMethod(System.Web.HttpContext, System.Web.Script.Services.WebServiceMethodData, System.Collections.Generic.IDictionary`2<System.String,System.Object>)+74 
System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(System.Web.HttpContext, System.Web.Script.Services.WebServiceMethodData)+5d 
System.Web.Handlers.ScriptModule.OnPostAcquireRequestState(System.Object, System.EventArgs)+120 
System_Web_ni!System.Web.HttpApplication+SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+8b 
System_Web_ni!System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep)+c3 
System_Web_ni!System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef)+58 
System_Web_ni!System.Web.HttpApplication+PipelineStepManager.ResumeSteps(System.Exception)+5bc 
System_Web_ni!System.Web.HttpApplication.BeginProcessRequestNotification(System.Web.HttpContext, System.AsyncCallback)+79 
System_Web_ni!System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest, System.Web.HttpContext)+1db 
System_Web_ni!System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)+3cd 
System_Web_ni!System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32)+13 
System_Web_ni!DomainNeutralILStubClass.IL_STUB_ReversePInvoke(Int64, Int64, Int64, Int32)+52 
clr+21fe 
webengine4!PerfDecrementGlobalCounter+33f 
webengine4!RegisterModule+3cca 
webengine4!PerfDecrementGlobalCounter+fb 
webengine4!MgdWebSocketWriteFragment+36f 
iiscore+2e48 
iiscore+46a4 
iiscore+a775 
iiscore+1ee5 
iiscore+a81c 
webengine4!STRU::Unescape+501 
webengine4!MgdIndicateCompletion+22 
System_Web_ni!DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, System.Web.RequestNotificationStatus ByRef)+7e 
[[InlinedCallFrame] (System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion)] System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr, System.Web.RequestNotificationStatusByRef) 
System_Web_ni!System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)+595 
System_Web_ni!System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32)+13 
System_Web_ni!DomainNeutralILStubClass.IL_STUB_ReversePInvoke(Int64, Int64, Int64, Int32)+52 
clr+2453 
clr!DllUnregisterServerInternal+4cb3a 
clr!LogHelp_LogAssert+5ca4 
[[ContextTransitionFrame]] 
clr!DllUnregisterServerInternal+4cbe5 
clr+23fd 
webengine4!PerfDecrementGlobalCounter+33f 
webengine4!PerfDecrementGlobalCounter+292 
clr!LogHelp_LogAssert+49ff 
clr!LogHelp_LogAssert+35fc 
clr!LogHelp_LogAssert+33a5 
clr!StrongNameFreeBuffer+35e3f 
kernel32!BaseThreadInitThunk+d 
ntdll!RtlUserThreadStart+1d

Текущие запросы AppPool

Большое спасибо,

Дэвид

...