29

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

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

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

2 ответа2

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 - это отложенные вызовы процедур, а прерывания - программные прерывания, оба связаны с драйверами / оборудованием.

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 секунды.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .