Создание объектов внезапно начинает терпеть неудачу после того, как они были успешно загружены в память - PullRequest
11 голосов
/ 16 февраля 2011

Поведение:
Приложение загружено и используется должным образом.Внезапно конкретная DLL больше не может быть загружена.Сообщение об ошибке:
Компонент ActiveX не может создать объект.
В каждом случае объект создавался успешно много раз до сбоя.Все объекты помечены как «сохранить в памяти».

Эта ошибка очищается при повторном использовании пула приложений.Может пройти несколько часов или месяцев, прежде чем его увидят снова.

Проблема произошла в течение двух часов после обновления, а также не произошла в течение нескольких месяцев безотказной работы.
Проблема произошла с сотнями пользователей одновременно (интенсивное использование), а также с 1-3 пользователями.

Во время возникновения проблемы процесс, выполняющий этот пул приложений, не может создать отказавший объект.Однако он может создавать любые другие объекты.Память, процессор и другие ресурсы остаются при нормальном использовании.Кроме того, другие процессы (такие как автономный exe-файл) могут успешно создавать объект.

Первый экземпляр проблемы появился в середине 2008 года. С тех пор было менее пятидесяти экземпляров,несмотря на пул сотен серверов для этого на.Все экземпляры, кроме одного, вышли из строя в одной и той же DLL.

Информация об ошибке DLL:
самая распространенная - общая структура данных, реализующая b-дерево, не имеет ссылок, кроме своего интерфейса.Код состоит из массивов и одного использования функциональности события vb6.Объект не менялся с 2005 года.
единовременно - взаимодействие с модулем .NET.ошибка возникает при попытке создать объект взаимодействия, а не объект .NET.Этот объект обновляется несколько раз в год.

Среда приложения:
Приложение, размещенное на IIS
VB6, классический ASP, некоторое взаимодействие с второстепенными компонентами .NET
Windows Server 2003 / Windows Server 2008 (у обоих были проблемы независимо)

Попытки воспроизвести:
Использование сценариев (и реальных людей) для выполнения одного и того же конца-пользовательские рабочие процессы, о которых наши журналы сообщали за несколько дней до возникновения проблемы.
Использование сценариев для максимально быстрого создания / уничтожения подозрительных объектов из нескольких одновременных сеансов.
Дикие предположения.Нет преднамеренного успеха, но он проявляется случайным образом на серверах сам по себе.

Устранение неполадок:
Проверка кода
Проверка использования для исследования верхних пределов создания / уничтожения объекта
Проверка возможности создания объекта вне процесса, в котором возникла проблема
Мониторинг ресурсов с течением времени на серверах под нагрузкой
Просмотр журналов IIS, ошибок и событий для определения событий, приведших к проблеме

Вопросы:
Любые идеи о том, как воспроизвести проблему?
Что может вызвать такое поведение?
Идеи для обхода первых двух вопросов в пользу быстрого решения

Ответы [ 3 ]

1 голос
/ 18 марта 2011

DLL не на сетевом диске, не так ли? Вы можете получить «сбои», когда диск временно недоступен, что означает, что COM не может делать то, что ему нужно, и может не заметить, что диск снова доступен.

0 голосов
/ 08 февраля 2012

Это похоже на случайный сбой;некоторые условия гонки.
Попробуйте VMWARE , чтобы записать состояние машины, на которой вы запускаете эту DLL.Когда происходит ошибка, вы можете воспроизвести запись и проверить содержимое памяти.Вот почему вам не придется воспроизводить ошибку try and catch.По крайней мере, у вас будет надежная запись об этом.

Хотя я не могу предоставить решение, попробуйте catching ошибку и повторите попытку загрузки dll, когда это произойдет после обновления среды.

0 голосов
/ 16 февраля 2011

Я использовал Process Monitor для устранения подобной проблемы при доступе к стеку ADO / OLEDB.Оказалось, что среда была повреждена в какой-то момент, и классы ADO зарегистрированы с InprocServer32, имеющим значение REG_EXPAND_SZ, указывающее на% CommonProgramFiles% \ System \ ado \ msado15.dll или подобные операционные системы x64.

Также, когда вы регистрируете приложение в Restart Manager, при сбое процесс перезапускается процессом winlogon, среда которого отличается от среды проводника и, к сожалению, отсутствует% CommonProgramFiles% - ой!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...