Iis

w3wp.exe 應用程序池每 5 分鐘崩潰一次

  • October 26, 2017

我在 Windows 2012 上有一個經典的 ASP 工作站點。一切正常。由於我將其移至 2016 年機器(相同的數據庫,相同的文件),w3wp.exe 每隔幾分鐘就會崩潰一次;-(

我做了轉儲,每次發生崩潰時似乎都會出現這 2 個錯誤:

在 w3wp__xxx.net(domain)(pool)__PID__8764__Date__06_06_2017__Time_05_57_31PM__204__Second_Chance_Exception_C0000374.dmp 中,來自 Microsoft Corporation 的 C:\Windows\System32\ntdll.dll 中 ntdll!RtlReportCriticalFailure+89 處的彙編指令導致損壞的堆異常(0xC00003)何時嘗試執行執行緒 48 上記憶體位置 0x00000000 上的未知操作目前 NTGlobalFlags 值:0x0

第二個

在 w3wp__xxx.net(domain)(pool)__PID__8764__Date__06_06_2017__Time_05_57_31PM__204__Second_Chance_Exception_C0000374.dmp 中檢測到 COM+ STA 活動堆積。每個 COM+ STA ThreadPool 執行緒綁定了多個活動。

我認為第一個是問題之一,如果我查看它下面的執行緒:

執行緒 48 - 系統 ID 9056

入口點 msvcrt!_threadstartex 創建時間 6.6.2017 17:53:57 在使用者模式下花費的時間 0 天 00:00:00.359 在核心模式下花費的時間 0 天 00:00:00.343

該執行緒正在使用 ADO 進行數據庫操作。

對 MSADO15!CCONNECTION::EXECUTE 的呼叫源自 vbscript!IDispatchInvoke2+76

ntdll!RtlReportCriticalFailure+89 ntdll!RtlpReportHeapFailure+32 ntdll!RtlpLogHeapFailure+9f ntdll!RtlFreeHeap+ac AcLayers!NS_FaultTolerantHeap::APIHook_RtlFreeHeap+3f70 msvcr120!free+1a msvcr120!__freetlocinfo+13e msvcr120!_updatetlocinfoEx_nolock+40 msvcr120!__updatetlocinfo+5f msvcr120! _LocaleUpdate::_LocaleUpdate+3e msvcr120!_input_l+10f msvcr120!vscan_fn+6a msvcr120!sscanf+19 myodbc5w!SQLGetCursorNameW+22887 myodbc5w!SQLGetCursorNameW+23c13 myodbc5w!SQLGetCursorNameW+169f0 myodbc5w!SQLGetCursorNameW+16399 odbc32!SetStmtAttr+5d1 odbc32!SQLSetStmtAttrW+ 91 msdasql!CKagRowsetProps::SetODBCOptions+1cd msdasql!CKagRowsetProps::FindCapableCC+575 msdasql!CImpICommandText::Execute+ddd msado15!CConnection::Execute+b1 msado15!_ExecuteAsync+1da msado15!ExecuteAsync+59 msado15!CQuery::Execute+ fae msado15!CCommand::_Execute+18a msado15!CConnection::OpenRecordset+df msado15!CConnection::ExecuteWithModeFlag+622 msado15!CConnection::Execute+67 msado15!CConnection::Invoke+de2d vbscript!IDispatchInvoke2+76 vbscript!InvokeDispatch+4fa vbscript!CScriptRuntime:: RunNoEH+f79 vbscript!CScriptRuntime::Run+dc vbscript!CScriptEntryPoint::Call+f3 vbscript!CSession::Execute+3a0 vbscript!COleScript::ExecutePendingScripts+14b vbscript!COleScript::SetScriptState+62 asp!CActiveScriptEngine::TryCall+ 2e asp!CActiveScriptEngine::Call+3d asp!CallScriptFunctionOfEngine+58 asp!ExecuteRequest+159 asp!Execute+237 asp!CHitObj::ViperAsyncCallback+425 asp!CViperAsyncRequest::OnCall+7e comsvc​​s!CSTAActivityWork::STAActivityWorkHelper+50 combase! EnterForCallback+142 combase!SwitchForCallback+1c6 combase!PerformCallback+b0 combase!CObjectContext::InternalContextCallback+10d combase!CObjectContext::DoCallback+31 comsvc​​s!CSTAActivityWork::DoWork+175 comsvc​​s!CSTAThread::ProcessQueueWork+68 comsvc​​s!CSTAThread::WorkerLoop+173 msvcrt!_callthreadstartex+25 msvcrt!_threadstartex+61 kernel32!BaseThreadInitThunk+24 ntdll!__RtlUserThreadStart+2f ntdll!_RtlUserThreadStart+1b

我不明白這是什麼意思…我使用 mysql 5.7 和 myODBC,它與舊 Windows 2012 上的相同。

似乎ADo失敗了還是什麼?但不是每次,因為我每秒都有連接,並且 w3wp.exe 每隔幾分鐘就會失敗,有時連續 3 次,有時 20 分鐘沒有失敗。

任何人都可以分享一些想法,我將不得不回到舊伺服器,我很絕望。msado15.dll 可以在 windows 2016 上被破壞嗎?文件沒問題,我用 windows shell 文件檢查器檢查了。

是否有可能以某種方式獲得 MS 的支持?免費或付費…

謝謝

我已經找到問題了,謝謝你的幫助。這不是我的程式碼…自 5.3.4 以來,Oracle 的 myODBC 因堆記憶體問題而嚴重損壞;-( 在某人的錯誤報告中得到確認,但 Oracle 沒有修復它…

5.3.6及以上版本出現這種問題,恢復到2014 5.3.4版本又一切正常…

顯然,您正在處理傳遞給 ADO 的空指針。您需要查看程式碼呼叫 ADO 的位置​​,並確保沒有任何參數為空:

set rs=Server.CreateObject("ADODB.recordset")
If rs is Nothing then
 Response.Write("We have a problem with rs")
 Exit Sub
endif
If conn is Nothing then
 Response.Write("We have a problem with conn")
 Exit Sub
endif
rs.Open "Customers", conn

如果應用程序不生成大量動態 HTML,那麼將應用程序從 ASP 遷移到 ASP.net 並不難。直接聯繫我,我可以和你討論這個問題。

引用自:https://serverfault.com/questions/854262