Время от времени системные администраторы обнаруживают, что им не удается своевременно запустить какой-нибудь компьютер. Возможно, запуск одного из серверов задерживается после применения обновлений безопасности. Это распространенная неполадка, и выяснить ее причину можно различными способами. Например, отключить все необязательные службы с использованием msconfig.exe, чтобы определить, какая служба или драйвер запаздывают с откликом. Но должен существовать и способ получить удобную для анализа общую статистическую картину завершения работы.
В этом поможет инструмент xbootmgr.exe из набора Windows Performance Toolkit, совместимый с Windows Vista, Windows 2008, Windows 7 и Windows 2008 R2. Отчет xbootmgr.exe содержит ценную информацию о завершении работы в удобном для просмотра файле XML. Эта информация будет полезна в дальнейшем, когда потребуется выяснить причину следующей неполадки. Новую версию Windows Performance Toolkit можно получить, загрузив комплект SDK для Windows 7 по адресу www.microsoft.com/downloads/details.aspx? FamilyID=c17ba869-9671-4330‑a63e-1fd44e0e2505&displaylang=en.
Необязательно загружать весь комплект SDK. Из большого загружаемого пакета необходимы лишь собственно файлы WPT.exe. Чтобы ускорить загрузку, рекомендуется выполнить следующие действия.
- На странице Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1 нажмите кнопку Download, затем щелкните Run в диалоговом окне.
- Нажмите кнопку Next в открывшемся диалоговом окне, а затем примите условия лицензионного соглашения.
- Продолжайте нажимать кнопку Next до тех пор, пока не увидите диалоговое окно, в котором представлена страница параметров установки. На ней нужно снять все флажки, кроме Win32 Development Tools.
- Нажмите Next, чтобы начать установку. Для установки потребуется несколько секунд или больше, в зависимости от скорости соединения с Интернетом.
После завершения установки можно обнаружить три файла в каталоге C:Program FilesMicrosoft SDKsWindowsv7.0Bin, именуемые wpt_ia64.msi, wpt_x64.msi и wpt_x86.msi.
Трассировка процедуры завершения
После загрузки двоичных файлов WPT можно установить один из них, соответствующий платформе системы. После установки Xperf откройте командную строку, чтобы перейти в каталог установки. По умолчанию это C:UsersAdminAppDataRoamingMicrosoftWindowsStart MenuProgramsMicrosoft Windows Performance Toolkit. Введите следующую команду для трассировки процедуры завершения:
C:xperf>xbootmgr.exe -trace
shutdown –traceflags latency+dispatcher
-numruns 1 –stackwalk Profile+CSwitch
Вводите команду в одной строке. Ниже приводится описание всех параметров.
- -trace shutdown: выполнить трассировку процедуры завершения работы системы.
- -traceflags latency+dispatcher: включить флаги трассировки в группе latency Kernel и dispatcher Kernel. С помощью команды xperf -help providers можно посмотреть определения флагов трассировки.
- -numruns 1: задать количество повторений процесса завершения работы системы равным 1.
- -stackwalk Profile+CSwitch: включить проход по стеку для Profile и CSwitch. Этот параметр действует только в Windows Vista и более новых версиях операционных систем Windows.
Xbootmgr выполнит одну начальную загрузку, после чего необходимо заново зарегистрироваться в системе. Но Xperf будет выполнять одну дополнительную загрузку для каждой трассировки завершения, заданной параметром numruns. После второй загрузки, когда трассировка завершена, окно состояния Xbootmgr исчезает. В предыдущем примере команды компьютер перезагрузится дважды.
После второй перезагрузки Xperf автоматически объединяет два файла в один. Потребуется некоторое время, чтобы объединить файлы etl с именем premerge в один файл. Через несколько секунд после последней перезагрузки в каталоге xperf появится единый файл с именем shutdown_latency+dispatcher_1.etl. Этот файл etl можно экспортировать в отчет на XML о завершении с использованием команды (вводимой в одной строке)
C:xperf>xperf -i shutdown_latency+dispatcher_1.etl
-o shutdown_demo1.xml -a shutdown
Просмотр и анализ трассировки
Далее необходимо открыть файл shutdown_demo1.xml в браузере. Открывая XML-файл (экраны 1 и 2), в первую очередь следует обратить внимание, что результаты представлены в формате узел/лист. Развертывая узел, можно получить дополнительную информацию.
Экран 1 содержит очень ценную информацию.
- Первый узел показывает, что формат времени указан в миллисекундах.
- Можно также увидеть общее время закрытия; в данном примере потребовалось 20 761 мс, или 20,76 с, чтобы полностью завершить работу компьютера.
- Время завершения служб составило 5100 мс, или 5,1 с.
- Листинги Application Shutdown можно найти под узлом perSessionInfo. Приведено время завершения для каждой прикладной программы, выполняемой в каждом сеансе. Время также дано в миллисекундах.
Кроме того, файл shutdown_demo1.xml содержит следующие дополнительные фрагменты информации, как показано на экране 2.
- Можно определить, какие службы не отвечают, то есть
неправильно выполняют обмен «вызов‑приветствие» с диспетчером Service Control Manager (SCM). SCM ожидает 20 секунд, прежде чем завершить эти службы, если они не завершаются корректно. В моем случае одна служба, WcesComm.exe, не завершила свою работу за отведенные ей 20 секунд.
- Можно выяснить, как долго выполнялись различные фазы процедуры завершения.
Также имеют значение детали завершения службы (не показаны на иллюстрациях), приведенные под узлом autoStartStartTime для службы. Здесь можно узнать точную продолжительность завершения каждой службы.
Медленное завершение работы
При использовании xbootmgr.exe проверьте правильность синтаксиса при сборе данных трассировки и их экспорте в XML-отчет. Это очень важно, так как неправильное обращение с Xperf помешает найти причину неполадки; в случае опечатки трудно обнаружить ошибку. Полезно подготовить пакетный файл с командами, чтобы не вводить их многократно.
Познакомьтесь с результатами XML-файла, он содержит много ценной информации. Данной статьей можно воспользоваться как образцом для знакомства с различными разделами XML-вывода, чтобы в следующий раз вы знали, что делать в случае медленного завершения работы.
Майкл Моралес (morales@microsoft.com) — старший инженер службы поддержки Microsoft Global Escalation Services. Специализируется на проблемах отладки и производительности Windows