Как я могу определить виновника моего медленного завершения работы Windows?

30

Мой компьютер очень долго выключается.

Как я могу определить виновника? Я не хочу ждать, пока мой компьютер выключится ...

Есть ли программа, которую я могу использовать, чтобы отследить, сколько времени занимает выключение?

wizlog
источник
1
Мы понятия не имеем, как настроена ваша система и что может работать в фоновом режиме
случайно
1
Хорошо ... Я видел, что кто-то еще спросил это, затем удалил это, поскольку я составлял очень длинный и полный ответ ... (мне было
немного
Вы всегда можете предложить это для блога
случайно
2
Нажмите и удерживайте кнопку питания в течение нескольких секунд.
Даниэль Р Хикс
5
Этот вопрос действителен, я могу объективно ответить на него, поэтому его проблема решена. В этом нет ничего двусмысленного (проблема в том, что его время выключения занимает много времени), расплывчатого (он хочет ускорить его выключение), неполного (подробности не нужны, конечно, каждый компьютер отличается, но это не делает технику чтобы определить виновника, другого, слишком широкого (вы могли бы так подумать, но я не вижу других вопросов по устранению неполадок, связанных с устранением неполадок, так что это действительно ценный вопрос; я думаю, что он будет широким, если он захочет ускорить выполнение других задач). ) или риторический (включает в себя xperf).
Тамара Вийсман

Ответы:

31

Windows предоставляет счетчики производительности, а также трассировку событий, которая позволяет приложениям выполнять анализ производительности, чтобы можно было точно определить причину проблем с производительностью. Среди существующих существует один выдающийся инструментарий: Windows Performance Toolkit, доступный в Windows SDK .

В этом инструментарии вы найдете xbootmgr.exe, предназначенный для анализа производительности Windows On / Off Transition .

Несмотря на то, что вышеупомянутый связанный документ содержит все детали для каждого перехода вкл / выкл, вот общая идея о трассировке и анализе перехода выключения с использованием xbootmgrграфического интерфейса пользователя xperf:

  1. Загрузите Windows SDK, а затем установите Windows Performance Toolkit, используя его.

  2. Откройте командную строку от имени администратора и запустите:

    cd %ProgramFiles%\Microsoft Windows Performance Toolkit

  3. Если вам нужна помощь в будущем, вы можете напечатать, xbootmgr -helpа также xperf /?.

  4. Выполните трассировку перезагрузки следующим образом:

    xbootmgr -trace shutdown -traceFlags BASE+DIAG+LATENCY -noPrepReboot

  5. После загрузки он сгенерирует след в течение двух минут.

  6. Трасса была сохранена в %ProgramFiles%\Microsoft Windows Performance Toolkit, вы можете перетащить ее, xperf.exeи она будет открыта в графическом интерфейсе.

  7. Вы увидите графический интерфейс с различными графиками, стрелка слева позволяет вам добавлять / удалять графики.

  8. Посмотрите на графики и посмотрите, сможете ли вы найти что-то необычное, вы можете выбрать интервал и увеличить его, если хотите. Щелкните правой кнопкой мыши и уменьшите масштаб, когда вы хотите увидеть все.

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

  10. В этих таблицах рассортируйте по весу или по времени, чтобы выяснить, на что он тратит больше всего. Обратите внимание, что вы можете перетаскивать столбцы, поэтому, например, таблица ввода / вывода позволяет вам проверить процесс с наибольшим использованием, а также путь с наибольшим использованием.

    Разделитель (желтый заголовок столбца) позволяет сделать так, чтобы в столбцах справа от него отображалось общее количество столбцов слева от него. Итак, если у вас сначала есть Путь, а затем Процесс, то вы можете открыть дерево для файла, чтобы увидеть, какие процессы к нему получили доступ, а затем вы получите итоговые значения для этой комбинации процесс / файл.

  11. Вы можете найти больше информации о том, как функционируют графики и таблицы здесь .

  12. Если вам как-то нужно пойти вниз, чтобы посмотреть на следы стека; выполните еще одну загрузочную трассировку и добавьте -stackWalk profileпараметр, установите _NT_SYMBOL_PATH и щелкните правой кнопкой мыши на любом графике и включите «Загрузка символов». Это позволит вам проверить, какие функции он на самом деле вызывает, хотя в общем вам это не понадобится для завершения работы; но он может позволить такие вещи, как обнаружение того, что ваш брандмауэр мешает вашему отладчику в качестве программиста. Довольно изящно ...

Удачи, надеюсь, вы сможете найти виновника. Если нет, то оставьте след, и мы посмотрим на вас ...

Обратите внимание, что DPC - это отложенные вызовы процедур, а прерывания - это программные прерывания , оба они связаны с драйверами / оборудованием.

Тамара Вийсман
источник
1
Удивительно полезный ответ. Любые учебники по ETW чрезвычайно полезны; Это область Windows без документации и графического интерфейса.
Ян Бойд
@Tom Wijsman Ссылки должны быть обновлены
Моав
Теперь это часть комплекта для оценки и развертывания Windows, ссылку можно найти, например, по адресу msdn.microsoft.com/en-us/windows/hardware/commercialize/test/… или просто выполнив поиск «Windows ADK». Во время установки можно просто выбрать Performance Toolkit.
Андреас Рифф
Теперь это тоже часть ..., потому что она все еще доступна в SDK.
Тамара Вийсман
22

Мои отключения, где требуется много времени, чтобы бежать. Далее следует мой пример с ответом Тома .

Первый график показывает проблему, дисковый ввод-вывод :

введите описание изображения здесь

Мое отключение занимает более минуты, и это все ввод-вывод на жестком диске.

На следующем графике « Использование диска» показано, что диск работает почти на 100%:

введите описание изображения здесь

Последний график показывает использование диска процессами :

введите описание изображения здесь

Отфильтровывая, я понимаю, что все это вызвано WinInit.exe:

введите описание изображения здесь

Щелкнув правой кнопкой мыши по любому графику жесткого диска и выбрав Сводную таблицу , я могу получить подробную информацию о том, к каким файлам был произведен доступ каким процессом:

введите описание изображения здесь

56,4 секунды моего выключения были потрачены на WinInitзапись 6,7 ГБ в C:\hiberfil.sys.


Но вопрос в том, почему Windows записывает в мой файл гибернации при завершении работы ?

Затем я вспомнил опцию, которую я включил, чтобы стереть этот файл подкачки при завершении работы:

  • Пуск -> Выполнить -> SecPol.msc
    • Настройки безопасности, Локальные политики, Параметры безопасности
    • Завершение работы: очистить файл подкачки виртуальной памяти

введите описание изображения здесь

Поэтому я отключил эту опцию и xbootmgrснова запустил . Теперь мое отключение составляет 22 секунды:

введите описание изображения здесь

Теперь 9sна 22sвыключение тратится Systemзапись в какой-то unknownфайл. Это может быть достойно дальнейшего расследования.

Но сейчас я решил отключиться за полторы минуты.


я пошел дальше и решил свое медленное отключение 22-х годов. От t = 12sдо t = 21sпоказал 100% использование диска , но ноль дискового ввода-вывода . Это было непонятно.

Пока во время одной остановки я не услышал знакомый звук одного из моих дисков, вращающихся. Выключение было приостановлено на 9 секунд, поскольку Windows пыталась получить доступ к диску, который перешел в спящий режим. Девять секунд спустя привод реагирует, а через мгновение машина выключается.

Странно, что Windows пробуждает диск, чтобы сказать, что пора идти спать.

Это сделало бы мое фактическое отключение 13,5 секунд. Это может стоить большего расследования. Но сейчас я решил отключить меня за 22 секунды.

Ян Бойд
источник
1
+1 Рад, что вы получили решение в вашем случае, и хороший пост!
Тамара Вийсман
1
Эти ответы заслуживают сообщения в блоге, не так ли? ;)
Иво Флипс