Windows-Server-2008

域控制器上的“峰值”CPU 使用率

  • March 23, 2016

我們有兩個 Windows Server 2008 SP2(遺憾的是不是 2008 R2)域控制器在一個 150 個小型客戶端域中,它們表現出非常“峰值”的 CPU 使用率。域控制器都表現出相同的行為,並且託管在 vSphere 5.5.0、1331820 上。每隔兩三秒,CPU 使用率就會上升到 80-100%,然後迅速下降,保持低水平一兩秒,然後再上升再次。

DC3 任務管理器性能

查看虛擬機的歷史性能數據表明,這種情況至少已經持續了一年,但自 3 月以來頻率有所增加。

DC3 虛擬機性能

有問題的程序是 SVChost.exe,它包裝了 DHCP 客戶端 (dhcpcsvc.dll)、EventLog (wevtsvc.dll) 和 LMHOSTS (lmhsvc.dll) 服務。我當然不是 Windows 內部專家,但在使用 Process Explorer 查看程序時,我似乎沒有發現任何特別的問題,只是 EventLog 似乎觸發了大量的RpcBindingUnbind呼叫。

SVCHost.exe 的 DC3 程序資源管理器

在這一點上,我沒有咖啡和想法。我應該如何繼續解決這個問題?

TL;DR:EventLog 文件已滿。在 Windows Server 2008 中覆蓋條目的成本很高並且/或者實現得不是很好。

@pk。@joeqwerty 的建議,在四處詢問後,我認為很可能是一個被遺忘的監控實現正在抓取事件日誌。

我在其中一個域控制器上安裝了Microsoft 的網路監視器ProtocolName == MSRPC,並開始使用過濾器過濾 MSRPC。有很多流量,但都在我們遠端站點的 RODC 之間,不幸的是沒有使用與監聽 EventLog 程序相同的目標埠。該死!有那個理論。

為了簡化事情並使監控軟體的執行更容易,我決定從 SVCHost 解包 EventLog 服務。以下命令和域控制器的重新啟動將一個 SVCHost 程序專用於 EventLog 服務。這使得調查更容易一些,因為您沒有附加到該 PID 的多個服務。

SC config EventLog Type= own

然後我求助於ProcMon並設置了一個過濾器來排除所有不使用該 PID 的內容。我沒有看到 EventLog 嘗試打開失去的系統資料庫項的大量失敗嘗試,如此處所示的可能原因顯然糟糕的應用程序可以以極其糟糕的方式註冊為事件源)。可以預見的是,我看到了許多成功的安全事件日誌 (C:\Windows\System32\WinEvt\Logs\Security.evtx) 的 ReadFile 條目。

讀取文件安全.evtx

以下是其中一個事件的堆棧: RpcBindingUnbind

您會首先註意到 RPCBinding,然後是 RPCBindingUnbind。有很多這樣的。就像每秒數千。安全日誌真的很忙,或者Security.evtx日誌不能正常工作。

在 EventViewer 中,安全日誌每分鐘僅記錄 50-100 個事件,這似乎適合這種規模的域。該死!第二個理論是,我們在一個被遺忘的角落裡打開了一些非常冗長的事件審計的應用程序,仍然盡職盡責地偷偷溜走。即使記錄的事件率很低,仍然記錄了很多(約 250,000 個)事件。可能是日誌大小?

安全日誌-(右鍵點擊)-屬性…,最大日誌大小設置為 131,072 KB,日誌大小目前保持在 131,072 KB。選中了“根據需要覆蓋事件”單選按鈕。我認為不斷刪除和寫入日誌文件可能是一項艱鉅的工作,尤其是當它已滿時,所以我選擇了清除日誌(我保存了舊日誌以防我們稍後需要它進行審核)並讓 EventLog 服務創建一個新的空文件。結果:CPU 使用率恢復到 5% 左右的正常水平。

引用自:https://serverfault.com/questions/591405