다음을 통해 공유


레지스트리 구성

SymProxy는 이 레지스트리 키에 해당 설정을 저장합니다.

HKLM/Software/Microsoft/Symbol Server Proxy

이 레지스트리 키는 웹 사이트에 저장할 기호를 찾을 위치, 로깅 수준 및 SymProxy가 네트워크에 직접 연결하여 작동하는지 여부를 제어합니다. Windows용 디버깅 도구와 함께 제공되는 SymProxy 등록 도구(Symproxy.reg)를 실행하여 이 키를 만들 수 있습니다. 명령 프롬프트에 symproxy.reg를 입력하거나 Windows Explorer 두 번 클릭합니다.

이렇게 하면 "x"라는 접두사로 접두사로 추가되는 설정에 대한 항목이 추가되어 사용하지 않도록 설정됩니다. 설정을 사용하려면 원하는 설정 앞에서 "x"를 제거합니다.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Symbol Server Proxy]
"Available Settings"="Remove the 'x' prefix to use the setting"
"xMissAgeTimeout"=dword:00015180
"xMissAgeCheck"=dword:00000e10
"xMissTimeout"=dword:00000e10
"xNoCache"=dword:00000001
"xNoFilePointers"=dword:00000001
"xNoInternetProxy"=dword:00000001
"xNoLongerIndexedAuthoritive"=dword:00000001
"xNoUncompress"=dword:00000001
"xRequestTimeout"=dword:0000019
"xRetryAppHang"=dword:0000002
"xUriFilter"=dword:00000FF
"xUriTiers"=dword:0000001

symproxy.reg 레지스트리 파일은 기호의 가상 디렉터리 이름을 가정하고 Microsoft 공용 기호 서버를 사용하도록 기호 경로를 구성합니다.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Symbol Server Proxy\Web Directories]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Symbol Server Proxy\Web Directories\Symbols]
"SymbolPath"="https://msdl.microsoft.com/download/symbols"

symproxy.reg의 이벤트 로깅 항목은 이 항목의 이벤트 로그 섹션에서 후자를 다룹니다.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\Microsoft-Windows-SymProxy]
"ProviderGuid"="{0876099c-a903-47ff-af14-52035bb479ef}"
"EventMessageFile"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,\
  00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,\
  5c,00,69,00,6e,00,65,00,74,00,73,00,72,00,76,00,5c,00,53,00,79,00,6d,00,50,\
  00,72,00,6f,00,78,00,79,00,2e,00,64,00,6c,00,6c,00,00,00
"TypesSupported"=dword:00000007

symproxy.reg의 웹 디렉터리 항목은 이 항목에서 설명합니다.

웹 디렉터리

기호 저장소로 사용하는 IIS에서 생성된 각 가상 디렉터리에 대해 다음 레지스트리 키의 웹 디렉터리 하위 키 아래에 레지스트리 키를 설정해야 합니다.

HKLM/Software/Microsoft/Symbol Server Proxy

기호 저장소 가상 디렉터리에 대한 레지스트리 키를 편집하려면

  • SymProxy 기호 저장소에서 사용하는 모든 기호 저장소를 포함하도록 SymbolPath 의 내용을 편집합니다. 둘 이상의 기호 저장소를 사용하는 경우 세미콜론으로 구분합니다. 각 값에 대해 최대 10개의 저장소가 지원됩니다. HTTP 경로에는 https:// 접두사를 포함해야 하며 UNC 경로에는 접두사를 \\ 포함해야 합니다.

예를 들어 가상 디렉터리 중 하나를 기호라고 하고 액세스하는 기호 저장소가 UNC 저장소 \\symbols\symbols 및 HTTP 저장소 https://msdl.microsoft.com/download/symbols에 있는 경우 다음 레지스트리 키를 만듭니다.

HKLM/Software/Microsoft/Symbol Server Proxy/Web Directories/Symbols

이 키를 만든 후 해당 SymbolPath 를 \\symbols\symbols;https://msdl.microsoft.com/download/symbols로 편집합니다. 레지스트리 편집기의 다음 스크린샷에서 볼 수 있습니다.

업데이트된 SymbolPath를 표시하는 레지스트리 편집기의 스크린샷.

이 예제에서 SymProxy는 먼저 \\symbols\symbols의 기호를 검색합니다. 파일이 없으면 Microsoft 기호 저장소가 사용됩니다.

  • 가상 디렉터리 이름과 일치하는 웹 디렉터리 아래의 각 키에서 SymbolPath라는 REG_SZ 만들어야 합니다. 값에는 SymProxy 기호 저장소를 채우는 데 사용할 모든 업스트림 기호 저장소가 포함됩니다.

  • 최대 10개의 항목이 지원됩니다.

  • 세미콜론으로 항목을 구분합니다.

  • UNC 경로에는 "\\" 접두사를 포함해야 합니다.

  • HTTP 경로에는 "https://" 접두사를 포함해야 합니다.

  • 가장 저렴한 값에서 가장 비싼 값으로 값을 정렬합니다.

    • 계산에서 사용량 성능 목표와 서버 및 데이터 통신 비용의 균형을 유지해야 합니다.

    • 일반적으로 인터넷 HTTP 서버 앞에 로컬 SMB/HTTP 서버를 배치합니다.

SymProxy 성능 카운터

SymProxy는 SymProxy라는 공급자를 통해 성능 카운터를 내보낼 수 있습니다.

성능 카운터 지원을 사용하도록 설정하려면 관리자 명령 창에 symproxy 매니페스트 파일을 등록합니다.

C:\> lodctr.exe /m:%WINDIR%\system32\inetsrv\symproxy.man

성능 카운터 지원을 사용하지 않도록 설정하려면 매니페스트의 등록을 취소합니다.

C:\> unlodctr.exe /m:%WINDIR%\system32\inetsrv\symproxy.man

Windows용 SymProxy 이벤트 추적

SymProxy는 Microsoft-Windows-SymProxy라는 공급자를 통해 ETW 이벤트를 만들 수 있습니다.

C:\> logman query providers | findstr SymProxy
Microsoft-Windows-SymProxy {0876099C-A903-47FF-AF14-52035BB479EF}

ETW 지원을 사용하도록 설정하려면 매니페스트 파일을 등록합니다.

C:\> wevtutil.exe install-manifest %WINDIR%\system32\inetsrv\symproxy.man

ETW 지원을 사용하지 않도록 설정하려면 매니페스트 파일의 등록을 취소합니다.

C:\> wevtutil.exe uninstall-manifest %WINDIR%\system32\inetsrv\symproxy.man

이벤트 로그

ETW가 구성된 경우 이벤트는 이벤트 로그의 애플리케이션 및 서비스 로그\Microsoft\Windows\SymProxy 아래의 운영 및 분석 채널에 이벤트로 기록됩니다.

이벤트 로그 항목의 메시지를 올바르게 보려면 symproxy.reg 파일의 이벤트 로그 영역을 레지스트리에 추가해야 합니다.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\Microsoft-Windows-SymProxy]
"ProviderGuid"="{0876099c-a903-47ff-af14-52035bb479ef}"
"EventMessageFile"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,\
  00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,\
  5c,00,69,00,6e,00,65,00,74,00,73,00,72,00,76,00,5c,00,53,00,79,00,6d,00,50,\
  00,72,00,6f,00,78,00,79,00,2e,00,64,00,6c,00,6c,00,00,00
"TypesSupported"=dword:00000007

SymProxy 이벤트

SymProxy는 다음 이벤트를 기록합니다.

이벤트 ID 설명 채널
1 ISAPI 필터 시작 관리자
2 ISAPI 필터 중지 관리자
3 ISAPI 필터 구성 Admin
4 캐시 통계 누락 관리자
10 URL 요청 - 로컬 캐시 적중 작동
11 URL 요청 - 로컬 캐시 누락 작동
20 SymSrv를 통해 기호 다운로드 작동
30 위험 기호 누락 관리자
31 중요한 이미지 누락 관리자
40 SymSrv – 경로를 찾을 수 없음 관리자
41 SymSrv – 파일을 찾을 수 없음 관리자
42 SymSrv – 액세스 거부됨 관리자
43 SymSrv – 경로가 너무 깁니다. 관리자
49 SymSrv – 오류 코드 관리자
90 잠금 경합 작동
100 일반 중요 메시지 Analytic
101 일반 오류 메시지 Analytic
102 일반 경고 메시지 Analytic
103 일반 정보 메시지 Analytic
104 일반 분석 메시지 Analytic
105 일반 디버그 메시지 디버그

기호 서버 프록시 구성

SymProxy는 다음 레지스트리 키 영역에 구성 설정을 저장합니다.

HKLM/Software/Microsoft/Symbol Server Proxy

이 위치에서 SymProxy는 전역 설정과 업스트림 기호 저장소의 기호 경로를 가져옵니다.

앞에서 설명한 대로 사용자 지정한 symproxy.reg 파일에서 병합하여 이 키를 만들 수 있습니다.

기호 서버 프록시 키

기호 서버 프록시 레지스트리 키는 다음과 같은 전역 설정(모든 REG_DWORD)을 지원합니다. 애플리케이션 풀을 재활용하여 설정을 라이브로 적용할 수 있습니다. 새 w3wp.exe 프로세스가 만들어지고 새 값을 읽습니다. 이전 w3wp.exe 프로세스에 대한 보류 중인 모든 요청이 완료되면 이전 w3wp.exe 프로세스가 종료됩니다. 기본적으로 IIS는 1,740분(29시간)마다 w3wp.exe 프로세스를 재활용합니다.

REG_DWORD Description
NoInternetProxy

서비스로 실행할 때 SymSrv.dll WinInet 대신 WinHTTP를 사용하여 HTTP 요청을 합니다. 따라서 서비스가 네트워크 리소스 외부에 액세스할 수 있도록 HTTP 프록시 설정을 설정해야 할 수 있습니다. netsh 프로그램을 사용하여 이 작업을 수행할 수 있습니다. "netsh.exe winhttp -?"을 입력합니다. 을 참조하세요.

기본적으로 SymProxy는 지정된 HTTP 프록시를 사용합니다. HTTP 프록시가 구성되지 않은 경우 SymProxy는 더미 프록시를 사용합니다. 이를 통해 인트라넷 내의 HTTP 사이트에 안전하게 액세스할 수 있습니다. 이로 인해 SymProxy가 안전하지 않은 사이트에 직접 연결할 수 없습니다.

  • 지정되지 않음 - (기본값) 사용 안 함 - 프록시가 사용됩니다.
  • 0 – 사용 안 함
  • 1+ – 사용

NoFilePointers

기본적으로 존재하지 않는 기호의 경우 SymProxy는 요청된 파일(로컬 캐시) 옆에 있는 file.ptr 파일을 찾습니다. 발견되면 file.ptr 파일로 지정된 위치를 반환합니다. 이 기능은 로컬 캐시가 SymStore.exe 채워지는 경우에만 필요합니다.

  • 지정되지 않음 - (기본값) 사용 안 함 - file.ptr 파일을 검색/읽습니다.
  • 0 – 사용 안 함
  • 1+ – 사용

NoUncompress

기본적으로 SymProxy는 파일을 호출자에게 반환하기 전에 다운로드한 기호의 압축을 풉니다. 이렇게 하면 클라이언트의 CPU가 감소하지만 I/O가 증가합니다.

  • 지정되지 않음 - (기본값) 사용 안 함 - 압축 해제가 발생합니다.
  • 0 – 사용 안 함
  • 1+ – 사용

NoCache

기본적으로 SymProxy는 다운로드한 기호를 가상 디렉터리의 경로로 정의된 로컬 파일 시스템에 캐시합니다.

  • 지정되지 않음 - (기본값) 사용 안 함 - 캐싱 발생
  • 0 – 사용 안 함
  • 1+ – 사용

MissTimeout

업스트림 기호 서버를 다시 쿼리하지 않고 누락된 기호가 누락된 것으로 보고되는 시간 제한 기간(초)입니다.

누락은 UTC 기반 시간과 연결됩니다. 파일에 대한 후속 요청은 N초 동안 즉시 거부됩니다.

N초 후 파일에 대한 첫 번째 요청으로 인해 업스트림 기호 저장소가 다시 쿼리됩니다.

성공하면 기호 파일이 반환되고 누락이 삭제됩니다.

실패 시 누락이 현재 시간(UTC)으로 이동하여 새 시간 제한 기간을 시작합니다.

"Miss Cache" 성능 카운터를 사용하여 누락을 모니터링합니다.

  • 지정되지 않음 - (기본값) 300초/5분
  • 0 – 기능 사용 안 함
  • N – 시간 제한은 N초 동안 지속됩니다.

MissAgeCheck

미스 에이지 검사 사이의 기간입니다. Miss 캐시가 검사되고 MissAgeTimeout 초보다 오래된 레코드가 제거됩니다.

현재 통계는 이벤트 ID 4를 사용하여 이벤트 로그에 저장됩니다.

  • 지정되지 않음 - (기본값) 3600초/1시간
  • 0 – 기능 사용 안 함
  • N – 검사 사이의 기간(N초)

MissAgeTimeout

각 미스 캐시 항목의 제거 시간 제한입니다. 항목은 이 기간 동안 요청의 복종으로 인해 제거됩니다.

  • 지정되지 않음 - (기본값) 86400초/1일
  • 0 – 기능 사용 안 함
  • N – 항목의 시간 제한(N초)

NoLongerIndexedAuthoritive

사용하도록 설정하면 NoLongerIndexed의 file.ptr 응답이 모든 기호 저장소에서 신뢰할 수 있는 것으로 처리됩니다.

파일을 인덱싱하지 않는 서버에 대한 (불필요한) 호출을 방지하려면 이 기능을 사용합니다.

  • 지정되지 않음 - (기본값) 사용 안 함
  • 0 – 사용 안 함
  • 1+ – 사용

RetryAppHang

업스트림 HTTP 기호 저장소에 다시 시도를 사용하도록 설정합니다. 이는 SymSrv SSRVOPT_RETRY_APP_HANG(0x80000000) 옵션과 동일합니다.

업스트림 HTTP 기호 저장소에서 'Symbol-Agent-Status' HTTP 응답 헤더를 통해 0x80070512/HRESULT_FROM_WIN32(ERROR_APP_HANG) 오류 코드를 받으면 소켓이 열린 상태로 유지되고 GET이 'N'시간까지 반복됩니다.

SymProxy는 동일한 URI에 대한 여러 요청을 병합합니다. 보류 중인 요청이 25초에 도달하면 SymProxy는 'Symbol-Agent-Status' HTTP 응답 헤더를 통해 호출자에게 0x80070512 반환하지만 백그라운드에서 작업을 계속합니다.

클라이언트는 SymSrv에서 SSRVOPT_RETRY_APP_HANG 옵션을 사용하도록 설정하여 (추가) 긴 요청이 지원되도록 해야 합니다. 기본적으로 재시도 업스트림 연결합니다.

SymProxy는 SymSrv가 HTTP 기호 저장소에 사용하는 (기본값) 30초 제한 시간에 소켓이 닫히기 전에 응답이 이루어지도록 응답 시간 제한을 25초로 기본 설정합니다. 이후 버전의 SymSrv는 'Symbol-Agent-Receive-Timeout' HTTP 요청 헤더(mSec)를 통해 구성된 HTTP 시간 제한 값을 보냅니다. 이 HTTP 요청 헤더를 제공하는 경우 이 값은 25초 기본값 대신 사용됩니다.

  • 지정되지 않음 - (기본값) 사용 안 함
  • 0 – 사용 안 함
  • N – 다시 시도

UriFilter

URI 필터링을 사용하도록 설정합니다. 이는 SymSrv SSRVOPT_URI_FILTER(0x20000000) 옵션과 동일합니다.

URI 필터링은 모든 업스트림 기호 저장소에 대한 다양한 요청을 줄입니다. 값은 비트 마스크입니다.

HTTP - SSRVURI_HTTP_MASK(0x0F)

  • 0x01 - SSRVURI_HTTP_NORMAL - 예: http://symbols/.../foo.pdb
  • 0x02 - SSRVURI_HTTP_COMPRESSED - 예: http://symbols/.../foo.pd_
  • 0x04 - SSRVURI_HTTP_FILEPTR - 예: http://symbols/.../file.ptr

UNC - SSRVURI_UNC_MASK(0xF0)

  • 0x10 - SSRVURI_UNC_NORMAL - 예: \\MyServer\Symbols\...\foo.pdb
  • 0x20 - SSRVURI_UNC_COMPRESSED - 예: \\MyServer\Symbols\...\foo.pd_
  • 0x40 - SSRVURI_UNC_FILEPTR - 예: \\MyServer\Symbols\...\file.ptr

UriTiers

URI 계층을 사용하도록 설정합니다. 이는 SymSrv SSRVOPT_URI_TIERS(0x40000000) 옵션과 동일합니다.

URI 계층은 모든 업스트림 기호 저장소에서 사용되는 계층 스키마를 강제합니다. 설정되지 않은 경우 스키마를 확인하려면 추가 요청이 필요합니다. 루트에 있는 'index2.txt'의 존재는 2계층 레이아웃을 나타냅니다.

1계층 저장소의 형식은 /widget.dll/<index>/widget.dll|widget.dl_|file.ptr입니다.

2계층 저장소의 형식은 /wi/widget.dll/<index>/widget.dll|widget.dl_|file.ptr입니다.

  • 지정되지 않음 - (기본값) 사용 안 함
  • 0 – 사용 안 함
  • 1 - 1계층 기호 저장소
  • 2 - 2계층 기호 저장소

외부 네트워크 리소스 액세스

SymSrv를 SymProxy와 함께 사용하면 서비스로 실행되고 WinHTTP API를 사용하여 HTTP 연결을 통해 기호에 액세스합니다. 이는 이 목적을 위해 WinInet를 사용하는 일반적인 동작과 다릅니다.

따라서 이 서비스가 외부 네트워크 리소스에 액세스할 수 있도록 HTTP 프록시 설정을 설정해야 할 수 있습니다. 다음 방법 중 하나를 사용하여 이러한 설정을 구성합니다.

  • Netsh 도구(netsh.exe)를 사용합니다. 지침은 명령 프롬프트 창에 다음을 입력합니다.

    netsh winhttp -? 
    

SymProxy의 기본 동작은 ProxyCfg 또는 Netsh에서 지정한 HTTP 프록시를 사용하는 것입니다. HTTP 프록시가 구성되지 않은 경우 SymProxy는 더미 프록시를 사용하여 인트라넷 내의 보안 HTTP 사이트에 대한 액세스를 허용합니다. 부작용으로, 이 기술은 SymProxy가 외부 인터넷에 대한 직접 연결을 사용할 수 없도록 합니다. SymProxy가 인터넷에 직접 연결하여 작동하도록 허용하려면 레지스트리의 기호 서버 프록시 키에 NoInternetProxy라는 REG_DWORD 값을 만듭니다. NoInternetProxy 값을 1로 설정하고 ProxyCfg로 표시된 HTTP 프록시가 없는지 확인합니다.