Служба зависает при выключении: настройка WaitToKillServiceTimeout
Симптомы зависания при выключении Windows Server
При отправке сервера или рабочей станции в перезагрузку экран останавливается на сообщении: Остановка служб..., Завершение работы или «Подготовка к выключению Windows» на 5–10 минут. В журнале событий фиксируется ошибка Event ID 7043.
| Событие | Источник | Причина |
|---|---|---|
| Event ID 7043 | Service Control Manager | Служба не ответила на команду завершения работы (SERVICE_CONTROL_SHUTDOWN) |
| Event ID 7024 | Service Control Manager | Служба аварийно прекратила работу при выключении с внутренним кодом ошибки |
Диагностика зависающих служб и ускорение выключения
- Вычисление сбойной службы в Просмотре событий: откройте
eventvwr.msc> Журналы Windows > Система. Создайте фильтр по источникуService Control Managerи событиям7043,7044. В описании события будет прямо указано имя зависшей службы (например: «Служба MSSQLSERVER не смогла завершить работу за отведенное время»). - Корректировка таймаута принудительного уничтожения служб в реестре: по умолчанию Windows ожидает 5000 мс (в десктопных) и до 120000 мс (в серверных ОС). Установите разумный лимит в 10–12 секунд:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control" -Name "WaitToKillServiceTimeout" -Value "10000" -Force - Ускорение выгрузки пользовательских процессов (HungAppTimeout):
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name "WaitToKillAppTimeout" -Value "5000" -Force Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name "AutoEndTasks" -Value "1" -Force - Чистая остановка тяжелых служб перед перезагрузкой: если зависает база данных или брокер, выполняйте перезагрузку через командный файл со штатным предварительным гашением сервиса:
net stop MSSQLSERVER /y Restart-Computer -Force
Внимание: Не устанавливайте значение WaitToKillServiceTimeout меньше 5000 мс (5 секунд) на серверах баз данных и контроллерах домена AD DS, иначе служба Active Directory (NTDS) или SQL Server не успеет сбросить кэш транзакций на диск, что приведет к повреждению базы при следующем старте.
Частые вопросы (FAQ)
В каких единицах измеряется параметр WaitToKillServiceTimeout?
Значение строкового параметра в реестре задается строго в миллисекундах (например, 10000 соответствует 10 секундам).
Что делает параметр AutoEndTasks = 1?
Он указывает Windows автоматически и без вывода диалоговых окон завершать зависшие пользовательские приложения при выходе из системы.
Почему антивирусные службы часто зависают при выключении?
Антивирусные агенты перехватывают выгрузку драйверов и сетевых соединений других служб и пытаются отправить телеметрию в облако в момент, когда сетевой стек уже остановлен.
Как принудительно перезагрузить зависший по RDP сервер немедленно?
Выполните команду shutdown.exe /r /f /t 0 — ключ /f принудительно закрывает все застрявшие приложения.