为 Windows Server 2008 64 位或 Windows Server 2008 R2 系统手动重新生成性能计数器

本文提供的帮助可解决一些性能计数器库损坏并需要重建的问题。

原始产品版本:   Windows Server 2012 R2
原始 KB 数:   2554336

症状

使用性能监视器工具时,某些计数器可能丢失或不包含计数器数据。 性能计数器库可能会损坏,需要重建。

您可能会在应用程序日志中看到以下错误:

日志名称:应用程序
源: Microsoft-Windows-W3SVC-PerfCounters
事件 ID:2002
级别:错误
关键字:经典
说明:
设置 Web 服务计数器失败,请确保正确注册了 Web 服务计数器。

日志名称:应用程序
源: IISInfoCtrs
事件 ID:1001
级别:错误
关键字:经典
说明:
无法从注册表中读取第一个计数器索引值。 注册表返回的错误代码是数据 DWORD 0。

原因

如果某些可扩展计数器损坏了注册表,或者 Windows Management Instrumentation (基于 WMI) 的程序修改注册表,则可能会出现此行为。

解决方案

若要解决此问题,请使用以下方法。

确保未在注册表中禁用计数器

可以通过注册表设置禁用计数器。 检查以下注册表位置以确保未禁用计数器:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\%servicename%\Performance

备注

%servicename% 表示具有性能计数器的任何服务。 例如: PerfDisk、PerfOS 等。

这些位置中的 DisablePerformanceCounters 可能有注册表项。 根据 " 禁用性能计数器" 一文,应将此值设置为0。 如果值是0之外的任何值,则可能会禁用计数器。

  • 值为1表示已禁用计数器。
  • 值为2表示禁用了32位计数器。
  • 值为4表示禁用了64位计数器。

重建包括可扩展和第三方计数器的所有性能计数器

若要重新生成包括可扩展和第三方计数器在内的所有性能计数器,请在管理命令提示符处键入以下命令。 在每个命令后按 enter

  1. 重建计数器:

    cd c:\windows\system32
    lodctr /R
    cd c:\windows\sysWOW64
    lodctr /R
    
  2. 使用 Windows Management Instrumentation 重新同步计数器 (WMI) :

    WINMGMT.EXE /RESYNCPERF
    
  3. 停止并重新启动 "性能日志和警报" 服务。

  4. 停止并重新启动 Windows Management Instrumentation 服务。

  5. 创建新的数据收集器集 (不使用现有的数据收集器集) 。

有时,运行 lodctr /R 可能不会恢复所有计数器。 如果您注意到这种情况,请验证文件是否 c:\windows\system32\PerfStringBackup.INI 包含正确的信息。 您可以从相同的计算机复制此文件,以便还原计数器。 此文件从计算机到计算机的差异可能稍有不同,但如果您注意到大小的差异很大,则可能缺少信息。 在替换前始终创建备份副本,并且无法保证从另一台计算机复制此文件将还原所有计数器。 如果可能,请将文件与计算机备份进行比较,以查看文件大小是否已在某个时间点减少。

对于许多计数器,安装性能计数器的 ini 文件的位置在下 windows\winsxs ,例如,用于 IIS 的位置如下:

如果您看到以下错误:

日志名称:应用程序
源: Microsoft-Windows-W3SVC-PerfCounters
事件 ID:2002
级别:错误
关键字:经典
说明:
设置 Web 服务计数器失败,请确保正确注册了 Web 服务计数器。

日志名称:应用程序
源: IISInfoCtrs
事件 ID:1001
级别:错误
关键字:经典
说明:
无法从注册表中读取第一个计数器索引值。 注册表返回的错误代码是数据 DWORD 0。

你将需要在目录中使用计数器安装 ini 文件 c:\Windows\winsxs

您需要修复的计数器有可能存在多个文件夹。 在这些情况下,您可能需要使用试用和错误来查找正确的 ini 文件。

例如,

Dir C:\Windows\winsxs\amd64_microsoft-windows-iis-metabase*

在此示例中,尝试使用以下各项从每个文件夹安装 infoctrs.ini:

Lodtr infoctrs.ini

成功后,您将在应用程序日志中看到以下条目:

日志名称:应用程序
源: Microsoft-Windows-LoadPerf
事件 ID:1000
级别:信息
说明:
已成功加载 inetinfo (inetinfo) 服务的性能计数器。 "数据" 部分中的记录数据包含分配给此服务的新索引值。

您需要对以下计数器执行相同操作:

amd64_microsoft-windows-w3svc *

lodctr w3ctrs.ini

之后,您将看到:

日志名称:应用程序
源: Microsoft-Windows-LoadPerf
事件 ID:1000
级别:信息
说明:
W3SVC (World Wide Web 发布服务) 服务的性能计数器已成功加载。 "数据" 部分中的记录数据包含分配给此服务的新索引值。

执行这些步骤后,重新运行 WINMGMT /RESYNCPERF

更多信息

有关 Windows Server 2008 和 Vista 系统上的 PerfDisk.dll 的已知问题的修补程序。 此修补程序已在这些操作系统的 Service Pack 2 中进行了汇总。 如果你在 Service Pack 1 或更低,请应用修补程序961382。

参考