
Я сталкиваюсь с зависаниями приложений каждый день, по нескольку раз в день, уже несколько дней на моей системе Windows 7. Эта система была стабильной в течение 4 лет, так что происходит что-то новое.
Основным симптомом было то, что Thunderbird зависал при запуске и становился непригодным для использования. Я подумал, что это проблема Thunderbird, и в итоге создал новый профиль, потому что моему профилю больше 10 лет.
Почему я подумал о профиле? Потому что я обнаружил, что не могу удалить некоторые .msf
файлы без перезагрузки. Попытка сделать это заморозила Explorer, который пришлось перезапустить.
С новым профилем Thunderbird продолжал зависать, но реже, поэтому я смог прочитать почту и составить быстрый ответ.
Вчера я редактировал .hmtl
файл с помощью gvim, и в то же время загружал его в Firefox, чтобы посмотреть на результат.
После часа работы он снова завис. Любой процесс, пытающийся манипулировать файлом, .hmtl
зависал. Уничтожение и Firefox, и gvim не помогло.
Используя Process Explorer (НЕ запущенный от имени администратора), не удалось отобразить файл .hmtl
с функцией поиска дескриптора. Handle.exe тоже не смог. Перезагрузка разблокирует файл, который не поврежден. У меня есть chkdsk /B
два устройства ( C:
это SSD, D:
это HDD), так как .msf
файл был включен D:
, а .hmtl
был включен C:
.
Я подозревал поиск Windows и очистил его базу данных.
Я попробовал отключить поиск Windows, антивирус (Avast) и два инструмента синхронизации/резервного копирования, работающих как служба.
Не снял блокировку.
Я нашел вот такое интересное применение windbg:Зависший процесс в Windows: есть ли способ узнать причину?
Я прикрепил процесс Thunderbird, который в настоящее время завис, и теперь вижу это:
FAULTING_IP:
ntdll!DbgBreakPoint+0
00000000`7772cc90 cc int 3
EXCEPTION_RECORD: ffffffffffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 000000007772cc90 (ntdll!DbgBreakPoint)
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 1
Parameter[0]: 0000000000000000
FAULTING_THREAD: 0000000000000000
BUGCHECK_STR: HANG
PROCESS_NAME: thunderbird.exe
ERROR_CODE: (NTSTATUS) 0xcfffffff - <Unable to get error code text>
EXCEPTION_CODE: (NTSTATUS) 0xcfffffff - <Unable to get error code text>
EXCEPTION_PARAMETER1: 0000000000000000
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
DERIVED_WAIT_CHAIN:
Dl Eid Cid WaitType
-- --- ------- --------------------------
56 74c.1a04 Speculated (Triage) -->
0 74c.12b4 File IO
WAIT_CHAIN_COMMAND: ~56s;k;;~0s;k;;
BLOCKING_THREAD: 00000000000012b4
DEFAULT_BUCKET_ID: APPLICATION_HANG_BlockedOn_FileIO
PRIMARY_PROBLEM_CLASS: APPLICATION_HANG_BlockedOn_FileIO
LAST_CONTROL_TRANSFER: from 00000000751dc1ff to 000000007772df0a
STACK_TEXT:
00000000`0024ddd8 00000000`751dc1ff : 00000000`003becdc 00000000`003becf4 00000000`005847e0
000000ba`00340201 : ntdll!ZwCreateFile+0xa
00000000`0024dde0 00000000`751cd18f : 00000000`003becdc 00000000`00000000 00000000`00000000
00000000`00000060 : wow64!whNtCreateFile+0x10f
00000000`0024deb0 00000000`75152776 : 00000000`77360745 00000000`751c0023 00000000`00000246
00000000`003bf2f8 : wow64!Wow64SystemServiceEx+0xd7
00000000`0024e770 00000000`751cd286 : 00000000`00000000 00000000`75151920 ffffffff`fc5f0000
00000000`7770dfc1 : wow64cpu!TurboDispatchJumpAddressEnd+0x2d
00000000`0024e830 00000000`751cc69e : 00000000`00000000 00000000`00000000 00000000`751c4b10
00000000`7ffe0030 : wow64!RunCpuSimulation+0xa
00000000`0024e880 00000000`777216a6 : 00000000`00584330 00000000`00000000 00000000`7780e670
00000000`777e1950 : wow64!Wow64LdrpInitialize+0x42a
00000000`0024edd0 00000000`7777d150 : 00000000`00000000 00000000`77720db1 00000000`0024f380
00000000`00000000 : ntdll!LdrpInitializeProcess+0x17e3
00000000`0024f2c0 00000000`7770b63e : 00000000`0024f380 00000000`00000000 00000000`fffdf000
00000000`00000000 : ntdll! ?? ::FNODOBFM::`string'+0x25b20
00000000`0024f330 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000
00000000`00000000 : ntdll!LdrInitializeThunk+0xe
FOLLOWUP_IP:
wow64!whNtCreateFile+10f
00000000`751dc1ff 448bd8 mov r11d,eax
SYMBOL_STACK_INDEX: 1
SYMBOL_NAME: wow64!whNtCreateFile+10f
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: wow64
IMAGE_NAME: wow64.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 562593aa
STACK_COMMAND: ~0s ; kb
BUCKET_ID: X64_HANG_wow64!whNtCreateFile+10f
FAILURE_BUCKET_ID: APPLICATION_HANG_BlockedOn_FileIO_cfffffff_wow64.dll!whNtCreateFile
WATSON_STAGEONE_URL: http://watson.microsoft.com/0004cc90.htm?Retriage=1
Followup: MachineOwner
---------
Итак, хорошо, я был совершенно уверен, что Thunderbird блокирует IO, и теперь это подтверждено. Согласно документации API, этот вызов может быть открытием существующего файла. Я попытался выгрузить аргумент, дающий имя файла (насколько я понимаю), играя случайным образом с помощью этой команды: "dt ntdll!_OBJECT_ATTRIBUTES 00000000`005847e0", но я не знаком с windbg и соглашениями о вызовах, поэтому мне пока не удалось разобраться в структуре.
Так что же мне делать дальше?
EDIT:
После того, как я изменил версию WinDbg на x86, как и предлагалось, мои дампы стали поддаваться анализу.
Зависания прекратились, как это всегда бывает, когда вы концентрируетесь на проблеме: она исчезает ненадолго, чтобы избежать решения, до этой ночи, когда Canon DPP завис во время пакетной обработки файлов RAW.
Вот трассировка:
FAULTING_IP:
ntdll!DbgBreakPoint+0
7736000c cc int 3
EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 7736000c (ntdll!DbgBreakPoint)
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 1
Parameter[0]: 00000000
FAULTING_THREAD: 00000000
BUGCHECK_STR: HANG
PROCESS_NAME: DPPBatch.exe
ERROR_CODE: (NTSTATUS) 0xcfffffff - <Unable to get error code text>
EXCEPTION_CODE: (NTSTATUS) 0xcfffffff - <Unable to get error code text>
EXCEPTION_PARAMETER1: 00000000
MOD_LIST: <ANALYSIS/>
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
DERIVED_WAIT_CHAIN:
Dl Eid Cid WaitType
-- --- ------- --------------------------
1 1b88.1ff4 Speculated (Triage) -->
0 1b88.1948 File IO
WAIT_CHAIN_COMMAND: ~1s;k;;~0s;k;;
BLOCKING_THREAD: 00001948
DEFAULT_BUCKET_ID: APPLICATION_HANG_BlockedOn_FileIO
PRIMARY_PROBLEM_CLASS: APPLICATION_HANG_BlockedOn_FileIO
LAST_CONTROL_TRANSFER: from 74e8c5fd to 77370106
STACK_TEXT:
0018ed8c 74e8c5fd 0018ee28 80100080 0018edcc ntdll!ZwCreateFile+0x12
0018ee30 76e53f56 00000060 80100080 00000001 KERNELBASE!CreateFileW+0x35e
0018ee5c 76e553b4 0058e300 80000000 00000001 kernel32!CreateFileWImplementation+0x69
0018ee8c 100dbf8e 01f4ed98 80000000 00000001 kernel32!CreateFileA+0x37
WARNING: Stack unwind information not available. Following frames may be wrong.
0018eeb8 10002275 01f40000 00000000 10002294 DPPDLL!GNZ_getFilenameFromScriptFile+0x3e
0018eef8 0018ef7c 01f4ed98 00000000 0018ef7c DPPDLL!UCSCloseProfile+0xea5
0018eefc 01f4ed98 00000000 0018ef7c 01f4fc20 0x18ef7c
0018ef7c 00000000 00000000 00000000 00000000 0x1f4ed98
FOLLOWUP_IP:
DPPDLL!GNZ_getFilenameFromScriptFile+3e
100dbf8e 8bf8 mov edi,eax
SYMBOL_STACK_INDEX: 4
SYMBOL_NAME: dppdll!GNZ_getFilenameFromScriptFile+3e
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: DPPDLL
IMAGE_NAME: DPPDLL.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 52251a6c
STACK_COMMAND: ~0s ; kb
BUCKET_ID: HANG_dppdll!GNZ_getFilenameFromScriptFile+3e
FAILURE_BUCKET_ID: APPLICATION_HANG_BlockedOn_FileIO_cfffffff_DPPDLL.dll!GNZ_getFilenameFromScriptFile
WATSON_STAGEONE_URL: http://watson.microsoft.com/0001000c.htm?Retriage=1
Followup: MachineOwner
---------
Я легко отследил соответствующий файл на моем диске D: : D:\Sauvegarde\Tirages\photos\20151214 - totale D70\\GNZC0E116282C365.vbf
. Он зависает после 2 часов работы. В это время я использовал ПК. Это определенно похоже на повреждение файловой системы или ошибку драйвера устройства, поэтому я снова запущу chkdsk. Тем временем
я попытался запустить ProcessExplorer, чтобы найти процессы ввода-вывода, ожидающие файл, это сработало. Но я вспомнил, что его нужно запускать от имени администратора, поэтому я закрыл его и щелкнул правой кнопкой мыши по значку и... потребовалось около 5 минут, чтобы он появился (я не ожидал, что он появится, это меня удивило). И снова, согласно Process Explorer, ни один дескриптор не связан с блокирующим файлом (я искал "vbf").
Ну, я думаю, что на мой вопрос об отладчике дан ответ (существование двух версий WinDbg), а мою проблему все еще нужно решить, но я не уверен, что это подходящее место, чтобы получить по ней помощь.