У меня был классический рабочий сайт ASP на Windows 2012. Все работало нормально. Поскольку я переместил его на машину 2016 года (та же БД, те же файлы), w3wp.exe дает сбой каждые несколько минут ;-(
Я сделал дамп, и, похоже, каждый раз, когда происходит сбой, появляются две ошибки:
В w3wp__xxx.net (домен) (пул) __ PID__8764__Date__06_06_2017__Time_05_57_31PM__204__Second_Chance_Exception_C0000374.dmp попытка выполнения инструкции по сборке в ntdll! RtlReportCriticalFailure вызвала исключение Microsoft heaptd37 (ошибка 89) в C: \ Windows \ System32 \ ntdll Corporation в файл C: \ Windows \ System32 \ n неизвестная операция в ячейке памяти 0x00000000 в потоке 48 Текущее значение NTGlobalFlags: 0x0
Второй
Наложение активности COM + STA было обнаружено в w3wp__xxx.net (домен) (пул) __ PID__8764__Date__06_06_2017__Time_05_57_31PM__204__Second_Chance_Exception_C0000374.dmp. С каждым потоком COM + STA ThreadPool связано несколько действий.
Я думаю, что первое - проблемное, если я посмотрю на ветку под ним:
Тема 48 - идентификатор системы 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 + ая Ntdll! RtlFreeHeap + ас AcLayers! NS_FaultTolerantHeap :: APIHook_RtlFreeHeap + 3f70 msvcr120! бесплатно + 1a msvcr120! __ freetlocinfo + 13e msvcr120! _updatetlocinfoEx_nolock + 40 msvcr120! __ updatetlocinfo + 5е 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 + 5г1 odbc32! SQLSetStmtAttrW + 91 msdasql! CKagRowsetProps :: SetODBCOptions + 1cd msdasql! CKagRowsetProps :: FindCapableCC + 575 msdasql! CImpICommandText :: Execute + ddd msado15! CConnection :: Execute + ddd msado15! CConnection :: Execute + b1 msado15! _Exec + 1 msado15! _Exec + 1 fae msado15! CCommand :: _ Execute + 18a msado15! CConnection :: OpenRecordset + df msado15! CConnection :: ExecuteWithModeFlag + 622 msado15! CConnection :: Execute + 67 msado15! CConnection :: Invoke + de2d vbscript! IDispatch oke2 + 76 vbscript! InvokeDispatch + 4fa vbscript! CScriptRuntime :: RunNoEH + f79 vbscript! CScriptRuntime :: Run + dc vbscript! CScriptEntryPoint :: Call + f3 vbscript! CSession :: Execute + 3a0 vbscript! COleScript :: ExecutePendingScript + 14 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 OnCall + 7e comsvcs! CSTAActivityWork :: STAActivityWorkHelper + 50 combase! EnterForCallback + 142 combase! SwitchForCallback + 1c6 combase! PerformCallback + b0 combase! CObjectContext :: InternalContextCallback + 10d combase! CObjectContext :: DoCallback + 10d combase! CObjectContext :: DoCallback! comsvcs! CSTAThread :: ProcessQueueWork + 68 comsvcs! CSTAThread :: WorkerLoop + 173 msvcrt! _callthreadstartex + 25 msvcrt! _threadstartex + 61 kernel32! BaseThreadInitThunk + 24 ntdll! __ RtlUserThreadStart + _RTLTDLL!
Не могу понять, что это значит ... Использую mysql 5.7 и myODBC, он такой же, как на старых windows 2012.
Кажется, что ADo дает сбой что ли? Но не каждый раз, так как у меня соединения каждую секунду, а w3wp.exe выходит из строя каждые несколько минут, иногда 3 раза подряд, иногда 20 минут без сбоев.
Кто-нибудь может поделиться некоторыми идеями, мне придется вернуться на старый сервер, и я в отчаянии. Может ли msado15.dll сломаться на windows 2016? Файлы в порядке, я проверил с помощью средства проверки файлов оболочки Windows.
Можно ли как-нибудь получить поддержку от MS? Бесплатно или платно ...
Спасибо
Я нашел проблему, спасибо за помощь. Это был не мой код ... Oracle myODBC, начиная с версии 5.3.4, серьезно поврежден из-за проблем с памятью кучи ;-( Подтверждено в отчете об ошибке от кого-то, но 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
Перенести приложения из ASP в ASP.net не так уж сложно, если приложения не генерируют много динамического HTML. Свяжитесь со мной напрямую, и я могу обсудить это с вами.