Лучшие Утилиты


Разработка → Применение утилиты PerfView в службе поддержки пользователей
Октябрь 8, 2016 – 23:25
Лучшие утилиты резервного
Один из этапов обработки заявки от пользователя в нашей службе поддержки — воспроизведение проблемы. Сложности с воспроизведением возникают по разным причинам: пользователь не всегда может предоставить пример приложения, на котором проявляется некорректное поведение кода, или проблема может быть специфична для конкретного окружения. Сегодня используется огромное количество программных, аппаратных конфигураций и виртуальных сред, в которых работают программы, написанные с нашими компонентами. Ширина экрана в пикселах может различаться в пять раз (от 800 до 4к). А еще конфигурации могут отличаться другими параметрами: объемом памяти, количеством дисплеев, DPI, настройками безопасности, видеокартой и ее драйверами. Это разнообразие обеспечивает стабильный поток заявок от клиентов, специфичных для какой-то конфигурации. Например, проблема воспроизводится только на определенной версии Windows или только на определенных установках DPI или если у пользователя три монитора. Для решения этой проблемы уже несколько лет наша служба поддержки использует утилиту Microsoft PerfView. Если все остальные способы воспроизвести проблему исчерпаны, мы отдаем пользователю простую инструкцию, как запустить трассировку и прислать нам результирующий файл. Трассировочная информация помогает понять, что именно вызывает проблему.

В этой статье будут рассмотрены возможности применения PerfView в службе технической поддержки и ограничения этой утилиты.
Изначально PerfView была создана для внутреннего использования и применялась Microsoft при оптимизации производительности Windows.NET CLR и Visual Studio. В утилите используется инструмент ядра Windows — ETW (event tracing for windows)

Чтобы правильно интерпретировать результаты трассировки, важно понимать, как работает эта утилита. Любую программу можно представить в виде ориентированного графа, вершинами которого будут методы. Тогда кол стек программы в любой момент времени будет представлять собой путь от метода main до метода, который выполняется в текущий момент.

В идеальном случае для анализа работы этой программы необходимо иметь информацию о ее состоянии в каждый момент времени. Например, такую информацию дает отладка. Но, во-первых, отладчик оказывает влияние на отлаживаемый процесс и полученные данные могут оказаться недостоверными. Во-вторых, все большее распространение получают асинхронные вызовы, которые отладчики анализируют недостаточно хорошо. Для многих задач нет необходимости в информации о состоянии анализируемой программы в каждый момент времени. Можно делать снимки состояния программы через определенные промежутки времени. На рисунке показана временная диаграмма работы простой программы в один поток. Временная ось внизу диаграммы разбита на равные отрезки времени, кратные длине такта процессора. Для серых отрезков кол стеки недоступны, для зеленых – доступны.

На основе этой идеи и был создан профайлер PerfView. Через определенные, достаточно короткие промежутки времени делается снимок кол стеков всех процессов на машине. PerfView умеет загружать символы из интернета, имеет маленький размер и переносится на другую машину простым копированием. Это делает PerfView мощным инструментом для анализа работы любых программ на любой машине с Windows. Помимо кол стеков сохраняются системные события, события .NET и много чего еще. Эта информация часто помогает разобраться в сути проблемы и найти решение.

Source: habrahabr.ru
Похожие публикации