Microsoft MVP성태의 닷넷 이야기
프리징 현상에 대한 고민 [링크 복사], [링크+제목 복사]
조회: 14032
글쓴 사람
임동찬 (dngchn.im at samsung.com)
홈페이지
첨부 파일
 

또 찾아뵙니다. ^^

일전에 말씀드린 저희쪽 제품 프리징 현상에 대한 문의입니다.

알고 계시듯, 정상적인 동작은 메인이 되는 wpf기반의 shell프로세스가 h, d 윈도서비스와 wcf 통신을 하며 동작합니다.

'다운 된다' '죽는다'는 표현만 듣다가 최근 동영상을 통해 정확히 해당 문제 현상을 확인한 결과,

화면의 모든 UI는 리프레쉬 되지 않습니다(현재 시간 표시가 되나, 멈춰있음)

마우스 포인터는 움직입니다만, 화면 영역에 따라 포인터 모양이 변경되지 않고, 버튼 클릭도 되지 않습니다.

로그기록으로 확인한 결과, 문제 현상 발생 시 shell 프로세스만 죽은듯 합니다. (각 프로세스가 주기적으로 남기는 로그가, 해당 시간에 shell에 대한 로그만 없는 것으로 보아).

문제 발생 이전, 메모리가 증가한다던가, exception이 발생하는 특이 사항도 없습니다.

현재는 해당 문제 발생 시간 동안 입력된 데이터를 입수하여 시뮬레이션하여 실행해보는데, 재현 되지 않습니다.

분명 여러차례 반복되는 현상이라서, 사용자가 특정 동작을 실행시켰다거나 한다면, 그러한 보고가 있었을텐데, 그런 정보도 없구요.

정보가 많이 부족하지만, 만약 위와 같은 경우라면, 윈도우로 빠져나와 shell 프로세스에 대한 덤프를 남길 수 있을까요?

아니면, process가 완전히 종료되어 덤프조차 남길 수 없을까요?

어디서부터 접근해야 할지 막막하네요. 조언 부탁드립니다.








[최초 등록일: ]
[최종 수정일: 10/16/2013]


비밀번호

댓글 작성자
 



2013-10-16 04시34분
현상으로 봐서는 얼핏 GDI 핸들이 바닥났을 때의 상황과 유사한 것 같습니다. 그런 상황이라면 윈도우로 빠져나가도 GDI 리소스 부족으로 UI 제어를 할 수가 없을 것입니다. 만약 정말로 GDI 부족이 맞다면 프로세스 자체는 살아 있기 때문에 다른 동작은 가능합니다. 일단, 주기적으로 (5분 또는 10분 간격)으로 프로세스의 리소스를 로깅하는 것으로 확인을 해보는 것이 좋을 듯 싶습니다. GDI 핸들은 native 영역이기 때문에 닷넷 BCL에서 직접 구할 수 있는 방법은 없습니다.

대신 아래의 글을 보면,

GDI handles in a DotNET application
; http://stackoverflow.com/questions/2483011/gdi-handles-in-a-dotnet-application

GetGuiResources Win32 API를 호출해서 알아오는 방법이 나오기 때문에 이를 참조하시면 쉽게 GDI 핸들 수를 로깅할 수 있습니다.

해당 응용 프로그램을 장시간 띄워놓고, GDI 핸들의 추이를 살펴보면 되겠습니다. 아울러, 현장에서의 문제 발생 시 로깅 결과를 통해서 문제를 확실하게 조사하는 것도 좋겠고요.
정성태
2013-10-17 10시04분
[임동찬] 관련 파일의 덤프입니다. 대략 어떤 내용인지 확인 부탁드립니다. 처음 windbg를 쓰다보니, 뭐가 제대로 된건지 잘 모르겠네요.

0:000> !analyze -v
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************

Failed to load data access DLL, 0x80004005
Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
            2) the file mscordacwks.dll that matches your version of mscorwks.dll is
                in the version directory
            3) or, if you are debugging a dump file, verify that the file
                mscordacwks_<arch>_<arch>_<version>.dll is on your symbol path.
            4) you are debugging on the same architecture as the dump file.
                For example, an IA64 dump file must be debugged on an IA64
                machine.

You can also run the debugger command .cordll to control the debugger's
load of mscordacwks.dll. .cordll -ve -u -l will do a verbose reload.
If that succeeds, the SOS command should work on retry.

If you are debugging a minidump, you need to make sure that your executable
path is pointing to mscorwks.dll as well.
Failed to load data access DLL, 0x80004005
Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
            2) the file mscordacwks.dll that matches your version of mscorwks.dll is
                in the version directory
            3) or, if you are debugging a dump file, verify that the file
                mscordacwks_<arch>_<arch>_<version>.dll is on your symbol path.
            4) you are debugging on the same architecture as the dump file.
                For example, an IA64 dump file must be debugged on an IA64
                machine.

You can also run the debugger command .cordll to control the debugger's
load of mscordacwks.dll. .cordll -ve -u -l will do a verbose reload.
If that succeeds, the SOS command should work on retry.

If you are debugging a minidump, you need to make sure that your executable
path is pointing to mscorwks.dll as well.

FAULTING_IP:
+2b02faf01a7df58
00000000 ?? ???

EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 00000000
   ExceptionCode: 80000003 (Break instruction exception)
  ExceptionFlags: 00000000
NumberParameters: 0

FAULTING_THREAD: 0000052c

DEFAULT_BUCKET_ID: WRONG_SYMBOLS

PROCESS_NAME: EcdisShell.exe

ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION} Breakpoint A breakpoint has been reached.

EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid

MOD_LIST: <ANALYSIS/>

NTGLOBALFLAG: 0

APPLICATION_VERIFIER_FLAGS: 0

MANAGED_STACK: !dumpstack -EE
Failed to load data access DLL, 0x80004005
Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
            2) the file mscordacwks.dll that matches your version of mscorwks.dll is
                in the version directory
            3) or, if you are debugging a dump file, verify that the file
                mscordacwks_<arch>_<arch>_<version>.dll is on your symbol path.
            4) you are debugging on the same architecture as the dump file.
                For example, an IA64 dump file must be debugged on an IA64
                machine.

You can also run the debugger command .cordll to control the debugger's
load of mscordacwks.dll. .cordll -ve -u -l will do a verbose reload.
If that succeeds, the SOS command should work on retry.

If you are debugging a minidump, you need to make sure that your executable
path is pointing to mscorwks.dll as well.

PRIMARY_PROBLEM_CLASS: WRONG_SYMBOLS

BUGCHECK_STR: APPLICATION_FAULT_WRONG_SYMBOLS

LAST_CONTROL_TRANSFER: from 16ea93b4 to 16ea399d

STACK_TEXT:
WARNING: Stack unwind information not available. Following frames may be wrong.
0012b328 16ea93b4 00000001 fffffde7 0012bba4 XGeo+0x399d
0012bbf8 16ea9e3e 0012be38 0012bdc4 16e93d5c XGeo+0x93b4
0012bc1c 16ea9d30 16e93d5c 0012bc4c 0012be10 XGeo+0x9e3e
0012bc98 16ea9f07 16e93d5c 0012be38 0012be10 XGeo+0x9d30
0012bd98 16eaa5ee 16e93d5c 0012be38 0012bdc4 XGeo+0x9f07
0012be40 16ea5665 88010e98 19793542 0012c1e4 XGeo+0xa5ee
0012be58 16eaae5d 0012c1e4 00000064 197aa830 XGeo+0x5665
0012c03c 7c94005d 0000000a 19808c48 00000024 XGeo+0xae5d
0012c100 16f0021c 0012c1a4 7c93e920 7c9401e0 ntdll!RtlFreeHeap+0x647
0012c114 7c9401db e0aafdc8 0012c1b0 16eabb55 XGeo!DllUnregisterServer+0x3d6d5
0012c384 7c94019b 7c940101 7c9400c4 00000010 ntdll!RtlAllocateHeap+0xeac
0012c668 16ea5e0f 16f94948 78140000 405f17d3 ntdll!RtlAllocateHeap+0x1c2
0012c784 79f18cb1 0ba5b538 0012c7a0 e0aafa50 XGeo+0x5e0f
0012c9bc 0435141a 001601b8 0012ca10 cfe480f8 mscorwks!CLRToCOMWorker+0x14f
0012c9f8 1f68a89f 0012d688 0ba5b180 0012de7c 0x435141a
0012d710 7c94005d 0f7adf70 0f850000 00000000 0x1f68a89f
0012d8c0 1f68034f f7e60000 405f220d 8f840000 ntdll!RtlFreeHeap+0x647
0012d988 578548e9 0c6fe61c 01ccdcc0 01ccdcc0 0x1f68034f
0012da80 79eb272d 79eb2745 b3320cc8 0c6fdfdc WindowsBase_ni+0xa48e9
0012de4c 79e71b4c 0c61c99c 00000000 00000000 mscorwks!AppDomainNative::GetId+0xef
0012de60 79e8968e 0012df34 00000001 0012df00 mscorwks!CallDescrWorker+0x33
0012dee0 79e96d11 0012df34 00000001 0012df00 mscorwks!CallDescrWorkerWithHandler+0xa3
0012e028 79e96d44 7925473c 0012e184 0012e080 mscorwks!MethodDesc::CallDescr+0x19c
0012e044 79e96d62 7925473c 0012e184 0012e080 mscorwks!MethodDesc::CallTargetWorker+0x1f
0012e05c 79fceef1 0012e080 0012e23c 79fbb3cb mscorwks!MethodDescCallSite::CallWithValueTypes+0x1a
0012e248 79fcf052 790fe7b0 0ba5cbe8 0c6fe124 mscorwks!InvokeImpl+0x550
0012e308 792d5428 074ed450 000001c6 0012e324 mscorwks!RuntimeMethodHandle::InvokeMethodFast+0xbd
0012e358 792d51d6 074ed450 000001c6 0c61ec40 mscorlib_ni+0x215428
0012e390 792d6665 00000001 00000000 0c61e8e4 mscorlib_ni+0x2151d6
0012e3b8 7975df04 0012e460 1811cdf9 0c247f9c mscorlib_ni+0x216665
0012e3e4 7c966d80 7c9401db 05e6a648 0c6fe084 mscorlib_ni+0x69df04
0012e460 1811cbd2 00000001 00000000 013de760 ntdll!RtlpLowFragHeapAlloc+0xc84
0012e490 79e71b4c 014fdcec 00000000 0012e520 0x1811cbd2
0012e4a0 79e8968e 0012e570 00000000 0012e540 mscorwks!CallDescrWorker+0x33
0012e520 79e96d11 0012e570 00000000 0012e540 mscorwks!CallDescrWorkerWithHandler+0xa3
0012e658 79e96d44 075759d8 0012e7ac 0012e6b0 mscorwks!MethodDesc::CallDescr+0x19c
0012e674 79e96d62 075759d8 0012e7ac 0012e6b0 mscorwks!MethodDesc::CallTargetWorker+0x1f
0012e68c 79fceef1 0012e6b0 0012e864 79fbb3cb mscorwks!MethodDescCallSite::CallWithValueTypes+0x1a
0012e870 79fcf052 17d39600 0c6fbdf0 0c6f75ec mscorwks!InvokeImpl+0x550
0012e930 792d5428 17d39644 000001c6 0012e94c mscorwks!RuntimeMethodHandle::InvokeMethodFast+0xbd
0012e980 792d51d6 17d39644 000001c6 0c61ea80 mscorlib_ni+0x215428
0012e9b8 792d6665 00000001 00000000 0c61e4a0 mscorlib_ni+0x2151d6
0012e9e0 5784727b 0c6f8b3c 00000001 00000000 mscorlib_ni+0x216665
0012e9fc 578470ea 00000000 0c61e4a0 00000000 WindowsBase_ni+0x9727b
0012ea3c 578452b4 00000000 00000000 0c6fbe10 WindowsBase_ni+0x970ea
0012ea60 5784a12d 00000000 00000000 0c6fbe10 WindowsBase_ni+0x952b4
0012ea98 5784a0b8 0c6f74e8 792f5781 00000000 WindowsBase_ni+0x9a12d
0012eab0 79e71b4c 00000000 0012eb74 0012eb40 WindowsBase_ni+0x9a0b8
0012eac0 79e8968e 0012eb90 00000000 0012eb60 mscorwks!CallDescrWorker+0x33
0012eb40 79e96d11 0012eb90 00000000 0012eb60 mscorwks!CallDescrWorkerWithHandler+0xa3
0012ec7c 79e96d44 79241ff0 0012edb0 0012ecd0 mscorwks!MethodDesc::CallDescr+0x19c
0012ec98 79e96d62 79241ff0 0012edb0 0012ecd0 mscorwks!MethodDesc::CallTargetWorker+0x1f
0012ecb0 79ef2c29 0012ecd0 b3323998 001601b8 mscorwks!MethodDescCallSite::CallWithValueTypes+0x1a
0012ee7c 79ef2d7e 0012ef0c b33238c8 0c6f7530 mscorwks!ExecuteCodeWithGuaranteedCleanupHelper+0x9f
0012ef2c 792f5677 0012eed0 0c6fbe58 013381ac mscorwks!ReflectionInvocation::ExecuteCodeWithGuaranteedCleanup+0x10f
0012ef48 792e02a5 0c61e4b4 00000000 0c61e4b4 mscorlib_ni+0x235677
0012ef60 57849ff3 0c61e4b4 00000000 00000000 mscorlib_ni+0x2202a5
0012ef9c 57844957 7a3442a0 ffffffff 79e8ca77 WindowsBase_ni+0x99ff3
0012f078 57844c43 00000000 00000000 01337a10 WindowsBase_ni+0x94957
0012f0b4 578473de 01338048 00000000 00000000 WindowsBase_ni+0x94c43
0012f100 5784730a 01338048 00000000 00000000 WindowsBase_ni+0x973de
0012f120 578471fa 01338030 00000001 00000001 WindowsBase_ni+0x9730a
0012f13c 578470ea 00000001 01338030 00000000 WindowsBase_ni+0x971fa
0012f17c 578452b4 00000000 00000001 01338030 WindowsBase_ni+0x970ea
0012f1a0 57844411 00000000 00000001 01338030 WindowsBase_ni+0x952b4
0012f1dc 57844360 00000001 01338030 01338010 WindowsBase_ni+0x94411
0012f20c 57846a4c 01338030 01338010 003b2182 WindowsBase_ni+0x94360
0012f25c 77cf8734 002d029a 0000c09c 00000000 WindowsBase_ni+0x96a4c
0012f288 77cf8816 003b21b2 002d029a 0000c09c user32!InternalCallWinProc+0x28
0012f2f0 77cf89cd 00000000 003b21b2 002d029a user32!UserCallWinProcCheckWow+0x150
0012f350 77cf8a10 0012f3b0 00000000 0012f37c user32!DispatchMessageWorker+0x306
0012f360 043516a2 0012f3b0 cfe480f8 00000000 user32!DispatchMessageW+0xf
0012f37c 57844a57 01337a10 0012f3b0 009e2010 0x43516a2
0012f3ec 57844129 01592990 0012f404 578440cc WindowsBase_ni+0x94a57
0012f3f8 578440cc 013321ec 0012f410 55bed1ae WindowsBase_ni+0x94129
0012f404 55bed1ae 013321ec 0012f434 55bec4af WindowsBase_ni+0x940cc
0012f410 55bec4af 0151abec 79e7bdf6 792e49e8 PresentationFramework_ni+0x1cd1ae
0012f434 55bd3796 013321ec 00000000 0012f450 PresentationFramework_ni+0x1cc4af
0012f444 55bd3759 001601b8 0012f460 03b600bc PresentationFramework_ni+0x1b3796
0012f460 79e71b4c 0045791e 00000001 0012f4f0 PresentationFramework_ni+0x1b3759
0012f470 79e8968e 0012f540 00000000 0012f510 mscorwks!CallDescrWorker+0x33
0012f4f0 79e96d11 0012f540 00000000 0012f510 mscorwks!CallDescrWorkerWithHandler+0xa3
0012f634 79e96d44 009ec598 0012f700 0012f6cc mscorwks!MethodDesc::CallDescr+0x19c
0012f650 79e96d62 009ec598 0012f700 0012f6cc mscorwks!MethodDesc::CallTargetWorker+0x1f
0012f668 79f20881 0012f6cc b3322028 00000000 mscorwks!MethodDescCallSite::CallWithValueTypes+0x1a
0012f7cc 79f207a1 009e888c 00000001 0012f808 mscorwks!ClassLoader::RunMain+0x223
0012fa34 79f20cf1 00000000 b33228e0 00000001 mscorwks!Assembly::ExecuteMainMethod+0xa6
0012ff04 79f20edb 00400000 00000000 b33228b0 mscorwks!SystemDomain::ExecuteMainMethod+0x456
0012ff54 79f20e0b 00400000 b3322878 00370035 mscorwks!ExecuteEXE+0x59
0012ff9c 7900b77b 00360034 79e70000 0012ffb8 mscorwks!_CorExeMain+0x15c
0012ffac 7900b73d 00000000 0012fff0 79004de3 mscoree!_CorExeMain+0x2e
0012ffb8 79004de3 00360034 7c7e7077 00370035 mscoree!ShellShim__CorExeMain+0x29
0012ffc0 7c7e7077 00370035 00360034 7ffd3000 mscoree!_CorExeMain_Exported+0x8
0012fff0 00000000 79004ddb 00000000 78746341 kernel32!BaseProcessStart+0x23


STACK_COMMAND: ~0s; .ecxr ; kb

FOLLOWUP_IP:
XGeo+399d
16ea399d 8955fc mov dword ptr [ebp-4],edx

SYMBOL_STACK_INDEX: 0

SYMBOL_NAME: XGeo+399d

FOLLOWUP_NAME: MachineOwner

MODULE_NAME: XGeo

IMAGE_NAME: XGeo.dll

DEBUG_FLR_IMAGE_TIMESTAMP: 521259cc

FAILURE_BUCKET_ID: WRONG_SYMBOLS_80000003_XGeo.dll!Unknown

BUCKET_ID: APPLICATION_FAULT_WRONG_SYMBOLS_XGeo+399d

WATSON_STAGEONE_URL: http://watson.microsoft.com/StageOne/EcdisShell_exe/1_0_0_53/525d010c/unknown/0_0_0_0/bbbbbbb4/80000003/00000000.htm?Retriage=1

Followup: MachineOwner
---------
[guest]
2013-10-17 02시35분
우선 mscordacwks DLL이 제대로 된 버전이 없어서 analyze가 제대로 분석을 못했습니다. 아래의 글을 보시고 맞춰주시고, 다시 한번 analyze 해보세요.

windbg의 mscordacwks DLL 로드 문제 - 두번째 이야기
; http://www.sysnet.pe.kr/2/0/1375
정성태
2013-10-21 07시30분
[임동찬] 혹시 이 문제 관련 제 메일 못보셨는지요? 덧글쓰기가 안되어 보낸 메일이 있습니다만...
[guest]
2013-10-21 02시33분
답장 메일 드렸습니다. ^^
정성태

... 31  32  33  34  35  36  37  38  39  40  [41]  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
4825플메4/10/201710348덱스트 업로드 하는데 구성요소 서비스에 엑셀이 안뜨네요..ㅜㅜ [1]파일 다운로드1
4824김상경4/9/20179738win7에서 vb6.0을 이용해서 프로그램을 만들었습니다.(제가 만든건 아니고 옆 동료가 만들었습니다.) [1]파일 다운로드1
4823조상현3/28/201710746windows event log 에 대한 정보는 어디서 얻을 수 있을까요? [1]
4822부우3/24/201712411글수정이 안되어 다시올려드립니다ㅠ [12]파일 다운로드2
4821부우3/22/201726014파일이나 어셈블리 중 하나를 로드에러 좀 봐주세요 [9]파일 다운로드1
4820듀이3/20/201710828오차 없이 동시에 명령을 보내게 가능한가요? [2]파일 다운로드1
4819popo3/20/201712160C# sslstream 사용시 Cipher List 설정 [3]
4818부우3/16/201721010DllImport 사용시 진입점을 찾을수 없습니다 [2]
4817yun3/15/201710373서피스프로4의 HYPER-V로 윈도우7을 깔았는데... [1]
4816부우3/15/201713130C++ DLL함수 사용 질문드립니다 [10]
4815김지용3/14/20179173.net core linux 오류 [2]
4814김솔지3/13/201710263인쇄 시 , 출력화면을 이미지 파일로 저장하고 싶습니다. [1]파일 다운로드1
4813spow...3/8/201711813멀티 스레드 환경에서 처리하여야 할 목록을 효율적으로 사용하는 기법 질문 드립니다 [2]
4812popo2/23/201711872.NET Window ClassName 변경 질문 드립니다. [1]
4809힘찬도약2/15/201714929C# 가상 시리얼 [4]
4808이길용2/9/201713692WCF 외부 접속 관련해서 질문드립니다ㅠ [1]
4807헬조선식...2/8/201720281WPF의 속도에 대해서 궁금합니다. [3]
4803헬조선식...2/7/201713702WPF로 메신져 메세지 박스 구현 문의 [2]
4802spow...2/6/201710739특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은? [7]
4804spow...2/7/201710615    답변글 [답변]: 특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은?
4805spow...2/7/201710307    답변글 [답변]: 특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은? (글삭제가 안돼 재첨부합니다)파일 다운로드1
4801spow...2/3/201710165C#의 참조 동작관련하여 아이디어 문의 드립니다 [4]
4800오세운2/1/201714237C# 에서 C++ DLL임포트 질문입니다. [2]
4798guest1/29/201711593picturebox의 image.dispose [1]
4797김철환1/13/201711520책에 관한 질문입니다 [3]
4796Bere...1/13/201711661++ 후위연산자와 = 을 함께 사용할 때 생성되는 IL 코드 관련... [2]
... 31  32  33  34  35  36  37  38  39  40  [41]  42  43  44  45  ...