手动重新生成性能计数器库值

本文介绍如何手动重新生成性能计数器库值。

适用于:Windows 10 - 所有版本,Windows Server 2012 R2
原始 KB 编号: 300956

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,请务必严格按照这些步骤操作。 为了加强保护,应先备份注册表,再进行修改。 如果出现问题,可以还原注册表。 有关如何备份和还原注册表的详细信息,请参阅如何备份和还原 Windows 中的注册表

使用系统监视器工具时,某些计数器可能缺失或不包含计数器数据。 性能计数器库的基本集可能会损坏,并且可能需要重新生成。 此外,可能需要重新生成) 计数器或任何可扩展计数器创建的任何自定义 (Microsoft .NET Framework应用程序。

在以下情况下,可能会出现此行为:

  • 某些可扩展计数器会损坏注册表。
  • 某些 Windows Management Instrumentation (基于 WMI) 的程序修改注册表。

重新生成基本性能计数器

可扩展计数器信息存储在以下两个位置:

  • 注册表子项: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Perflib\009

  • 文件和 %Systemroot%\System32\Perfc009.dat%Systemroot%\System32\Perfh009.dat 文件。

若要手动重新生成基本性能计数器库,请执行以下步骤:

  1. 展开 Perfc009.dat 文件和 Perfh009.dat 文件。 这些文件位于 Windows 安装光盘上。压缩文件位于 DriveLetter:\i386\perfc009.da_ 和 处 DriveLetter:\i386\perfh009.da_。 替换 文件夹中的文件 %Systemroot%\System32

  2. 启动注册表编辑器,然后在注册表中找到以下项:
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Perflib

  3. 在注册表中,将 “最后一个计数器” 值更改为 1846 (十进制) ,并将 “最后帮助” 值更改为 1847 (十进制) 。

  4. 找到以下注册表项以搜索具有 “性能” 子项的服务:
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services

  5. 如果存在) ,请从 “性能 ”子项 (中删除以下值:

    • 第一个计数器
    • 第一个帮助
    • 最后一个计数器
    • 上次帮助

    还可以使用 Exctrlst.exe 工具查找性能计数器动态链接库文件 (已安装的 DLL) 。 然后访问注册表以删除 DWORD 值。 现在,你有一个仅包含系统基计数器的可行性能注册表。

    注意

    从注册表中的“性能”子项中删除值可能会导致任何已安装.NET Framework应用程序在下一次启动时无法正常工作。 如果发生这种情况,请使用lodctr /R重新添加可扩展计数器部分中的 命令重新生成性能计数器。 如果在启动.NET Framework应用程序时仍遇到问题,请参阅本文中的重新安装自定义.NET Framework程序集性能计数器部分。

重新添加可扩展计数器

必须再次从服务列表中添加可扩展计数器。 执行此操作之前,必须标识用于加载计数器的 .ini 文件:

  1. 打开命令提示符窗口。

  2. 在命令提示符下,键入 cd %Systemroot%\System32,然后按 ENTER。

  3. 在命令提示符下,键入 findstr drivername *.ini,然后按 ENTER。

  4. 记下列表中每个驱动程序名称的 .ini 文件的名称。

  5. 在命令提示符下,键入 lodctr <inifile> 命令,然后按 Enter。

    注意

    在此命令中, <inifile> 表示要重新加载的驱动程序的 .ini 文件的名称。

    例如,如果要重新加载 ASP 驱动程序,在步骤 4 中记录的列表显示,Axperf.ini 是 ASP 驱动程序 (axperf.ini:drivername=ASP) 的 .ini 文件。 若要重新加载 ASP 驱动程序,请在命令提示符处键入 lodctr axperf.ini ,然后按 Enter。

  6. 对列表中的每个 .ini 文件重复步骤 5。

  7. Restart your computer.

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

cd \windows\system32
lodctr /R

注意

  • /R 为大写。 必须在计算机上具有管理权限才能成功执行此命令。
  • 在运行 32 位版本的 Windows 的计算机上, Lodctr /R:<filename> 命令是使用文件名还原性能计数器注册表字符串和信息的标准方法。

Windows Server 会重新生成所有计数器,因为它读取英语操作系统文件夹中的所有 .ini 文件 C:\Windows\inf\009

注意

  • 如果运行的是群集或数据中心产品,则必须故障转移节点以刷新计数器列表。 在执行重新 添加基计数器和可扩展计数器的可扩展计数器 下的步骤后,必须执行此操作。
  • 在运行添加自己的性能计数器的应用程序(如 Exchange 或 SQL Server)的系统上,用于加载性能计数器的 .ini 文件可能不位于 中%Systemroot%\System32。 通常可以在应用程序文件夹结构下找到这些 .ini 文件。
  • 如果使用前面的步骤时收到有关性能库的错误消息,可能需要卸载并重新加载 IIS 性能动态链接库, (DLL) 。
  • 如果在启动.NET Framework应用程序时仍然遇到问题,请参阅重新安装自定义.NET Framework程序集性能计数器部分。

重新安装自定义.NET Framework程序集性能计数器

如果在执行此处列出的过程后启动.NET Framework应用程序时仍遇到问题,则可能必须重新生成自定义.NET Framework应用程序的性能计数器。 为此,请使用 /i .NET Framework Installer Tool (Installutil.exe) 中的 选项。 必须知道创建性能计数器的 DLL 文件的文件名。

如果遵循这些过程并从注册表中删除已安装 Microsoft System Center Operations Manager 2007 的系统上的所有服务的计数器,则可能是管理服务器损坏。 Config Service、SDK 服务和数据库写入模块的计数器不以 INI 文件中的可扩展计数器的形式提供。 而是在安装时注册它们。 因此,尝试启动 System Center Operations Manager 2007 时,可能会收到类似于以下示例的错误消息,因为缺少性能计数器:

Event Type: Error  
Event Source: OpsMgr SDK Service  
Event Category: None  
Event ID: 26380  
Date: date  
Time: time  
User: N/A  
Computer: MOM  
Description: The System Center Operations Manager SDK Service failed due to an unhandled exception.

若要在 System Center Operations Manager 2007 中解决此问题,必须重新安装创建性能计数器的.NET Framework程序集。 为此,请使用 /i .NET Framework Installer Tool (Installutil.exe) 中的 选项重新安装以下程序集:

  • Microsoft.Mom.ConfigService.dll
  • Microsoft.Mom.Sdk.ServiceDataLayer.dll
  • Microsoft.Mom.DatabaseWriteModules.dll
  • Microsoft.EnterpriseManagement.HealthService.Modules.DataWarehouse.dll

例如,在命令提示符处,键入以下命令,然后在每个命令后按 Enter:

InstallUtil /i Microsoft.Mom.ConfigService.dll
InstallUtil /i Microsoft.Mom.Sdk.ServiceDataLayer.dll
InstallUtil /i Microsoft.Mom.DatabaseWriteModules.dll
InstallUtil /i Microsoft.EnterpriseManagement.HealthService.Modules.DataWarehouse.dll

注意

必须在计算机上具有管理权限才能成功执行这些命令。