本文說明如何手動重建性能計數器連結庫值。
原始 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
檔案。
若要手動重建基底性能計數器連結庫,請遵循下列步驟:
展開Perfc009.dat檔案和Perfh009.dat檔案。 這些檔案位於 Windows 安裝光碟上。使用 PowerShell Cmdlet 或使用
Dism
命令掛接 Windows 安裝光碟 (.wim) 檔案之後,會在 和DriveLetter:\i386\perfh009.da_
找到DriveLetter:\i386\perfc009.da_
壓縮檔。 取代資料夾中的%Systemroot%\System32
檔案。啟動註冊表編輯器,然後在登錄中找出下列機碼:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Perflib
在登錄中,將 [最後計數器] 值變更為 1846 (decimal),並將 [上次說明] 值變更為 1847 (decimal)。
找出下列登錄機碼來搜尋具有 效能 子機碼的服務:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
從 [效能] 子機碼中移除下列值(如果有的話):
- 第一個計數器
- 第一個說明
- 最後一個計數器
- 上次說明
您也可以使用 Exctrlst.exe 工具來找出已安裝的性能計數器動態連結庫檔案 (DLL)。 然後存取登錄以移除 DWORD 值。 您現在有只包含系統基底計數器的可運作效能登錄。
注意
從登錄中的 Performance 子機碼中移除這些值,可能會導致任何已安裝的 .NET Framework 應用程式在下一次啟動時無法運作。 如果發生這種情況,請使用
lodctr /R
[重新新增可延伸計數器] 區段中的 命令來重建性能計數器。 如果您在啟動 .NET Framework 應用程式時繼續發生問題,請參閱 本文中的重新安裝自定義 .NET Framework 元件性能計數器 一節。
重新新增可延伸計數器
您必須從服務清單中再次新增可延伸計數器。 在這麼做之前,您必須識別用來載入計數器的.ini檔案:
開啟命令提示字元視窗。
在命令提示字元中,輸入
cd %Systemroot%\System32
,然後按 ENTER。在命令提示字元中,輸入
findstr drivername *.ini
,然後按 ENTER。請注意清單中每個驅動程式名稱的.ini檔名。
在命令提示字元中
lodctr <inifile>
,輸入 命令,然後按 ENTER。注意
在此命令中, <inifile> 代表您要重載之驅動程式的.ini檔名。
例如,如果您想要重載 ASP 驅動程式,您在步驟 4 中指出的清單會顯示Axperf.ini是 ASP 驅動程式的.ini檔案 (
axperf.ini:drivername=ASP
)。 若要重載 ASP 驅動程式,請在命令提示字元輸入lodctr axperf.ini
,然後按 ENTER。針對清單中的每個.ini檔案重複步驟 5。
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 安裝程式工具 (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
注意
您必須擁有計算機上的系統管理許可權,才能順利執行這些命令。