COM+ и .NET – практичный подход - часть 1 - Отслеживание компонентов и быстрое решение проблем

ОГЛАВЛЕНИЕ

Отслеживание компонентов и быстрое решение проблем

Приложение сервера COM+ предоставляет набор данных и статистику, позволяющую быстро локализовать вредоносный код. Если все сборки, используемые веб-приложением, загружены в домен приложений, только адрес памяти позволит узнать, где произошла ошибка (если вообще выдается сообщение об ошибке), путем передачи исключений вверх по иерархии и записи их в файл журнала. Даже если программист придерживается данной практики, администратор сервера вероятно не поймет эти журналы. Регистрация классов в качестве сервера COM+ поможет администраторам несколькими способами:
•    Информация о процессе. Каждый класс, регистрирующийся в качестве приложения сервера, получает свой собственный выделенный процесс. Консоль управления COM+ сообщает, чему равен идентификатор процесса у каждого приложения. С помощью этих данных можно найти сильно нагружающие процессор процессы в диспетчере задач. Сравнение идентификатора процесса (столбец идентификатора процесса добавляется из меню Вид->Выбрать столбцы) из диспетчера задач с видом состояния приложений COM+ поможет быстро определить, какое приложение COM+ виновно в интенсивном использовании процессора.
•    Информация о компоненте. Чтобы использовать эти данные, надо установить атрибут EventTrackingEnabled в объявлении класса. Установка этого атрибута дает статистику для каждого компонента приложения, которую можно посмотреть в виде состояния папки компонентов. Самые важные данные - CallTime. Этот параметр показывает, сколько времени в миллисекундах объект выполняет свою задачу. Используя эти данные, администратор может найти проблемные компоненты или компоненты, заставляющие приложение неправильно функционировать (компоненты с огромным временем вызова). Более того, если каждый компонент представляет собой один из слоев приложения, администраторы могут легко найти, находятся ли корни проблемы глубоко в базе данных или в слоях логики.

Как видно, данные о приложении и компонентах, экспортируемые COM+, могут использоваться администратором для минимизации времени отслеживания проблемы и максимизации общего времени доступности приложения. Как изоляция, данные о компоненте и приложении могут быть собраны, только если приложение назначено сервером (сбор времени вызова компонентов возможен, только если приложение назначено сервером. Другие статистические данные собираются для приложения библиотеки, но они не столь полезны, как время вызова).

С помощью предыдущего примера кода можно посмотреть, как описанные данные применяются на практике и помогают найти проблемный процесс и класс. Установите приложение COM+ на работу в качестве сервера и запустите веб-приложение. Нажмите кнопку NeverEndingStory. Когда использование процессора достигнет 100%, откройте диспетчер задач и переключитесь на вкладку процессов. Упорядочите данные по использованию процессора. Вверху списка должен быть DllHost.exe. Запомните идентификатор процесса DllHost.exe и откройте вид состояния консоли управления COM+ папки приложений COM+. Найдите приложение с тем же идентификатором процесса – вы обнаружите, что AvailabilityCheckDll соответствует тому же идентификатору процесса. Теперь, когда известно, какое приложение вызывает проблему, осталось найти класс-виновник. Откройте вид состояния компонентов приложения. Это приложение содержит только один класс, но сразу видно, что время вызова одного компонента продолжает расти. Этот компонент виновен в интенсивном использовании процессора.

Перезапуск приложения (COM+ 1.5)

Версия COM+ 1.5 еще больше повышает доступность и стабильность приложения COM+. Приложение COM+ может вызывать ожидаемые и неожиданные проблемы, такие как утечки памяти или использование немасштабируемого ресурса. COM+ позволяет администратору установить, в каких случаях приложение будет автоматически перезапускаться. COM+ позволяет установить перезапуск по времени жизни процесса, расходу памяти, количествe вызовов метода и активаций объекта.

Масштабирование объектов (COM+ 1.5)

COM+ 1.5 вводит новое средство, позволяющее масштабировать устаревшие однопоточные приложения (такие как компоненты, созданные с помощью VB 6.0). Это средство позволяет администратору установить количество процессов DllHost, запускаемых для конкретного приложения и обслуживающих входящие запросы. Если размер пула приложений больше одного, COM+ начинает распределять запросы между процессами DllHost по кругу. Можно посмотреть все процессы, в том числе их идентификаторы процесса, в папке работающих процессов консоли управления COM+. Наряду с повышением масштабируемости, организация пула приложений очень полезна для доступности и восстановления. Если отчего-то произошла ошибка в одном DllHost, новый запрос перенаправляется и использует другой DllHost из пула.

Дамп процесса (COM+ 1.5)

Полный дамп памяти процесса очень полезен для отслеживания, анализа и отладки. Дампы крайне важны для отыскания и исправления проблем, вызывающих исключения приложения. COM+ 1.5 решает эту проблему путем добавления вкладки, позволяющей администратору установить автоматическую генерацию дампа памяти процесса при возникновении исключения. Консоль управления COM+ позволяет установить местоположение файла дампа и количество файлов дампов, которое будет храниться до перемещения на диск. Кроме автоматической генерации файла дампа, можно сделать дамп памяти приложения в любой момент с помощью меню дампа в контекстном меню приложения в папке выполняющихся процессов. После создания файла дампа его можно открыть посредством WinDbg и изучить данные.

Организация одновременной работы разных версий приложения (COM+ 1.5 на сервере .NET)

Это средство есть только на серверах .Net. Необходимо подключить разделы com+ путем активации опции раздел в метке Опции компьютера в консоли управления COM+. Разделы позволяют администратору создать несколько разделов, каждый из которых вмещает приложение сервера или библиотеки с разной установкой метаданных. Данная опция позволяет разместить несколько версий приложения COM+ с разными данными каталога COM+ на одном и том же компьютере. Когда требуется активация компонента приложения COM+, COM+ решает активировать объект в разделе с помощью пользователя, активирующего компонент, и пользователей, прикрепленных к данному разделу. Эту возможность также можно применить для разделения данных между разными группами разработчиков или пользователей путем установки разной строки подключения в качестве строки конструктора COM+

Поиск светлого будущего

Следует надеяться, вы поняли, до какой степени приложение сервера COM+ помогает в создании более масштабируемых и доступных систем и, напротив, как приложение сервера COM+ вредит производительности преимущественно из-за участия DCOM в процессе активации и маршалинга. Следует надеяться, что Microsoft сообразит, и новые версии COM+ будут основаны на .Net и превратят DCOM в устаревший. До тех пор придется самостоятельно принимать решение о производительности или стабильности и доступности. В принципе, переключение с приложения сервера на библиотеку является всего лишь индикатором изменения типа активации, но на практике есть имитации сервера и небольшие изменения кода (показанные в тестовом приложении) между двумя типами активации. Рекомендуется учитывать ограничения и изменения кода при создании класса, размещаемого как компонент COM+. Такой подход оставляет за администратором и руководителем проекта решение того, как в итоге будет работать сборка.