配置注册表

SymProxy 将其设置存储在此注册表项中。

HKLM/Software/Microsoft/Symbol Server Proxy

此注册表项控制从中查找要存储在网站中的符号的位置、日志记录级别以及 SymProxy 是否通过与网络的直接连接进行操作。 可以通过运行 SymProxy 注册工具 (Symproxy.reg) Windows 调试工具来创建此密钥。 在命令提示符下键入 symproxy.reg ,或在 Windows 资源管理器中双击它。

这会为设置添加以“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 注册表文件假定虚拟目录名称为 Symbols,并将符号路径配置为使用 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 中的 Web 目录条目。

Web 目录

对于用作符号存储的 IIS 中生成的每个虚拟目录,必须在以下注册表项的 Web 目录 子项下设置注册表项。

HKLM/Software/Microsoft/Symbol Server Proxy

编辑符号存储虚拟目录的注册表项

  • 编辑 SymbolPath 的内容,以包含 SymProxy 符号存储使用的所有符号存储。 如果正在使用多个符号存储,请使用分号分隔它们。 每个值最多支持 10 个存储。 HTTP 路径必须包含 https:// 前缀,UNC 路径必须包含 前缀 \\

例如,如果其中一个虚拟目录称为 Symbols,并且它访问的符号存储位于 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 符号存储。

  • 在 Web 目录下与虚拟目录名称匹配的每个键中,都需要创建一个名为 SymbolPath 的REG_SZ。 值包含将用于填充 SymProxy 符号存储的所有上游符号存储。

  • 最多支持 10 个条目。

  • 用分号分隔条目。

  • UNC 路径需要包含“\\”前缀

  • HTTP 路径需要包含“https://”前缀

  • 将值从“最低”到“最贵”进行排序。

    • 你需要在计算中平衡使用性能目标与服务器和数据通信成本。

    • 通常,将本地 SMB/HTTP 服务器置于 Internet 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 说明 Channel
1 ISAPI 筛选器的开头 管理员
2 停止 ISAPI 筛选器 管理员
3 ISAPI 筛选器的配置 管理员
4 缺少缓存统计信息 管理员
10 URL 请求 - 本地缓存命中 可运行
11 URL 请求 - 本地缓存未命中 可运行
20 通过 SymSrv 下载符号 可运行
30 缺少关键符号 管理员
31 缺少关键图像 管理员
40 Symsrv - 找不到路径 管理员
41 Symsrv - 找不到文件 管理员
42 SymSrv - 拒绝访问 管理员
43 Symsrv - 路径太长 管理员
49 SymSrv - 错误代码 管理员
90 锁争用 可运行
100 常规关键消息 分析
101 常规错误消息 分析
102 常规警告消息 分析
103 常规信息性消息 分析
104 常规分析消息 分析
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 说明
NoInternetProxy

作为服务运行时,SymSrv.dll 使用 WinHTTP 而不是 WinInet 发出 HTTP 请求。 因此,可能需要设置 HTTP 代理设置,以便服务可以访问外部网络资源。 可以使用 netsh 程序执行此操作。 键入“netsh.exe winhttp -?” 以获取说明。

默认情况下,SymProxy 使用指定的 HTTP 代理。 如果未配置 HTTP 代理,SymProxy 将使用虚拟代理。 这样就可以安全地访问 Intranet 中的 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) 开始新的超时期限的时间。

使用“未命中缓存”性能计数器监视未命中数。

  • 未指定 - (默认) 300 秒/5 分钟
  • 0 – 功能已禁用
  • N – 超时持续 N 秒

MissAgeCheck

错过年龄检查之间的时间段。 扫描 Miss 缓存并删除早于 MissAgeTimeout 秒的记录。

当前统计信息使用事件 ID 4 保存到事件日志中。

  • 未指定 - (默认) 3600 秒/1 小时
  • 0 – 功能已禁用
  • N – 检查之间的时间段(以 N 秒为单位)

MissAgeTimeout

清除每个 Miss 缓存条目的超时。 由于在整个时间段内对条目的任何请求均无效,因此会清除该条目。

  • 未指定 - (默认) 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 将响应超时默认为 25 秒,以便在套接字关闭之前做出响应, (默认) SymSrv 用于 HTTP 符号存储的 30 秒超时。 更高版本的 SymSrv 通过 mSec) 中的“Symbol-Agent-Receive-Timeout”HTTP 请求标头 (发送其配置的 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 将使用虚拟代理来允许访问 Intranet 中的安全 HTTP 站点。 作为副作用,此技术阻止 SymProxy 处理与外部 Internet 的直接连接。 如果希望允许 SymProxy 通过与 Internet 的直接连接进行操作,请在注册表的符号服务器代理服务器密钥中创建一个名为 NoInternetProxy 的REG_DWORD值。 将 NoInternetProxy 的值设置为 1,并验证 ProxyCfg 是否未指示 HTTP 代理。