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

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

适用于: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. 如果存在,请从 Performance 子项 (中删除以下值) :

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

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

    注意

    从注册表中的 Performance 子项中删除值可能会导致任何已安装.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. Restart your computer.

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

cd \windows\system32
lodctr /R

注意

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

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

注意

  • 如果运行的是群集或数据中心产品,则必须故障转移节点才能刷新计数器列表。 在为基本计数器和可扩展 计数器执行“重新添加可扩展计数器 ”下的步骤后,必须执行此操作。
  • 在运行添加自身性能计数器的应用程序(如 Exchange 或 SQL Server)的系统上,可能未找到%Systemroot%\System32用于加载性能计数器的.ini文件。 这些.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 的系统上的所有服务的计数器,则可能会有一个损坏的管理服务器。 配置服务、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

注意

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