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

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

原始 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 驱动程序的.ini文件(axperf.ini:drivername=ASP)。 若要重新加载 ASP 驱动程序,请在命令提示符处键入 lodctr axperf.ini ,然后按 Enter。

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

  7. 重新启动计算机。

若要重新生成所有性能计数器,包括 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 安装程序工具(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 安装程序工具(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

注意

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