Event ID 1002 Application Hang: Программа зависла и не отвечает
Архитектура зависаний (Hang) и UI-потоки
Событие 1002 логируется в журнале Application источником Application Hang. Сообщение: «Программа [Имя.exe] версии [Версия] перестала взаимодействовать с Windows и была закрыта». Архитектура Windows требует, чтобы любая программа с графическим интерфейсом (GUI) постоянно обрабатывала очередь сообщений (Message Pump). Если главный поток (UI Thread) программы застревает (например, ждет ответа от сети), окно программы становится белым или полупрозрачным, курсор превращается в кольцо, и Windows пишет 1002.
Отличие 1002 от 1000 (Crash)
| Параметр | Event ID 1002 (Hang) | >Event ID 1000 (Crash) |
|---|---|---|
| Суть сбоя | Программа жива, но ждет ресурс (Deadlock, сеть, диск). | Программа выполнила недопустимый код (Access Violation) и была убита. |
| Действие пользователя | Появляется табличка "Программа не отвечает... Подождать или Закрыть?". | Программа мгновенно исчезает (Схлопывается) без окон. |
| Дамп памяти | Дамп нужно собирать вручную, пока окно висит. | Дамп сохраняется ОС (WER) автоматически. |
Пошаговое дерево решений (Отладка задержек)
Сценарий 1: Дисковые и сетевые задержки (I/O Bottleneck)
В 80% случаев на серверах программа (например, «Толстый клиент 1С») ждет данные. Главный поток заблокирован.
- Откройте Монитор ресурсов (resmon.exe) в момент зависания.
- Вкладка Диск -> Очередь диска (Disk Queue Length). Если очередь больше 2-3, диск не справляется (События 153/129 в System).
- Вкладка Сеть -> TCP-соединения. Проверьте задержки пакетов до сервера баз данных SQL.
Сценарий 2: Конфликт с антивирусным ПО (Locking)
Антивирус (Kaspersky, Dr.Web) перехватывает I/O операции. Когда программа пытается прочитать свой временный файл, антивирус блокирует его (File Lock) для сканирования. Программа зависает (Hang). Добавьте рабочие папки программы в Исключения (Exclusions) антивируса.
Сценарий 3: Сбор дампа для разработчиков (DebugDiag)
Если зависает самописный корпоративный софт, программистам нужен дамп памяти в момент 'фриза'.
- Когда программа "побелела", НЕ нажимайте "Закрыть".
- Откройте Диспетчер задач -> Подробности (Details).
- Нажмите правой кнопкой на зависший процесс
.exe-> Создать файл дампа (Create dump file). - Отправьте файл
.dmpразработчикам для анализа потоков в Visual Studio / WinDbg.
Типовые ошибки администраторов
- Перезагрузка сервера вместо профилирования: Перезагрузка снимет зависание (Deadlock), но уничтожит все следы. Вы должны использовать утилиту Process Explorer (Sysinternals) и посмотреть вкладку Threads у зависшего процесса, чтобы увидеть, в какой системной библиотеке (например, `ntoskrnl` или `ws2_32.dll`) застрял поток.
Траблшутинг "зависаний" (Hangs) — сложнейшая задача профилирования. Возьмем вашу RDS-ферму на системную поддержку: проанализируем I/O узкие места, найдем блокирующие процессы (Deadlocks), оптимизируем профили и обеспечим мгновенный отклик интерфейса.
Частые вопросы (FAQ)
Почему событие 1002 генерируется для Проводника (explorer.exe)?
При открытии 'Мой компьютер' Проводник пытается опросить все примонтированные сетевые диски (Mapped Drives). Если файловый сервер недоступен, explorer.exe зависает на 30-60 секунд по таймауту SMB, генерируя 1002. Удалите неработающие ярлыки.
Как Windows определяет, что программа зависла?
Если главный поток программы (UI Thread) не извлекает сообщения из очереди (Message Queue) дольше 5 секунд, Диспетчер окон рабочего стола (DWM) помечает окно как 'Не отвечающее' (Not Responding) и применяет к нему визуальный эффект 'Ghosting' (побеление).
Можно ли отключить окно 'Программа не отвечает'?
Можно, через ключ реестра 'AutoEndTasks=1' в ветке HKCU\Control Panel\Desktop. Windows будет молча 'убивать' зависшие программы без вопросов пользователю. (Удобно для киосков и терминалов).
Поможет ли увеличение приоритета процесса (High Priority)?
Нет. Приоритет CPU решает проблему нехватки квантов времени процессора. Зависание (Hang) в 99% случаев связано не с CPU, а с ожиданием ввода-вывода (I/O Wait).
Пишет ли 1002 причину зависания в логи?
Событие 1002 содержит так называемый 'Cross-thread' код, но для сисадмина он бесполезен. Причину (кто заблокировал файл или сокет) может показать только анализ дампа памяти через WinDbg.