"이 문서는 http://blogs.msdn.com/ntdebugging blog 의 번역이며 원래의 자료가 통보 없이 변경될 수 있습니다. 이 자료는 법률적 보증이 없으며 의견을 주시기 위해 원래의 blog 를 방문하실 수 있습니다. (http://blogs.msdn.com/ntdebugging/archive/2007/01/09/scoping-and-troubleshooting-hangs-of-various-causes.aspx)"

 

다양한 Hang case 의 범위 설정 및 분석

다시 만나게 되었습니다. 앞으로는 Hang troubleshooting 에 대해서 이야기 할 것이며 이번 글에서는 Hang 에 대한 이해 그리고 어떻게 분석을 위한 범위를 설정하는지 말씀 드릴 것 입니다.

Troubleshooting 에서 문제에 보다 빨리 접근할 수 있도록 범위 설정을 사용 합니다.운영 체제의 문제인지 특정 Computer 의 문제인지 아니면 특정 컴포넌트의 문제인지 구분해야 하며 범위 설정을 사용하여 광범위한 문제로부터 실제 문제를 구분해 낼 수 있습니다.

Hang 은 일반적이나 때로는 하나의 증상으로 원인을 밝히기 힘들어 오랜 시간 분석을 해야 하기도 합니다. “자 그렇다면 Hang 이란 무엇일까요?” Hang 은 Application 이나 OS 가 동작하지 않고 User interface 나 Service 가 응답하지 않는 상태를 이야기 합니다. 이를 이해하기 위해서는 내부 아키텍처를 알아야 합니다.

앞으로 Hang 증상에 대해 설명하고 보다 깊이 있게 OS 와의 연관성을 설명할 것 입니다. 다시 말해서 Application 에서 OS 로 내려가며 설명 드릴 것이며 범위 설정을 먼저 말씀 드리도록 하겠습니다.

범위 설정은 가장 중요한 단계 입니다.

 

Hang 범위 설정
운영체제 (OSI stack)의 단계별로 테스트를 진행하여 Hang 증상을 확인할 수 있습니다. 다시 말해 시스템의 어떤 부분이 동작 중이고 어떤 부분이 동작하지 않는지 확인하는 것 입니다. 이 결정의 가장 중요한 점은 “어떤 것이 동작하고 어떤 것이 동작하지 않느냐” 입니다. 아래의 테이블은 테스트 단계와 관련된 운영체제의 단계를 설명한 것 입니다.

테스트 대상 Test tool
기본 H/W + Network driver + 하위 Network stack  Ping 이 동작하는가? 키보드의 Num lock 키가 동작하는가?
TCP/IP 를 사용하는 SMB + Kernel 의 Service Service Net view 가 동작하는가?
Tcp/ip 를 사용하는 RPC RPC 가 동작하는가? (Event Viewer, Remote Management, Event Log, 또는 rpcping.exe )
Rpc+Application  COM_DCOM 이 동작하는가? (Dcomtest.exe)

 

예를 들어 시스템이 Hang 으로 의심되나 ping 은 되고 net view 가 동작하지 않을 경우 Server service 또는 하위 컴포넌트에서 Server 에 대한 요청이 실패하고 있는 것으로 생각할 수 있습니다. 이 방법은 동일한 Server 에서 Service service 가 동작하지 않는 상태에 있고 myapplication.exe 가 Server Service 에 직접적인 연관성이 있더라도  Hang 된 이유를 밝히는 데는 사용하기 힘듭니다.

팁 :분류 방법은 모든 문제에 사용할 수 있습니다. Application, service, OS, driver, 기타.. 들의 상호동작을 살펴 보고 종속관계를 확인합니다. “ A 는 A 때문에 실패하지 않고 B 나 C 로 인해서 실패하고 D 에 실제 문제점이 있는 것이구나” 종속성 확인은 application 을 test 하는 것 보다 시간을 줄여 줄 수 있습니다. 다른 예를 들면, RPC 에 종속성이 있는 application이 멈출 경우 다른 RPC application 을 사용해서 RPC 를 test 해 보는 것이 debugging 을 하는 것 보다 시간을 줄여줄 수 있고 application 에 한 지식도 필요로 하지 않습니다.

 

여기 문제점을 인식하고 문제를 쉽게 분류할 수 있는 공통 질문이 있습니다.

  • Hang 을 해결하는데 가장 작은 동작은 무엇인가?
  • 얼마나 자주 발생하는가?
  • 주기적으로 발생하는가? 그렇다면 얼마나 자주 발생하는가?
  • 마지막 발생한 시점은 언제인가?
  • 문제가 발생할 때 어떤 시스템에 부하가 있었는가?
  • 시스템의 어떤 부하인가?
  • Hang 을 재현할 수 있는가?
  • Hang 이 발생하기 전에 어떤 일이 있었는가?
  • 어떤 것이 변경되었는가?
  • 언제부터 시작 되었는가?
  • Application 이나 System log 에 관련 있거나 비슷한 시간에 로그가 있는가?
  • Consol 또는 Remote (RDP 또는 ICA) session 에서 보이는가?
  • Network 을 제거해도 계속 Hang 상태 인가?
  • 작업관리자에서 각 Process 의 CPU 사용률이 기록되는가?
  • 안전모드 또는 Network 사용 가능한 안전모드에서 재현 되는가?

 

위의 간단한 질문들의 답이 많은 도움을 줄 것 입니다.
예를 들면 만약 시스템에 Hung 이 나타나고 Remote Desktop(RDP) 에서 재현 되고 console 에서는 응답이 된다면? Console 에서 응답 된다는 것은 Terminal Server Service 단계나 관련된 종속성에 문제가 있을 것 입니다. Terminal Services 에 초점을 맞추어 분석을 하면 될 것 입니다.


공통적인 Hang 증상 구분
Hang 을 일으키는 문제점들로 나중에 다른 글에서 자세히 다룰 것 입니다.

  1. 특정 Application의 메뉴/버튼/함수 Hang
    • 다른 Window 를 위에 덮었다가 치우면 다시 화면이 그려지는 것으로 Application 은 문제가 없는 것으로 보입니다. 그러나 menu item 또는 키보드를 누르는 것과 관련된 동작이 수행 되지 않습니다.
  2. Application Window Hang “종료되지 않았으나 응답 없음”
    • UI 단계에서 응답 없는 상태입니다. Refresh 되지 않고 다른 Windows 를 덮었다가 치워도 다시 repaint 되지 않습니다.
  3. Start Menu, Desktop 또는 “Shell” 이 Hang
    • Explorer.exe 가 응답을 해야 하는데 동작하지 않는 것 입니다.
  4. 모든 Window 들이 Hang 이나 작업 관리자는 동작
    • 마우스는 여전히 움직이고 Ctrl+Shift+Esc 를 눌렀을 때 작업관리자가 실행 되거나 Ctrl+Alt+Del 이 동작하는 경우 실제 Hang 은 아니고 응답이 매우 느려져 Hang 처럼 보이는 것 입니다.
  5. Window 들이 하나도 보이지 않을 때
    • 마우스와 키보드는 움직일 수 있으나 아무것도 할 수 없고 빈 desktop 만 보이고 Window 가 보이지 않는다면 Hang 입니다. File 공유, Mail server 등은 동작 하더라도 Hang 으로 보입니다.
  6. Window 들이 하나도 보이지 않고 마우스/키보드 가 동작하지 않으나 시스템은 동작 중 일 때
    • 명백히 리소스가 적을 때의 증상 입니다. Debug 하는 것이 나을 것 입니다. Server 가 아마도 service 를 통해 원격에서 응답하지 않을 것 입니다.

 

이후에 나올 글에서는 다음 징후를 볼 것 입니다.
공통 예제
분류 과정 (어떤 것이 동작하는지, 각 시나리오에서 어떤 것이 동작하지 않는지?)
문제 해결 과정
Debug 과정

계속 지켜봐 주시기 바랍니다.

-Tate