winrm 을 이용해서 리눅스 머신에서 윈도우 서버 관리!

WinRM 을 통해서 리눅스머신에서 윈도우서버로 원격 명령을 날리는 방법에 대해 간략하게 기술한다.

윈도우 서버에서 먼저 winrm 에 대한 설정을 진행해준다.

winrm quickconfig 커멘드를 사용하면 (run as administrator)
해당 서비스를 사용할 수 있도록 설정이 가능하다. (사용여부 y로 물어봄)

winrm 서비스가 사용가능하게 되면 다음과 같이 winrm 의 config를 확인할 수 있다.

winrm g winrm/config

이중 config 하위에 service 항목중 Auth와 AllowUnencryypted 는 기본설정이 false 로 되어있는데,
이부분을 true (사용) 으로 변경해주는 설정을 한다. (Basic 인증방식 사용)

winrm s winrm/config/service/auth @{Basic=”true”}

winrm s winrm/config/service @{AllowUnencrypted=”true”}

이후에 리눅스머신에서 winrm을 통해 plaintext를 통한 계정정보 입력을 통하여, 서버에 커멘드를 실행할 수 있다.
참고로 powershell에서도 아래와 같은 커멘드로 활성화 할 수 있다.

Set-item WSMan:\localhost\service\auth\basic “true” -force

Set-Item WSMan:\localhost\Service\AllowUnencrypted “true” -force

윈도우 서버에서 위와 같은 설정이 완료 되면 quickconfig를 통해서 허용 되었겠지만,
http 프로토콜로 5985 포트를 이용해서 접근하게 된다. 스위치에 Access List 를 관리한다면, 허용해줄것~

linux 관리머신에서 winrm 을 이용하기 위해 WinRM for Ruby 라이브러리를 설치한다.
(1.9 버전 이상의 ruby를 설치하여야 하고, gem install winrm (git 저장소 https://github.com/zenchild/WinRM) 으로 설치하고, WinRM 라이브러리를 이용해 서버 제어 스크립트를 생성한다.

예시 ) test.rb

 require ‘winrm’

endpoint = ‘http://10.0.0.1:5985/wsman’

winrm = WinRM::WinRMWebService.new(endpoint, :plaintext, :user =>

‘계정’, :pass => ‘암호’, :basic_auth_only => true )

winrm.cmd(‘ipconfig /all & dir c:\\‘) do |stdout, stderr|

    STDOUT.print stdout

    STDERR.print stderr

end

위와 같이 간단한 루비스크립트를 생성하고,
/usr/bin/ruby test.rb 를 실행하게 되면, 10.0.0.1 IP를 갖는 원격지 윈도우 서버에서
ipconfig /all 커멘드와 dir c:\ 라는 커멘드를 실행하여, 결과값 (Standard Output) 을 알려준다.

해당 방법은 원격지에서 WinRM을 통한 command를 실행시키는 방식으로
관리서버에서는 동시 다수 서버에 명령어를 전달하고, 다수의 서버에서는 개별적으로 해당 명령을 실행하기 때문에 서버 관리에 매우 유용하다.

NETSTAT 를 이용한 통계 확인

netstat -s -p [프로토콜]

netstat -s 는 netstat -netstat 로 쳐도 동일!!

C:\Users\hong.sungho>netstat -sn -p tcp

 

IPv4에 대한 TCP 통계

 

  활성 열기                           = 1046883

  수동 열기                           = 13021

  실패한 연결 시도                    = 308348

  다시 설정된 연결                      = 122594

  현재 연결                           = 26

  받은 세그먼트                       = 17804809

  보낸 세그먼트                       = 22197839

  재전송된 세그먼트                   = 959005

 

활성 연결

 

  프로토콜  로컬 주소           외부 주소              상태

  TCP    10.0.0.235:2869     10.0.0.166:57978    TIME_WAIT

  TCP    10.0.0.235:50204    112.0.0.88:80       ESTABLISHED

  TCP    10.0.0.235:50292    180.0.0.177:8001     SYN_SENT

  TCP    127.0.0.1:65299        127.0.0.1:65298        ESTABLISHED

 

TCP 패러미터 튜닝을 통한 접속 수 증가 방법

====== 윈도우에서 TCP 파라미터 튜닝 ======

결국 윈도우에서 TCP 연결의 개수를 최대한 늘이기 위한 방법은 TcpTimedWaitDelay, MaxUserPort, MaxFreeTcbs, MaxHashTableSize 파라미터를 늘여주는 것이다.

Windows에서 TcpTimedWaitDelay를 설정

TCP 파라미터는 물론 플랫폼 별로 많은 파라미터가 존재하지만, Windows에서의 TcpTimedWaitDelay 와 Solaris의 tcp_time_wait_interval 은 동일한

파라미터로서, 커넥션이 종료 되었을 때 TIME_WAIT 상태로 머물게 되는 시간을 설정한다.

이 값의 디폴트는 4분으로 짧은 시간에 많은 클라이언트가 접속을 하면 네트웍(Network) 퍼포먼스에 영향을 줄 수 있기 때문에 60초로 제한을 두도록

권고한다.

레지스트리 위치 : HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters

유효한 범위 : 0\30~300초

값 이름 : TcpTimedWaitDelay

값 종류: DWORD

기본값: 240초

추천 값: 60

TCPFinWait2Delay

이 레지스트리 값은 해당 종료 (s, SD_SEND) 함수를 호출한 후 닫으려면 강제로 TCP 연결 전에 대기하는 초 수를 제어합니다.

레지스트리 위치: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

값 이름: TCPFinWait2Delay

값 종류: REG_DWORD

기본 값: 240 초

추천 값: 60초(개인적으로 30초도 좋을 듯)

MaxUserPort

서버에 연결되는 Port의 숫자가 5000개 이상 (Exchange 60000) 될 경우 서버에서 네트워크 장애가 발생될 수 있음.

일반적으로 WAS와 연결되는 Windows 서버나 Exchange 서버에서 주로 발생됨.

레지스트리 위치: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

유효한 범위: 5000~65534

값 이름 : MaxUserPort

값 종류: DWORD

기본값: 5000

추천 값: 65534

MaxFreeTcbs

시스템이 TCP 연결 유지를 위해 생성하는 TCP Control Blocks(TCBs)의 숫자를 결정한다. 하나의 연결은 하나의 블록을 요구하기 때문에, 이 값은 TCP가 동시에 몇 개의 연결을 처리할 수 있느냐를 결정하게 된다. 모든 블록이 사용 중인 상황에서 새로운 연결이 들어오게 되면, TCP는 TIME_WAIT 상태인 연결 중에 하나를 강제로 끊어버리고, 블록을 해제한 후, 그 블록을 새로운 연결에 사용하게 된다.

보통 TCP는 TcpTimedWaitDelay에 지정되어 있는 시간이 지나지 않은 경우, 연결을 해제하지도 않고, 그 연결에 사용된 자원을 재사용하지도 않는다. 이 시간은 보통 TIME_WAIT 또는 2MSL (2 x maximum segment lifetime) 상태라고 불린다. 하지만 시스템이 매우 많은 연결을 받아들여 자원이 바닥날 상황에 이르면, TcpTimedWaitDelay에 지정된 시간이 아직 남아있는 경우에도 연결에 할당되어 있는 자원을 해제하게 된다.

레지스트리 위치: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

유효한 범위: 1–0xFFFFFFFF

값 이름 : MaxFreeTcbs

값 종류: DWORD

기본값: 0x1388 (십진값으로 5000)

추천 값: 2000

MaxHashTableSize

TCP Control block이 저장되는 해쉬 테이블의 크기를 결정한다.

 

TCP는 컨트롤 블록들을 빠르게 검색하기 위해 해쉬 테이블에다 저장한다. 만일 시스템이 동시에 생성할 수 있는 TCB의 숫자를 변경한다면(MaxFreeTcbs 값을 변경한다면), 이 항목의 값 또한 그에 비례해서 변경해줘야한다.

 

이 항목의 값은 반드시 2의 승수여야한다. 만일 2의 승수를 입력하지 않는다면, 시스템은 자동으로 입력한 수보다 큰 2의 승수 중에 가장 작은 것을 찾아 사용한다. 즉 128 * (시스템 cpu 개수)의 제곱

예를 들어 cpu 4장이라면, 128 * 4^2 = 2048

최대 값은 0x10000 (65,536)입니다. 연결 부하가 클 것으로 예상되는 대규모 서버에서는 최대 값을 설정하는 것이 권장됩니다. 이 테이블은 페이지 안 되는 풀을 사용하므로 서버의 가용한 페이지 안 되는 풀이 많지 않거나 연결 부하가 크지 않은 경우에는 이 값을 너무 크게 설정하면 안 된다는 사실을 명심하십시오.

레지스트리 위치: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

유효한 범위: 64 ~ 65536

값 이름 : MaxHashTableSize

값 종류: DWORD

기본값: 512

추천 값: 2048

KeepAliveTime

TCP-HandShake를 통해 연결이 되면 해당 세션은 연결이 유지되어집니다.

하지만, 일정 시간동안 Connection에 대해 실제 통신이 없는 경우 Session관리를 위해

특정 시간이 지나면 해당 Session을 OS에서 끊게 됩니다.

NT에서 해당 역활을 해주는 것은 KeepAliveInterval에 설정되어진 값에 의해 결정되게 됩니다.

KeepAliveTime을 통해 해당 시간만큼 ACK(응답)이 없는 경우 Session이 종료되어집니다.

레지스트리 위치: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

유효한 범위: 0x1–0xFFFFFFFF ms

값 이름 : KeepAliveTime

값 종류: DWORD

기본값: 7,200,000 ms –> 2hr

추천 값: 1800000 ms –>30분

 

참고:

윈도우에서 TCP/IP 파라미터

http://technet.microsoft.com/en-us/library/cc739819(WS.10).aspx

TCP 동시 연결 수를 최대한 늘이기위한 파라미터

http://lishiqiang2003.wordpress.com/2010/12/24/configure-the-max-limit-for-concurrent-tcp-connections/

 

원본 위치 <http://blog.naver.com/PostView.nhn?blogId=sugyoo&logNo=20119781609&redirect=Dlog&widgetTypeCall=true>

 

특정 포트 세션 수 기록하기.

:: 날짜, 시간구하기

for /f “tokens=2-3 delims=/ ” %%i in (‘date/t’) do @set DT=%%i%%j

for /f “tokens=1-3 delims=: ” %%i in (‘time/t’) do @set tm=[%%i:%%j %%k]

 

:: 1004포트로 establish 세션과, 5050 모든세션 (close wait포함) 구해서텍스트로임시저장

cmd /c netstat -ant | find “1004” | find /c “ESTA”  > c:\esta.txt

cmd /c netstat -ant | find /c “1004” > C:\all.txt

 

:: 세션수임시저장한텍스트를로그형식으로저장

for /f %%s in (c:\esta.txt) do SET EST=%%s

for /f %%g in (c:\all.txt) do SET ALL=%%g

 

echo %tm%       Est_count : %EST%  >> C:\Users\Administrator\Desktop\Est_count\est_session_%DT%.txt

echo %tm%       all_count : %ALL%  >> C:\Users\Administrator\Desktop\Est_count\all_session_%DT%.txt

 

echo.

powershell 의 get-wmiobject 를 이용해 process 정보를 검색해보자.

powershell 의 get-wmiobject 를 이용해 process 정보를 검색해보자.


 Get-WmiObject win32_process -computername 호스트명 | Select-Object name,handle,executablepath

 

이걸응용해서프로세스동작시간 (creation DATE)확인이가능하다.

Get-WmiObject win32_process -computername 호스트명 | Select-Object name, creationdate

 

위와같이입력하면 원격지 호스트의 실행경로 pid 등을확인가능

 

아래에서 excuteablepath 이나 기타 프로세스를 종료 시킬 필요가 있는 경우 아래와 같이 진행한다.
taskkill /s 호스트명  /f /PID 1111 /PID 2222 /PID 3333 

윈도우에 nfs 를 이용해서 리눅스에 마운트

윈도우 서버의 role 에서 nfs 를 추가하고, 

공유하려는 폴더에 properties를 확인해보면 nfs 설정이 가능하다.

윈도우 서버 주소가 sungho.com 이고 폴더명이 share 라는 가정에서 리눅스 머신에서 공유 폴더를 mount 합시다.

mkdir test
mount -t nfs sungho.com:/share ./test

이렇게 하여 test 에 해당 공유 폴더를 마운트 한다.

재시작시에도 유지하고 싶다면 /etc/fstab에 

sungho.com:/share /test nfs 0 0 을 추가한다.

ADPlus 를 이용한 Crash, Hang Dump 생성 및 설명

adplus를 이용할때 실행되는 프로세스가 32bit 프로세스인 경우 x86 버전을 설치하여 사용하고,
64bit 프로세스의 경우는 x64를 이용하여 덤프를 생성한다.

1. 크래시 덤프
– 프로세스가 예기치 않게 종료되는 경우 메모리에 내용을 덤프로 기록.

c:\Program Files\Debugging Tools for Windows (x64)>

adplus -crash -pn ProcessD64.exe -quiet -o c:\Dump\

2. Hang DUMP
adplus -hang -p PID -o c:\Dump\


 

 

 

http://support.microsoft.com/kb/286350/ko 설명

 

 

ADPlus사용하여중지충돌문제를해결하는방법

이 문서가 적용되는 제품 보기.

설명: http://support.microsoft.com/kb/286350/ko

시스템 팁본 문서의 정보는 현재 사용하는 Windows 버전과 다른 버전에 적용됩니다. 따라서문서의내용이관련되지않을수도있습니다.Windows 7 솔루션센터방문하기

설명: http://support.microsoft.com/kb/286350/ko

이 문서는 이전에 다음 ID출판되었음: KR286350

이 페이지에서

모두 확대 | 모두축소

요약

ADPlus프로세스나응용프로그램이응답을중지하거나예기치않게종료되었을문제를 해결할 수 있도록 Microsoft PSS(기술

ADPlus는 프로세스나 응용 프로그램이 응답을 중지하거나 예기치 않게 종료되었을 때 문제를 해결할 수 있도록 Microsoft PSS(기술지원서비스)에서제공하는도구입니다. ADPlus(ADPlus.vbs) Microsoft IIS(인터넷 정보 서비스) Exception Monitor(6.1/7.1)사용자모드프로세스덤프를대체할 수 있는 도구로 자주 사용됩니다. 이러한도구는 Microsoft Windows DNA 환경에서프로세스가응답을중지하거나예기치않게종료되는이유를찾기 위해 PSS에서자주사용하는개별도구입니다.

설명: http://support.microsoft.com/kb/286350/ko

위로 가기

추가 정보

시스템 요구 사항ADPlus실행하기위한최소요구사항은다음과같습니다. Microsoft Windows NT 4.0 서비스 4 이상

시스템 요구 사항

ADPlus실행하기위한최소요구사항은다음과같습니다.

  • Microsoft Windows NT 4.0 서비스 4 이상
  • Windows Scripting Host 버전 5.6 이상
  • ADPlus가 출력 파일을 저장하기 위해 사용할 수 있는 최소 10MB하드디스크공간또는네트워크 공유
  • Microsoft Debugging Tools for Windows 설치

설명: http://support.microsoft.com/kb/286350/ko

위로 가기

ADPlus 버전 6.0새로운기능

ADPlus V6.0완전히새로작성되었으며새로운스위치와 기능을 제공합니다. 외부구성파일을통해도구를구성할수도있습니다. Microsoft Windows 디버거패키지에포함된디버거도움말파일(Debugger.chm)에서새로운기능과스위치에대한최신정보를있습니다. 패키지를구하려면다음 Microsoft 사이트를방문하십시오.

http://www.microsoft.com/whdc/devtools/debugging/default.mspx (http://www.microsoft.com/whdc/devtools/debugging/default.mspx)

Debugger.chm ADPlus.vbs같은폴더에있습니다. ADPlus 설명서를찾으려면 목차 탭을클릭하고다음항목을찾아클릭합니다.

  • Using Debugging Tools for Windows
  • Crash Dump Files
  • User-Mode Dump Files
  • Creating a User-Mode Dump File
  • ADPlus

색인 탭을클릭하여 ADPlus설명서를찾을수도있습니다. 키워드텍스트상자에 ADPlus입력합니다.

설명: http://support.microsoft.com/kb/286350/ko

위로 가기

ADPlus가 수행하는 작업

ADPlus콘솔기반의 Microsoft Visual Basic 스크립트로, Microsoft CDB 디버거를자동화하여하나 이상의 프로세스 디버그 출력을 포함하는 메모리 덤프와 로그 파일을 생성합니다. ADPlus실행할 때마다 디버깅 정보(디버그정보를포함하는메모리덤프와텍스트파일)로컬파일시스템이나원격네트워크공유에있는고유한이름의폴더(: C:\Temp\Crash_Mode__Date_01-22-2001__Time_09-41-08AMM)저장됩니다. 또한 ADPlus에서만드는파일에는파일이기존파일을 덮어쓰지 않도록 고유한 이름(: PID-1708__Inetinfo.exe__Date_01-22-2001__Time_09-41-08AM.log)지정됩니다.

 

ADPlus IIS(인터넷정보서비스), MTS(Microsoft Transaction Server) 또는 Microsoft COM+ 응용 프로그램과 같은 사용자 모드 프로세스나 서비스에서 작동합니다.

 

다음은 ADPlus가지특징입니다.

  • ADPlus는 기능, 속도안정성이향상된최신 Microsoft 디버거를 사용합니다.
  • ADPlus는 여러 프로세스에 대한 메모리를 비동기적으로 덤프하므로 각 프로세스가 동시에 중지되고 덤프되어 실행 시 전체 응용 프로그램에 대한 효과적인스냅샷제공할있습니다. 문제가발생할응용프로그램의상태를캡처하려면해당응용프로그램을구성하는모든프로세스와 이 응용 프로그램에서 동시에 사용하는 모든 프로세스를 캡처해야 합니다. 이것은다른프로세스에 대한 원격 프로시저 호출을 수행하는 응용 프로그램의 경우 특히 중요합니다.
  • ADPlus에는 명령줄 인터페이스가 있습니다. ADPlus에는그래픽사용자인터페이스가없기때문에원격 명령 셸(Remote.exe사용하여원격실행되는명령)에서 자동 모드(대화상자표시)실행할있습니다. 자동모드에서는오류가콘솔에 나타나고 이벤트 로그에 기록됩니다. 원격명령셸에서 ADPlus실행하는방법에대한자세한내용은문서의사용 시나리오절을참조하십시오.
  • ADPlus가 충돌을 모니터링할 때 -notify 스위치를사용하는경우 Windows Messenger 서비스가시작되어있으면 ADPlus Windows Messenger 서비스를통해사용자나컴퓨터에 충돌 경고 메시지를 보낼 수 있습니다.
  • ADPlus가 충돌 모드에서 프로세스를 모니터링할 때 충돌이 발생하면 ADPlus충돌유형에대한 중요 정보를 이벤트 로그로 보냅니다.
  • ADPlus XCOPY 배포를지원합니다. 테스트컴퓨터에 ADPlus포함된디버거패키지를설치하는경우디버거가설치된폴더를다른컴퓨터로복사할 수 있습니다. 또한 ADPlus사용하기위해 시스템에 사용자 지정 COM(구성요소개체모델) 구성 요소를 등록할 필요가 없으므로 잠금 소프트웨어 구성이 있는 프로덕션 서버에서 ADPlus를 사용할 수 있습니다. ADPlus제거하려면설치하거나복사한폴더를삭제하기만하면 됩니다.

설명: http://support.microsoft.com/kb/286350/ko

위로 가기

ADPlus를 사용해야 할 경우

ADPlus복잡한환경에서발생하는문제의원인을찾는데 필요한 디버깅 정보를 Microsoft PSS 지원담당자에게제공하기위해만들어졌습니다.

 

다음과 같은 문제가 발생하는 경우 ADPlus사용하여디버깅정보를캡처하십시오.

  • 프로세스가 응답을 중지하는 경우
  • 프로세스가 CPU단일프로세서컴퓨터에서 100%, 이중프로세서 컴퓨터에서 50%, 사중 CPU 컴퓨터에서 25% 사용할경우
  • 프로세스가 예기치 않게 충돌하거나 종료될 경우

설명: http://support.microsoft.com/kb/286350/ko

위로 가기

ADPlus를 사용하지 말아야 할 경우

다음과 같은 경우에는 ADPlus사용하지마십시오.

  • 시작할 때 예기치 않게 종료되는 프로그램이나 프로세스의 문제를 해결해야 하는 경우. 성공적으로시작한프로세스에만 ADPlus사용할있습니다. 시작할예기치 않게 종료되는 프로세스 문제는 사용자 모드 프로세스 덤프로 해결하는 것이 좋습니다. 사용자 모드 프로세스 덤프에 대한 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하십시오.

253066  (http://support.microsoft.com/kb/253066/ ) OEM 지원도구단계 3서비스릴리스 2 가용성

또는 최신 디버거를 사용하여 프로세스를 수동으로 디버깅할 수 있습니다. 최신 디버거에 대한 자세한 내용은 다음 Microsoft 사이트를참조하십시오.

http://www.microsoft.com/whdc/devtools/debugging/default.mspx (http://www.microsoft.com/whdc/devtools/debugging/default.mspx)

  • 충돌 모드에서 ADPlus사용할성능에영향을주는경우. 일반적으로 Microsoft Visual C++ EH 예외를많이발생시키는 DLL(동적연결라이브러리)이나프로그램으로인해성능이크게저하됩니다. 이러한예외는 C++ throw 문을 사용하거나 try/catch 블록을사용할발생합니다. 디버그출력스트림에많은양의정보를기록하는프로그램도성능을저하시킬있습니다. 대부분의경우 ADPlus충돌모드에서실행할때 성능에 큰 영향을 주지 않습니다.
  • 클러스터링 환경에서 실행할 경우 ADPlus사용할특히주의해야합니다. 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술자료문서를참조하십시오.

841673  (http://support.microsoft.com/kb/841673/ ) Exchange 2000 Server 또는 Exchange Server 2003에서 ADPlus 또는 Userdump사용하여정보저장소의덤프 파일을 만들려고 할 때 클러스터의 서버가 장애 조치될 수 있음

설명: http://support.microsoft.com/kb/286350/ko

위로 가기

ADPlus를 구하는 방법

ADPlus Microsoft Debugging Tools for Windows포함되어있습니다. Microsoft Debugging Tools for Windows구하려면다음 Microsoft 웹 사이트를 방문하십시오.

http://www.microsoft.com/whdc/devtools/debugging/default.mspx (http://www.microsoft.com/whdc/devtools/debugging/default.mspx)

설명: http://support.microsoft.com/kb/286350/ko

위로 가기

ADPlus 작동 방식

ADPlus에는다음가지작동모드가있습니다.

  • 중지(Hang)” 모드프로세스중지, CPU 100% 사용충돌과관련이없는밖의문제를해결하는사용됩니다. 중지모드에서 ADPlus사용할때는스크립트를 실행하기 전에 프로세스가 응답을 중지할 때까지 기다려야 합니다. 중지모드는충돌모드와 달리 지속적이지 않습니다.
  • 충돌(Crash)” 모드 – Dr. Watson 오류를 일으키는 충돌이나 예기치 않게 프로그램 또는 서비스를 종료시키는 기타 오류 문제를 해결하는 데 사용됩니다. 충돌모드에서 ADPlus사용할때는충돌이발생하기 전에 ADPlus시작해야 합니다-notify 스위치를통해관리자나컴퓨터에충돌을 알리도록 ADPlus구성할있습니다.

중지 모드

이 모드에서 ADPlus스크립트완료명령줄에지정된모든프로세스에대한전체메모리덤프를즉시생성합니다. 만들어진 .dmp 파일은 ADPlus실행했을때의날짜/시간스탬프를포함하는폴더에저장됩니다. 파일이름에는프로세스이름, 프로세스 ID ADPlus실행했을때의날짜/시간스탬프가포함됩니다. 프로세스메모리가파일로덤프되는동안 프로세스는 중지됩니다. 메모리덤프파일이만들어진 CDB 디버거의 비침입적(non-invasive) 연결/분리를통해프로세스가 재개됩니다.

 

사용 팁 중지모드에서 Userdump.exe 대신 ADPlus사용하여하나이상의프로세스에대해메모리를덤프할있습니다. 중지모드는터미널서버세션에서도작동합니다.

충돌 모드

이 모드에서 ADPlus CDB 디버거를명령줄에지정된모든프로세스에연결하고자동으로디버거를구성하여다음과같은유형의예외를모니터링합니다.

  • 잘못된 핸들
  • 잘못된 명령
  • 정수를 0으로나누기
  • 0으로 부동 소수점 나누기
  • 정수 오버플로
  • 잘못된 잠금 시퀀스
  • 액세스 위반
  • 스택 오버플로
  • C++ EH 예외
  • 알 수 없는 예외

이러한 유형의 예외 문제를 해결할 때는 IIS Exception Monitor Userdump.exe 대신 충돌 모드에서 ADPlus사용할있습니다. 충돌 모드는 CDB 디버거를통해침입적연결을사용하기때문에 Microsoft Windows NT 4.0이나 Windows 2000 터미널서버세션에서작동하지않습니다. 이러한운영체제의터미널서버세션에서는비침입적연결을사용하는중지모드만작동합니다. 최신디버거에서침입적또는비침입적으로프로세스에연결하는방법에대한자세한내용은디버거도움말의 “Debugging Tools for Windows: Attaching to a Running Process(User Mode)” 절을참조하십시오.

 

참고 충돌모드는 Windows XP Microsoft Windows Server 2003 운영체제의터미널서버 세션에서 지원됩니다.

 

ADPlus충돌모드에서실행하는경우디버거는치명적인예외가트래핑되고프로세스가예기치않게종료되거나사용자가 Ctrl+C 조합을눌러해당프로세스에서디버거를분리할때까지프로세스수명동안명령줄에지정된 각 프로세스에 계속 연결되어 있습니다. 프로세스에서디버거를수동으로분리하려면디버거창을최대화한 다음 Ctrl+C눌러디버거를중단해야합니다.

 

Ctrl+C누르면 ADPlus명령을트래핑하고모든스레드에대한스택을 로그 파일에 나열하기 시작한 다음 프로세스가 디버거에서 분리되기 전에 프로세스에 대한 작은 메모리 덤프 레코드를 생성합니다. 충돌모드는침입적연결을수행하기때문에디버거가분리되면프로세스가중지됩니다. 따라서프로세스를다시시작해야합니다. MTS COM+ 프로세스는다음에해당패키지의구성요소가호출될자동으로다시시작됩니다.

첫 번째 예외

첫 번째 예외나 번째 예외로예외유형(액세스위반, 스택오버플로)이 디버거에 발생할 수 있습니다. 정의에따르면번째예외는오류처리기로적절히처리되는경우 치명적이지 않습니다. 적절히처리되지않으면번째예외는번째예외로다시발생하며디버거로만 처리할 수 있습니다. 디버거가번째예외를처리하지못하면응용프로그램이종료됩니다.

 

첫 번째 예외와 두 번째 예외 및 Windows NT SEH(구조적예외처리)대한자세한내용은다음문서번호를클릭하여 Microsoft 기술 자료 문서를 참조하십시오.

105675  (http://support.microsoft.com/kb/105675/번째와번째예외처리

기본적으로 ADPlus없는예외와 EH 예외를 제외한 모든 유형의 치명적이지 않은 첫 번째 예외를 감지하면 다음 동작을 수행합니다.

  1. 프로세스를 일시 중지하여 모니터링 중인 프로세스에 예외가 발생한 날짜와 시간을 로그 파일에 기록합니다.
  2. 모니터링 중인 프로세스에 대해 예외가 발생한 스레드의 스레드 ID호출스택을로그파일에기록합니다.
  3. 예외 발생 시 고유한 이름으로 프로세스에 대한 작은 메모리 덤프 레코드(.dump -u /m)생성한다음프로세스를 다시 시작합니다.

참고 첫 번째 EH없는예외는자주발생하므로 ADPlus는 기본적으로 이러한 예외에 대해서는 고유한 작은 메모리 덤프를 생성하지 않습니다. 일반적으로이러한 예외는 프로세스나 DLL오류처리코드에의해처리됩니다. 이러한 예외는 처리되는 예외이므로 처리되지 않는 두 번째 예외가 되지 않으며 프로세스를 종료시키지 않습니다.

 

첫 번째 EH없는예외에대해고유한작은메모리덤프를생성하도록 ADPlus구성할수도있습니다. 이렇게하려면구성파일을 사용하여 ADPlus사용자지정해야합니다.

두 번째 예외

ADPlus EH와 알 수 없는 예외를 포함하여 모든 유형의 치명적인 두 번째 예외를 감지하면 다음 동작을 수행합니다.

  1. 프로세스를 일시 중지하여 모니터링 중인 프로세스에 예외가 발생한 날짜와 시간을 로그 파일에 기록합니다.
  2. 모니터링 중인 프로세스에 대해 예외가 발생한 스레드의 스레드 ID호출스택을로그파일에기록합니다.
  3. 치명적인 예외 발생 시 프로세스에 대한 전체 메모리 덤프를 생성한 다음 디버거를 종료합니다. 동작은프로세스를소멸시킵니다.

참고 Microsoft PSS 지원담당자가 메모리 덤프를 분석할 때 사용자 지정 구성 요소나 DLL복사본해당기호파일이필요할수 있습니다. 사용자 DLL대한기호파일을만드는방법은 다음 문서 번호를 클릭하여 Microsoft 기술자료문서를참조하십시오.

121366  (http://support.microsoft.com/kb/121366/ ) .PDB .DBG 파일에대한설명

291585  (http://support.microsoft.com/kb/291585/ ) HOWTO: Visual C++ 응용프로그램에대한디버그기호만들기

디버거를 사용하여 메모리 덤프를 분석할 때 Microsoft 제품에 대한 기호를 얻는 방법에 대한 자세한 내용은 다음 Microsoft 사이트를참조하십시오.

http://www.microsoft.com/whdc/DevTools/Debugging/symbolpkg.mspx (http://www.microsoft.com/whdc/DevTools/Debugging/symbolpkg.mspx)

설명: http://support.microsoft.com/kb/286350/ko

위로 가기

ADPlus 명령줄 스위치

ADPlus사용하려면스크립트에일련의명령줄스위치나인수를 지정해야 합니다. 최소한 ADPlus에는작동모드를 지정하는 스위치와 작동 대상 프로세스를 지정하는 스위치가 필요합니다.

 

다음은 가장 자주 사용되는 스위치입니다ADPlus help를 실행하거나 디버거 도움말 파일(Debugger.chm)에서 스위치 전체 목록을 볼 수 있습니다.

  • -hang
    스위치는중지모드에서실행되도록 ADPlus구성합니다. 스위치는 -iis-pn 또는 -p 스위치와함께사용해야합니다-hang -crash 스위치와함께사용할없습니다.

    참고 ADPlus중지모드에서실행중이면프로세스가 중단되거나 CPU많이사용한 후에 ADPlus시작해야합니다.

  • -crash
    스위치는충돌모드에서실행되도록 ADPlus구성합니다. 스위치는 -iis-pn 또는 -p 스위치와함께사용해야합니다-crash -hang 스위치와함께사용할없습니다.

    참고 ADPlus충돌모드에서실행중이면프로세스가 예기치 않게 종료되거나 불안정해지기 전에 ADPlus시작해야합니다.

  • -pn 프로세스이름
    -pn 스위치는 ADPlus에서분석할프로세스이름을 지정하는 데 사용됩니다. 이상의프로세스를지정하려면 -pn 프로세스이름 스위치를여러사용합니다. 예를들어다음과 같이 지정합니다.

-pn process1.exe -pn process2.exe

  • -p 프로세스 ID
    -p
     스위치는 ADPlus에서분석할프로세스 ID(PID)지정하는사용됩니다. 이상의프로세스를 지정하려면 -p PID 스위치를여러 개 사용합니다. 예를들어다음과같이지정합니다.

-p 1896 -p 1702

  • -sc생성명령
    디버그를
    연결할이미실행중인프로세스를지정하는 -pn  -p 스위치와달리 -sc 스위치는 디버거에서 시작(또는생성)응용프로그램 및 매개 변수를 정의합니다. :

-sc “c:\windows\system32\notepad.exe

  • -iis
    -iis
     스위치는 IIS(인터넷정보서버) 4.0 이상을실행하는서버컴퓨터를디버깅하는사용됩니다-iis 스위치와 함께 사용하면 ADPlus모든 IIS in-process(Inetinfo.exe) out-of-process(Mtx.exe/Dllhost.exe) 응용프로그램을모니터링합니다-iis 스위치는 -pn 스위치나 -p 스위치와함께사용하거나단독으로사용하여충돌모드또는중지 모드에서 IIS실행중인모든 MTS/COM+ 응용 프로그램을 분석할 수 있습니다.

    IIS 3.0 이하버전을실행하는서버컴퓨터를분석할경우에는 -pn 스위치를 사용하고 모니터링할 프로세스로 Inetinfo.exe지정하십시오.

  • -notify 컴퓨터이름 또는 사용자이름
    스위치는 ADPlus충돌모드에서실행될때만유효합니다. 스위치를사용하면 ADPlus충돌한특정사용자 이름이나 컴퓨터 이름을 경고합니다. 번째예외로인해디버거가프로세스에서분리되거나 사용자가 Ctrl+C눌러디버깅을중지하면로컬메신저서비스를통해원격사용자나 컴퓨터로 알림 메시지가 보내집니다. 알림은디버깅하는컴퓨터에서로컬메신저서비스가 시작된 경우에만 발생합니다.
  • -quiet
    스위치를사용하면 ADPlus모든모달대화상자를표시하지않습니다. 스위치는모달대화상자에서사용자가 확인을 클릭할 때까지 ADPlus무한정대기하도록있는원격명령셸에서 ADPlus실행하는경우유용합니다. 최상의결과를 얻으려면 이 스위치가 ADPlus.vbs전달되는번째스위치여야합니다.
  • -o 출력디렉터리
    스위치는 ADPlus디버그출력파일을저장할위치를알려줍니다. 파일이름을길면따옴표로묶어주어야합니다. UNC 경로(\\서버\공유)사용할수도있습니다. UNC 경로를사용하면 ADPlus지정한 UNC 경로바로아래에폴더를 만듭니다. 폴더에는 ADPlus실행되는 서버의 이름이 지정됩니다(: \\서버\공유\Web1 또는 \\서버\공유\Web2). 스위치는동일한네트워크공유에모든출력을저장하는팜의여러컴퓨터에서 ADPlus실행하는경우유용합니다.

설명: http://support.microsoft.com/kb/286350/ko

위로 가기

처음으로 ADPlus 실행

기본적으로 디버거는 Windows C:\Program Files\Debugging Tools 폴더에설치됩니다. 설치폴더를변경하려면디버거를설치할사용자지정설치를수행하고다른폴더를지정합니다. 또는표준설치를수행한경우 Program Files\Debugging Tools for Windows 폴더의내용을다른폴더로복사하면됩니다.

 

ADPlus실행하려면명령셸을열고디버거를설치했거나복사한폴더로전환한다음 ADPlus.vbs를 입력합니다.

 

기본 스크립트 인터프리터를 Wscript.exe에서 Cscript.exe변경하라는메시지가나타날있습니다. ADPlus에서 CSCript기본스크립트인터프리터로구성하는것이좋습니다.

구문

ADPlus는 다음 구문을 사용합니다. ADPlus.vbs 작동모드 모니터링프로세서선택적스위치 여기서 작동모드는 -hang 또는 -crash입니다.

모니터링 프로세스는 -iis-pn 프로세스.exe 또는 -p PID입니다.

선택적 스위치는 -notify-o 또는 -quiet입니다.

설명: http://support.microsoft.com/kb/286350/ko

위로 가기

충돌 모드 디버깅을 위해 서버 준비

충돌 모드에서 ADPlus실행하기전에 ADPlus 충돌모드디버깅세션에서대부분의정보를얻도록서버를적절히준비해야합니다.

충돌 모드에서 디버깅을 위해 Windows 2000 기반서버를준비하는단계

  1. Windows 2000 SP1이나 SP2 기호를서버에있는 C:\WINNT\Symbols 폴더에설치합니다. 기호는 다음 Microsoft 사이트에서다운로드할있습니다.

Windows 2000 SP1

http://download.microsoft.com/download/win2000platform/SP/SP1/NT5/EN-US/SP1SYM.exe (http://download.microsoft.com/download/win2000platform/sp/sp1/nt5/en-us/sp1sym.exe)

 

Windows 2000 SP2

http://download.microsoft.com/download/win2000platform/SP/SP2/NT5/EN-US/SP2SYM.exe (http://download.microsoft.com/download/win2000platform/sp/sp2/nt5/en-us/sp2sym.exe)

 

Sp1sym.exe 또는 Sp2sym.exe다운로드한후에지정된폴더에서해당 파일을 실행합니다.

  1. 프롬프트가 나타나면 C:\Sp1sym 또는 C:\Sp2sym같은새로운 임시 폴더나 디스크 공간이 충분한 드라이브 또는 폴더로 파일을 추출합니다.
  2. C:\Sp1sym\Support\Debug\Symbols\i386\Symbols_sp.exe 또는 C:\Sp2sym\Support\Debug\Symbols\i386\Symbols_sp.exe를 실행합니다. 여기서 C:\Sp1sym 또는 C:\Sp2sym단계에서파일을추출한폴더입니다.
  3. EULA가 표시되면 를 클릭합니다.
  4. 파일을 추출할 폴더를 묻는 메시지가 나타나면 C:\WINNT\Symbols클릭한다음 확인을 클릭합니다. C:\WINNT\Symbols 폴더가나타납니다. 폴더에는 DLL, EXE 여러하위폴더가들어 있습니다.
  5. 사용자 지정 DLL기호와 SP1이나 SP2 이후핫픽스를 C:\WINNT\Symbols\Dll 폴더로 복사합니다.
  6. 사용자 지정 .exe 파일의기호를 C:\WINNT\Symbols\Exe 폴더로 복사합니다. 또한개발자로부터 .pdb .dbg 파일을구해 C:\WINNT\Symbols\Dll 폴더에 저장해야 합니다.
  7. C:\WINNT\Symbols\Dll 폴더에이미있는 .dbg .pdb 파일을 핫픽스의 버전으로 덮어씁니다.

    참고 Winzip 최신버전을사용하여핫픽스패키지를 열 수 있습니다. \Debug 하위폴더에서기호를추출할있습니다. \Debug 하위폴더는핫픽스자동설치프로그램에포함되어있습니다.

  8. _NT_SYMBOL_PATH 환경변수를만들고 C:\WINNT\Symbols동일하게설정합니다. 변수는시스템변수나사용자환경변수일있습니다.

충돌 모드에서 디버깅을 위해 Windows NT 4.0 기반서버를준비하는단계

  1. Windows NT 4.0 서비스 6a실행하고있다고가정하고 Windows NT 4.0 SP6a 기호를서버에있는 C:\WINNT\Symbols 폴더에설치합니다.
    Windows NT 4.0
    서비스 6/6a대한자세한내용은다음문서 번호를 클릭하여 Microsoft 기술자료문서를참조하십시오.

241211  (http://support.microsoft.com/kb/241211/ ) Windows NT 4.0 서비스 6/6a에서해결된버그목록(파트 1)

Sp6symi.exe다운로드한후에지정된폴더에서실행합니다.

  1. 프롬프트가 나타나면 C:\WINNT 폴더로파일을추출하거나기호가 C:\WINNT에 설치되지 않은 경우 적절한 \WINNT 폴더로대체합니다. C:\WINNT\Symbols 폴더가나타나며폴더에는 DLL, EXE 다양한하위폴더가들어있습니다.
  2. C:\WINNT\Symbols\IIS4 폴더의하위폴더를 C:\WINNT\Symbols복사합니다. 모든파일을덮어쓸것인지물으면 를 클릭합니다.
  3. 사용자 지정 DLL기호와 SP6a 이후핫픽스를 C:\WINNT\Symbols\Dll 폴더로복사합니다.
  4. 사용자 지정 .exe 파일의기호를 C:\WINNT\Symbols\Exe 폴더로 복사합니다. 또한개발자로부터 .pdb .dbg 파일을구해 C:\WINNT\Symbols\Dll 폴더에 저장해야 합니다.
  5. C:\WINNT\Symbols\Dll 폴더에이미있는 .dbg .pdb 파일을 핫픽스의 버전으로 덮어씁니다.

    참고 Winzip 최신버전을사용하여핫픽스패키지를 열 수 있습니다. \Debug 하위폴더에서기호를추출할있습니다. 하위폴더는핫픽스자동설치프로그램에포함되어있습니다.

  6. _NT_SYMBOL_PATH 환경변수를만들고 C:\WINNT\Symbols동일하게설정합니다. 변수는시스템변수나사용자환경변수일있습니다.

반드시 디버깅 중인 서버에 기호를 다운로드하고 설치할 필요는 없지만 이렇게 하는 것이 좋습니다. 서버에기호를다운로드하고설치하는경우로그파일에서캡처한출력이 Microsoft PSS에서분석할훨씬도움이됩니다.

 

Microsoft 디버그기호를구하는방법에대한자세한내용은다음문서번호를클릭하여 Microsoft 기술자료문서를참조하십시오.

268343  (http://support.microsoft.com/kb/268343/ ) Umdhtools.exe: Umdh.exe사용하여메모리누수를찾는방법

서버를 구성한 후에 충돌 모드에서 ADPlus실행할있습니다. 모드는일반적인 ADPlus 사용시나리오절에서자세히설명합니다.

설명: http://support.microsoft.com/kb/286350/ko

위로 가기

 

일반적인 ADPlus 사용시나리오

이 절에서는 ADPlus실행해야있는가지일반적인 시나리오에 대해 설명합니다.

프로세스가 응답을 중지하거나 CPU 100% 사용

이 시나리오에서 프로세스는 일정 기간 동안 또는 무한정 CPU 100% 사용할있습니다. 문제가발생한 후에 중지모드에서 ADPlus실행하여 CPU소모하는프로세스의메모리덤프를 구하십시오. 예를들어다음명령구문하나를사용합니다.

ADPlus -hang -p 1896

이 명령은 중지 모드에서 ADPlus실행하고 PID 1896프로세스의전체메모리덤프파일을생성합니다.

ADPlus -hang -p 1896

이 명령은 중지 모드에서 ADPlus실행하고이름이 Myapp.exe모든프로세스의전체메모리덤프파일을생성합니다.

 

ADPlus -hang -iis -pn myapp.exe -o c:\temp

이 명령은 중지 모드에서 ADPlus실행하고 IIS, Mtx.exe Dllhost.exe모든인스턴스이름이 Myapp.exe모든프로세스의전체메모리덤프파일을생성합니다. 그런 다음 덤프 파일을 C:\Temp 폴더에저장합니다.

CPU 100% 사용하는 상태에서 중지 모드로 ADPlus실행하면도구는명령줄에지정된프로세스의메모리덤프파일을 생성합니다.

 

참고 CPU 100% 사용하는 상태가 되거나 프로세스가 중지된 후에 디버거가 프로세스에 연결하지 못하는 경우가 간혹 있습니다. 문제가 발생한 후에 중지 모드에서 ADPlus실행하면도구가메모리덤프파일을생성할없습니다. 시나리오에서는문제가발생하기 전에 디버거를연결하는것이가장좋은방법일있습니다. 이렇게 하려면 다음 명령 구문 중 하나를 사용하여 충돌 모드에서 ADPlus실행하십시오.

ADPlus -crash -p 1896

이 명령은 PID 1896프로세스에 대해 충돌 모드에서 ADPlus실행하며, 예외가발생하거나 사용자가 최소화된 디버거 창에서 Ctrl+C눌러메모리덤프파일을생성하고디버거를분리하기를 기다립니다.

 

ADPlus -crash -pn myapp.exe

이 명령은 이름이 Myapp.exe프로세스에대해충돌모드에서 ADPlus실행하며, 예외가발생하거나사용자가최소화된디버거 창에서 Ctrl+C눌러메모리덤프파일을생성하고디버거를분리하기를기다립니다.

 

ADPlus -crash -iis -pn myapp.exe -o c:\temp

이 명령은 이름이 Myapp.exe 또는 Inetinfo.exe프로세스의모든인스턴스와 Mtx.exe 또는 Dllhost.exe모든인스턴스에대해충돌모드에서 ADPlus를 실행하며, 예외가발생하거나사용자가최소화된디버거하나에서 Ctrl+C눌러메모리덤프파일을생성하고디버거를분리하기를기다립니다. ADPlus메모리덤프파일과로그파일을 C:\Temp 폴더에 저장합니다.

그런 다음 프로세스가 중지되거나 CPU 100% 사용하게  디버거가프로세스에대한메모리덤프파일을생성할있도록사용자가최소화된디버거창에서 Ctrl+C누를있습니다.

 

참고 기본적으로 ADPlus는 사용자가 Ctrl+C누를작은메모리덤프레코드만생성합니다. 설정은디스크공간을절약합니다. 시나리오에서는사용자가 Ctrl+C누를전체메모리덤프파일을생성하도록 ADPlus를 구성하는 것이 유용할 수 있습니다. 이렇게하려면 CTCF 스위치를사용하십시오. 또한 CPU 사용이 100%가 되는 상태를 포함하여 일정 기간 동안 성능 로그 파일이나 시스템 모니터 로그 파일을 캡처하는 것이 종종 도움이 됩니다. 최소한로그파일은 1초에서 5간격으로다음개체를캡처해야합니다.

  • 메모리
  • 프로세스
  • 프로세서
  • 시스템
  • 스레드

프로세스가 예기치 않게 종료

이 시나리오에서는 프로세스가 예기치 않게 종료되거나 충돌할 수 있습니다. 충돌 모드에서 ADPlus실행하여문제가발생하기 전에 종료되는프로세스의메모리덤프파일을구하십시오. 예를 들어 다음 명령 구문 중 하나를 사용합니다.

ADPlus -crash -iis

이 명령은 충돌 모드에서 ADPlus실행하며컴퓨터에서실행중인모든 Mtx.exe 또는 Dllhost.exe 프로세스와 Inetinfo.exe CDB 디버거를연결합니다. 그러면 ADPlus번째와번째예외가발생하기를기다립니다. 기본적으로 ADPlus -o 스위치가 생략되었기 때문에 설치 폴더의 하위 폴더에 모든 파일을 저장합니다.

 

ADPlus -quiet -crash -iis -notify 원격컴퓨터 -o c:\temp

이 명령은 충돌 모드에서 ADPlus자동으로실행하며(대화상자없이모든출력이이벤트로그에기록) 컴퓨터에서실행 중인 모든 Mtx.exe 또는 Dllhost.exe 프로세스와 Inetinfo.exe CDB 디버거를연결합니다-notify 스위치를사용하기때문에디버거는충돌이감지되거나모니터링 중인 프로세스가 종료될 때마다 원격컴퓨터라는 컴퓨터에 로그온한 모든 사용자에게 알립니다-o 스위치를사용하기때문에 ADPlus는 모든 출력을 C:\Temp 폴더에저장됩니다. 폴더가 없으면 ADPlus새로만듭니다.

 

ADPlus -crash -iis -o \\서버\공유

이 명령은 모든 출력을 네트워크 서버에 기록하는 것을 제외하면 앞의 명령과 같습니다. ADPlus\\서버\공유에 새 하위 폴더를 만들고 로컬 컴퓨터의 이름을 해당 하위 폴더 이름으로 지정합니다. 따라서팜에서 ADPlus실행중인 경우 ADPlus실행하는팜의서버는 \\서버\공유 아래의고유한폴더에기록합니다. 서버에대해고유한 폴더를 만들 필요는 없으며 자동으로 만들어집니다.

참고 로컬 콘솔에서 충돌 모드로 ADPlus실행중인경우다음절에서설명하는원격명령대신디버그 세션 기간 동안 콘솔에 로그온해 있어야 합니다.

 

예를 들어 충돌 모드에서 ADPlus시작하고 -iis 스위치를 사용하여 IIS모니터링한다고가정합니다. 콘솔에서 로그아웃하면 콘솔에서 실행 중인 Cdb.exe복사본과실행중인다른모든응용프로그램이종료됩니다. 결과적으로디버깅이중단되고모니터링중인프로세스가종료됩니다.

 

이런 문제를 방지하려면 Ctrl+Alt+Del누른다음 컴퓨터잠금을 클릭하여 콘솔 세션을 잠그거나 대화형 로그온이 필요 없는 비대화형으로 실행하도록 예약된 원격 명령 셸에서 ADPlus실행할있습니다.

 

비대화형으로 실행하도록 원격 명령 셸을 예약하는 방법에 대한 자세한 내용은일반적인 ADPlus 사용시나리오: 원격으로충돌모드에서 ADPlus 실행절을참조하십시오.

MTS 또는 COM+ 서버응용프로그램이예기치않게종료

MTS COM+ 서버 응용 프로그램에서 실행되는 COM(사용자지정구성요소개체모델) 구성요소는실제로대리프로세스(Mtx.exe 또는 Dllhost.exe)에서실행됩니다. 대리프로세스의속성과 설정은 MTS Explorer(Windows NT 4.0)구성요소서비스 Microsoft Management Console(MMC) 스냅인(Windows 2000, Windows XP Windows Server 2003)통해구성할 수 있습니다.

 

기본적으로 MTS COM+ 서버응용프로그램은 3분의유휴시간후에종료되도록구성됩니다. 디버거가연결되어 있는 동안 계속 실행되고 예외를 모니터링하도록 하려면 유휴상태일때도실행되도록 구성해야 합니다.

 

또한 MTS COM+ Failfast구현합니다. Failfast처리되지않은 액세스 위반을 생성하는 MTS/COM+ 프로세스에실패(종료)하도록설계된안전장치입니다.

 

Failfast처리되지않은액세스위반예외를발생시키는 MTS COM+ 응용프로그램에서기본적으로사용됩니다. 따라서실패하는 MTS/COM+ 서버응용프로그램은번째액세스위반예외를발생시킬없습니다. , 번째액세스위반이발생한후에종료됩니다. 기본적으로 ADPlus번째예외가발생할작은메모리 덤프 레코드만 생성하도록 구성됩니다.

 

MTS/COM+ 서버응용프로그램을성공적으로디버깅하려면다음과같이하십시오.

  1. 유휴 상태일 때도 실행되도록 MTS/COM+ 서버응용프로그램을구성합니다.
  2. FullOnFirst 스위치를사용하여번째예외에서전체덤프파일을만듭니다.
  3. 충돌 모드에서 ADPlus실행하고응용프로그램이실패하기를기다립니다.

참고 MTS COM+서버응용프로그램을종료하고 Failfast 정책으로 프로세스는 두 번째 예외를 발생시킬 수 없기 때문에 첫 번째 액세스 위반 메모리 덤프 파일만 얻을 수 있습니다.

원격으로 충돌 모드에서 ADPlus 실행

서버 팜에 있는 하나 이상의 원격 서버에서 예기치 않게 종료되는 프로세스를 모니터링하기 위해 로컬 클라이언트 컴퓨터에서 충돌 모드로 ADPlus시작해야하는경우가많습니다. 일반적으로 Windows 2000에서는 Windows 터미널서비스를통해작업을수행할있습니다. 그러나 Windows NT 4.0 Windows 2000에서는다른 창 스테이션에서 실행되는 응용 프로그램을 디버깅할 수 없기 때문에 ADPlus터미널서비스세션에서 실행 중인 것을 감지하면 충돌 모드 기능을 해제합니다. 문제를해결하려면 Remote.exe 유틸리티를사용하여원격서버를공유하고원격서버에서명령셸을시작하는배치파일을 만든 다음 AT 명령을사용하여대상서버에서실행되도록배치 파일을 예약합니다AT 명령은명령셸이서비스와비슷하게비대화형으로 실행되도록 합니다. 그러면원격명령셸은시작하는사용되었던것과동일한 Remote.exe 유틸리티를사용하는로컬워크스테이션이나클라이언트컴퓨터에연결됩니다.

 

AT 명령을사용하여서버에서원격명령셸을시작하려면다음과같이하십시오.

  • 원격 서버
    디버거가 C:\Debuggers설치되었다고가정하고다음과같이하십시오.
  1. C:\Debuggers 폴더에 Remoteshell.cmd라는배치파일을만듭니다.
  2. 이 배치 파일에 다음 줄을 추가합니다.

c:\debuggers\remote.exe /s “cmd.exe” remoteshell

  1. 서버에 있는 콘솔이나 터미널 서비스 세션에서 새 명령 셸을 열고 다음 명령을 입력합니다.

AT 15:00 c:\debuggers\remoteshell.cmd

15:00현재시간보다 1분이늦습니다. 예를 들어 현재 시간이 14:59경우 15:00입력합니다.

  1. AT 명령이실행되기를기다립니다.
  2. 명령 프롬프트에 매개 변수 없이 AT입력하여작업이오류없이실행되는지확인합니다.
  • 로컬 클라이언트:
    로컬클라이언트컴퓨터에디버거를설치하거나최소한 Remote.exe 유틸리티를 로컬로 복사합니다. 유틸리티는기본적으로루트설치폴더에디버거와함께설치됩니다.

    디버거와 Remote.exe 유틸리티가 C:\Debuggers설치되었다고가정하고다음과같이하십시오.

  1. 명령 프롬프트에서 C:\Debuggers 폴더로전환합니다.
  2. 다음 명령을 입력합니다.

remote.exe /c 원격서버 remoteshell

원격 서버는 원격 서버의 이름입니다.

  1. 로컬 명령 셸이 서버에서 실행되는 원격 명령 셸에 연결되고 사용자가 로컬로 입력하는 모든 명령은 원격 서버에서 수행됩니다. DIR c:\ 명령은원격서버의 C 드라이브내용을나열합니다.
  2. 콘솔에서 로컬로 실행하는 것처럼 원격 명령 셸에서 ADPlus충돌모드로실행할있습니다. 그러나 -quiet 스위치를 사용하여 기본적으로 ADPlus에서모든대화상자가표시되지않도록해야합니다-quiet 스위치를사용하지않고 ADPlus실행하면원격명령셸이응답을중지하고프롬프트로돌아가지않습니다. 문제가발생하면서버에서원격명령(Cmd.exe)을 종료한 다음 새 인스턴스를 시작해야 합니다.
  3. ADPlus가 현재 원격으로 충돌 모드를 통해 디버깅 중인 프로세스로 디버그 중단(Ctrl+C) 명령을 보내려면 Breakin.exe 유틸리티를사용해야합니다. Breakin.exe기본적으로디버거폴더의루트에디버거와함께설치됩니다. 예를들어프로세스 ID 1975실행되는 IIS(Inetinfo.exe) 디버깅을 중단하려면 원격 명령 셸에서 다음 명령을 입력합니다.

breakin.exe 1975

또는 루트 디버거 폴더에 있는 Kill.exe 명령을사용하여 디버깅 중인 프로세스를 종료할 수 있습니다.

설명: http://support.microsoft.com/kb/286350/ko

위로 가기

추가 정보 및 알려진 문제

  • ADPlus가 충돌에 대한 정보를 캡처했는지 또는 충돌 모드에서 모니터링 중인 프로세스가 종료되었는지 어떻게 확인합니까?

    문제를확인하는방법은여러가지가있습니다.

  • -notify 스위치를사용하고디버깅 중인 서버와 알림을 받을 클라이언트 컴퓨터에서 메신저 서비스가 시작되었는지 확인합니다.
  • 텍스트 편집기에서 각 프로세스에 대한 출력 폴더에 나타나는 .log 파일을열고파일끝으로스크롤합니다. 다음텍스트를찾습니다.

 

  •  

 

  •      0:070> * ——– AutodumpPlus 4.01 finished running at: ——–     0:070> .time     Debug session time: Mon Aug 06 15:25:15 2001     System Uptime: 3 days 17:00:34     Process Uptime: 1 days 3:10:38     0:070> * ——————————————————-
  • 출력 폴더에서 “__2nd_chance”라는구문이포함된 .dmp 파일을찾습니다. 메모리덤프레코드의레이블에구문이나타나면 프로세스가 예기치 않게 종료된 것입니다.
  • 출력 폴더에서 “__Process_was_shutdown”라는구문이포함된 .dmp 파일을찾습니다. 메모리덤프레코드의레이블에 이 구문이 나타나면 관리자가 프로세스를 종료한 것이며, MTS/COM+ 응용프로그램인 경우 유휴 제한 시간에 도달하여 종료된 것입니다.
  • 출력 폴더에서 “__CTRL-C”라는구문이포함된 .dmp 파일을찾습니다. 메모리덤프레코드의레이블에구문이나타나면프로세스에서 실행 중인 DLL에서디버그중단예외가발생했거나누군가현재디버깅세션을중지하기 위해 콘솔에서 Ctrl+C(ADPlus원격으로실행중인경우 Breakin.exe 사용)누른것입니다.
  • ADPlus를 실행하려면 Windows 스크립트호스트구성요소를시스템에설치해야합니다. Windows 스크립트호스트를다운로드하려면다음 Microsoft 사이트를방문하십시오.

http://msdn.microsoft.com/ko-kr/library/ms950396.aspx (http://msdn.microsoft.com/ko-kr/library/ms950396.aspx)

참고 다음 Microsoft 제품이설치되어있는경우 Windows 스크립트 호스트 구성 요소도 이미 설치되어 있을 것입니다.

  • Microsoft Internet Explorer 5
  • Microsoft Office 2000
  • Microsoft Visual InterDev 6.0
  • Microsoft Visual Studio 6.0
  • Microsoft Windows NT Option Pack
  • Microsoft Windows 2000
  • Microsoft Windows XP
  • Microsoft Windows Server 2003
  • Microsoft Windows Vista
  • -iis 스위치는 IIS(인터넷정보서버) 4.0이나 IIS(인터넷정보서비스) 5.0.x설치된경우에만작동합니다.
  • 자동 모드에서 ADPlus실행하면도구는정보를이벤트로그에기록합니다.
  • -o 스위치를사용하는경우지정된경로는이상의존재하지않는폴더를포함해서는됩니다. :
  1. -o c:\temp1\temp2지정하는경우 C:\Temp1 \Temp2 폴더가없으면
  2. ADPlus는 폴더가 없다는 오류 메시지를 표시하고 폴더를 새로 만들지 않습니다.

-o c:\temp1만 지정하면 ADPlus폴더가없는경우 C:\Temp1 폴더를 만들고 해당 폴더에 모든 출력 파일을 저장합니다. 여러하위폴더를지정하고 -o 스위치를사용하려면 ADPlus를 실행하기 전에 모든 하위 폴더가 있는지 확인합니다.

  • COM+에서 패키지의 속성 대화 상자에 있는 고급 탭에서 디버거를 시작하도록 서버 패키지를 구성할 수 있습니다디버거시작 옵션을사용하는경우 ADPlus CDB 디버거를프로세스에연결할없습니다. 기본적으로 한 번에 한 프로세스에 한 디버거만 연결할 수 있습니다.
  • ADPlus가 충돌 모드에서 분석 중인 프로세스에서 의도적이거나 예기치 않게 종료된 다른 프로세스로 RPC(원격 프로시저 호출)수행할 ADPlus분석 중인 프로세스에 대해 만드는 로그 파일은 다음 예외를 하나 이상 포함할 수 있습니다.

Unknown exception – code 80010105 (first chance)

Unknown exception – code 800706be (first chance)

Unknown exception – code 800706ba (first chance)

이러한 예외는 일반적인 것입니다. RPC모니터링중인프로세스에서존재하지않거나실패한프로세스로호출을수행할이런예외를발생시킵니다.

 

뿐만 아니라 ADPlus해당프로세스에대한 ADPlus 디버그로그에서 Inetinfo.exe모니터링중인경우다음예외가 로그에 나타날 수 있습니다.

Unknown exception – code 800706bf (first chance)

이 예외는 IIS실패한 out-of-process(높은격리수준) 사이트를호출한 후에 일반적으로 나타납니다. 그런다음예외의인스턴스가나타날있습니다.

Unknown exception – code 800706ba (first chance)

원격지 서버 정보 확인 방법

[원격지 서버 정보 확인]



SystemInfo

systeminfo /s 호스트명 /fo csv /nh >> c:\%userprofile%\desktop\호스트명_info.csv


Wmi Query

wmic /node:호스트명 ComputerSystem get Manufacturer, Model


Reg query 를 이용한 설치된 드라이버 버전 확인


reg query \\호스트명\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0007\ /v “DriverVersion”

reg query \\호스트명\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0007\ /v “DriverDate”

MMC 및 CPL with command

Microsoft Management Console

admgmt.msc 엑티브디렉토리매니지먼트

 

appsrv.msc 어플리케이션서버

 

azman.msc Authorization Manager

 

compmgmt.msc 컴퓨터관리

 

ciadv.msc 인덱싱서비스

 

certmgr.msc 인증서관리

 

certsrv.msc Certification Authority

 

certtmpl.msc Certification Template

 

dcpol.msc 도메인컨트롤러정책수정

 

dfsgui.msc distributed file system

 

dhcpmgmt.msc dhcp management

 

dnsmgmt.msc dns management

 

domain.msc Active Directory Domain and Trust

 

dompol.msc Active Directory Security Policy

 

dsa.msc Active Directory Users and Computers

 

dssite.msc Active Directory Sites and Services

 

devmgmt.msc 장치관리자

 

diskmgmt.msc 디스크관리자

 

dfrg.msc 조각모음

 

eventvwr.msc 이벤트뷰어

 

fsmgmt.msc 공유폴더/세션확인

 

gpedit.msc 로컬컴퓨터정책

 

ias.msc Internet Authentication Service

 

ipaddrmgmt.msc ip address management

 

lusrmgr.msc 로컬사용자및그룹

 

ntmsmgr.msc 이동식저장소관리

 

ntmsoprq.msc 이동식저장소운영자요청

 

perfmon.msc 성능모니터

 

pkiview.msc Enterprize PKI

 

pkmgmt.msc public key management

 

rrasmgmt.msc routing and remote access management

 

rsop.msc 정책의결과와집합

 

rsadmin.msc remote storage admin

 

secpol.msc 로컬보안설정

 

services.msc 서비스

 

schmmgmt.msc Active Directory Schema management

 

tapimgmt.msc telephony management

 

tscc.msc Terminal Service Configurations

 

tsmmc.msc Remote desktops

 

uddi.msc uddi console

 

winsmgmt.msc wins management

 

wmimgmt.msc Windows Management Infrastructure Control

Control Panels

Network Properties ncpl.cpl

 

System Properties sysdm.cpl

 

Add/Remove Programs appwiz.cpl

 

Accessibility Options access.cpl

 

Add New Hardware Wizard hdwwiz.cpl

 

Date and Time Properties timedate.cpl

 

Display Properties desk.cpl

 

Find Fast findfast.cpl

 

Folder Properties * folders

 

Fonts Folder * fonts

 

Internet Properties inetcpl.cpl

 

Joystick Properties joy.cpl

 

Keyboard Properties main.cpl keyboard

 

Mouse Properties main.cpl

 

Password Properties password.cpl

 

Phone and Modem options telephon.cpl

 

Power Management  powercfg.cpl

 

Printers Folder * printers

 

Regional settings intl.cpl

 

Scanners and Cameras sticpl.cpl

 

Sound Properties mmsys.cpl sounds

 

Sounds and Audio Device Properties mmsys.cpl

 

User settings nusrmgr.cpl