
Windows 7 시스템에서 응용 프로그램이 매일, 하루에 여러 번, 며칠 동안 정지되는 현상을 경험하고 있습니다. 이 시스템이 4년 동안 안정적으로 유지되면서 새로운 일이 일어나고 있습니다.
주요 증상은 Thunderbird가 시작 시 멈춰서 사용할 수 없게 되는 것이었습니다. 썬더버드의 문제인 줄 알았고, 프로필이 10년이 넘었기 때문에 결국 새 프로필을 만들었습니다.
내가 프로필을 생각한 이유는 무엇일까? .msf
재부팅하지 않으면 일부 파일을 삭제할 수 없다는 것을 알았 기 때문입니다 . 그렇게 하려고 하면 다시 시작해야 하는 Explorer가 정지되었습니다.
새 프로필을 사용하면 Thunderbird가 계속 멈췄지만 빈도가 줄어들었기 때문에 메일을 읽고 빠른 답변을 작성할 수 있었습니다.
어제 저는 gvim으로 파일을 편집하는 .hmtl
동시에 결과를 보기 위해 Firefox에 로드했습니다.
한 시간 작업 후 다시 얼었습니다. 파일을 조작하려는 모든 프로세스 .hmtl
가 정지되었습니다. Firefox와 gvim을 모두 종료해도 도움이 되지 않았습니다.
.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 및 호출 규칙에 익숙하지 않아서 지금까지 실패했습니다. 구조를 파헤쳐 보세요.
그럼 다음에 무엇을 할 수 있나요?
편집:
제안된 대로 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시간 작업 후 프로세스가 중단됩니다. 저는 이때 PC를 사용하고 있었습니다. 확실히 파일 시스템 손상이나 장치 드라이버 버그인 것 같아서 chkdsk를 다시 실행하겠습니다.
그동안 파일에서 대기 중인 프로세스 IO를 찾기 위해 ProcessExplorer를 시작하려고 시도했는데 제대로 작동했습니다. 하지만 관리자 권한으로 시작해야 한다는 것을 기억하고 있어서 닫고 아이콘을 마우스 오른쪽 버튼으로 클릭했는데... 팝업이 나타나는 데 약 5분 정도 걸렸습니다(팝업이 나타날 줄은 예상하지 못했고 놀랐습니다). 다시 한 번 Process Explorer에 따르면 차단 파일과 연결된 핸들이 없습니다("vbf"를 검색했습니다).
글쎄, 디버거에 대한 내 질문에 대한 답변이 있다고 생각하며(WinDbg의 두 가지 버전 존재) 내 문제는 여전히 해결되어야 하지만, 거기가 도움을 받을 수 있는 적절한 장소인지 잘 모르겠습니다.