配置注册表
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。 可以在注册表编辑器的以下屏幕截图中看到这一点。
在此示例中,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 直接连接到不安全的站点。
|
NoFilePointers | 默认情况下,对于不存在的符号,SymProxy 将在本地缓存) (查找请求的文件旁边的 file.ptr 文件。 如果找到,它将返回 file.ptr 文件指定的位置。 仅当 SymStore.exe 填充本地缓存时,才需要此功能。
|
NoUncompress | 默认情况下,SymProxy 将在将文件返回到调用方之前解压缩下载的符号。 这会减少客户端的 CPU,但会增加 I/O。
|
NoCache | 默认情况下,SymProxy 会将下载的符号缓存到由虚拟目录的路径定义的本地文件系统。
|
MissTimeout | 超时期限(以秒为单位),其中缺失符号报告为缺失,而无需重新查询上游符号服务器。 未命中与基于 UTC 的时间相关联。 对文件的后续请求将立即拒绝 N 秒。 N 秒后对文件的第一个请求会导致重新查询上游符号存储。 成功后,将返回符号文件并删除未命中。 失败时,未命中数将移动到当前 (UTC) 开始新的超时期限的时间。 使用“未命中缓存”性能计数器监视未命中数。
|
MissAgeCheck | 错过年龄检查之间的时间段。 扫描 Miss 缓存并删除早于 MissAgeTimeout 秒的记录。 当前统计信息使用事件 ID 4 保存到事件日志中。
|
MissAgeTimeout | 清除每个 Miss 缓存条目的超时。 由于在整个时间段内对条目的任何请求均无效,因此会清除该条目。
|
NoLongerIndexedAuthoritive | 启用后,NoLongerIndexed 的 file.ptr 响应将被视为跨所有符号存储的权威。 使用此方法可避免 (对不为文件编制索引的服务器调用不必要的) 调用。
|
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 秒默认值。
|
UriFilter | 启用 URI 筛选。 这等效于 SymSrv SSRVOPT_URI_FILTER (0x20000000) 选项。 URI 筛选可减少对所有上游符号存储区的请求。 这些值是位掩码。 HTTP - SSRVURI_HTTP_MASK (0x0F)
UNC - SSRVURI_UNC_MASK (0xF0)
|
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
|
访问外部网络资源
当 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 代理。