Как я могу заставить свой пул приложений перестать падать на меня?
Задний план
Все работало хорошо много лет, пока я не обновил Windows 10 Pro до предложенного обновления. Пакет возможностей Windows.
Текущая система:
Редакция Windows 10 Pro
Версия 21H2
Установлен 24.08.2020
Сборка ОС 19044.1415
Пакет возможностей Windows 120.2212.3920.0
Вероятно, это изменило некоторые разрешения пользователей и способ работы IIS; и до того момента, когда я потерял свой сайт. Пришлось все переустанавливать.
Ошибка (C0000005)
Прошло четыре недели с тех пор, как я обновился с MariaDB 10.1 до MariaDB 10.6, и с этим я перешел с использования драйвера MySQL ODBC 5.1 на MariaDB Connector/ODBC 3.1 (версия 3.01.15.00), который является частью «текущая серия стабильных выпусков."
В этих не очень полезных ошибках отсутствует информация о номере строки, в которой находится ошибка. Они читают:
Файл /home.asp Непредвиденная ошибка. Во внешнем объекте произошла перехватываемая ошибка (C0000005). Сценарий не может продолжать работу.
И выглядеть так:
Что я сделал:
Я проверил свой код на наличие открытых подключений к базе данных, как это было предложено в этом сообщении. Классическая ошибка ASP C0000005 но я все еще получаю эти ошибки. Эти случайные (C0000005) ошибки ASP продолжают приводить к падению пула приложений и во многом ведут себя так, как описано в эта тема где может быть виновата некоторая утечка памяти.
Теперь я рассматриваю возможность использования другого драйвера.
Ответы в этой теме Что такое ошибки ASP 0115 и C0000005 предлагает использовать коннектор ODBC версии 5.1.6 (mysql-connector-odbc-5.1.6-winx64.msi), выпущенной в 2009 году. Соединитель MySQL/ODBC 8.0.27 (mysql-connector-odbc-8.0.27-winx64.msi) выглядит более актуально. И я должен попробовать.
Первое, что я заметил, это намного быстрее. Теперь я просто надеюсь, что эти ошибки C0000005 закончатся.
Обновление А: Ошибки все еще возвращаются, но гораздо раньше, чем предполагалось.
я попробовал 32-битный драйвер, а также mysql-connector-odbc-8.0.27-win32.msi, чтобы увидеть, будет ли это работать, но не смог даже загрузить страницу. Думаю, мне нужно будет использовать 32-битный пул приложений, чтобы он работал. (Такого не пробовал.)
Обновление Б: теперь я снова использую 64-разрядный соединитель MySQL/ODBC 8.0.27 Водитель.
Может ли это быть так, как я настраиваю драйвер, который приводит к падению моего пула приложений?
Это моя строка подключения:
Conn_STRING = "dsn=___;" & _
"TCPIP=1;" & _
"СЕРВЕР=127.0.0.1;" & _
"УИД=___;" & _
"ПВД=___;" & _
"БАЗА ДАННЫХ=___;" & _
"ПОРТ=3306;" & _
"CONN_TIMEOUT=30;" & _
"CHARSET=utf8mb4;" & _
"READ_TIMEOUT=20;" & _
"WRITE_TIMEOUT=10;" & _
«Опция = 3»
Я задаю параметры подключения так:
Я заметил, что каким-то образом пул приложений продолжает работать, несмотря на эти зарегистрированные ошибки:
- <Событие xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <Система>
<Provider Name="Активные серверные страницы" />
<EventID Qualifiers="49152">5</EventID>
<Версия>0</Версия>
<Уровень>2</Уровень>
<Задача>0</Задача>
<Код операции>0</Код операции>
<Ключевые слова>0x80000000000000</Ключевые слова>
<TimeCreated SystemTime="2021-12-23T21:41:37.9772561Z" />
<EventRecordID>2212200</EventRecordID>
<Корреляция />
<Execution ProcessID="0" ThreadID="0" />
<Канал>Приложение</Канал>
<Компьютер>vm-white</Компьютер>
<Безопасность/>
</Система>
- <Данные События>
<Данные>Файл /blog.asp Непредвиденная ошибка. Во внешнем объекте произошла перехватываемая ошибка (C0000005). Сценарий не может продолжать работу.</Data>
</EventData>
</Событие>
Я также вижу новое предупреждение в системном журнале.
ОБНОВИТЬ
Я устал от множества разных драйверов ODBC. Драйверы MariaDB ODBC и MySQL ODBC. Ни один из них не предотвращает сбой пула приложений. Перед сбоем регистрируется множество ошибок C0000005. Драйвер MySQL ODBC 8.0 оказался намного быстрее и щадящим, но что-то все равно снижает пул приложений. Сейчас я использую драйвер MySQL ODBC 8.0 Unicode.
В ODBC MariaDB есть ошибка?
Кроме того, теперь я изменил способ установки объектов. Вместо того, чтобы устанавливать их так
SET rs = Server.CreateObject("ADODB.Recordset")
SET wshell = Server.CreateObject("WScript.Shell")
Сообщение SET = Server.CreateObject("CDO.Message")
я сейчас просто делаю
SET rs = CreateObject("ADODB.Recordset")
SET wshell = CreateObject("WScript.Shell")
УСТАНОВИТЬ сообщение = CreateObject("CDO.Message")
Он выглядит более многообещающе. Некоторые ошибки теперь иногда имеют номера строк.
Я связался с Microsoft, чтобы помочь мне интерпретировать мой отчет об анализе DebugDiag из этих аварий. Я также заметил новую закономерность, которая начала отображаться в журналах ошибок. Первый Страницы активного сервера с последующим Ошибка приложения:
Ошибка страниц активного сервера:
Ошибка: файл /blog.asp Непредвиденная ошибка.Во внешнем объекте произошла перехватываемая ошибка (C0000005). Скрипт не может продолжать работу..
Ошибка приложения:
Имя сбойного приложения: w3wp.exe, версия: 10.0.19041.1, отметка времени: 0x58c67bf3
Имя сбойного модуля: ntdll.dll, версия: 10.0.19041.1288, отметка времени: 0xa280d1d6
Код исключения: 0xc0000409
Смещение ошибки: 0x00000000000a2070
Идентификатор сбойного процесса: 0x3144
Время запуска сбойного приложения: 0x01d7fd9d0686ef42
Путь сбойного приложения: c:\windows\system32\inetsrv\w3wp.exe
Путь сбойного модуля: C:\WINDOWS\SYSTEM32\ntdll.dll
Идентификатор отчета: cda5aa10-492d-4e5c-ae17-ac4f9dbf70ab
Полное имя неисправного пакета:
Идентификатор сбойного связанного с пакетом приложения:
Как было предложено здесь на mysql.com я изменил настройки коннектора DSN для использования с ASP. я поставил галочку Возвращать совпадающие строки вместо обработанных строк
.
я имел Вариант=3
в моей строке подключения и найден на основе этот блог что я, вероятно, должен объявить это как FLAG_FIELD_LENGTH
(1) + FLAG_FOUND_ROWS
(2).
Любые предложения приветствуются.