跟踪高 Windows Server CPU 使用率
我有一個 Windows 2003 伺服器(64 位)在遠端託管設施上作為 VM 執行。(我只是租用了這個特定的虛擬實例,所以我不知道它執行在什麼樣的底層硬體上,除了它向 VM 展示自己有 8 個 CPU 可用。)
問題是從大約 1-2 週前開始,taskmgr.exe 開始顯示 60% 的總 CPU 負載,均勻分佈在 8 個 proc 中的 7 個上,但有一個 proc 達到 100%。當它很忙時,伺服器的響應就像你期望的那樣:它是一條狗。我顯然想追查造成這種情況的原因。
問題是每個程序的 CPU %,如 taskmgr.exe 或 procexp.exe 所示,加起來不會接近 100%。換句話說,系統空閒程序大約在 40% 左右,其他幾個程序可能加起來還有 10%,但另外 50% 是從哪裡來的呢?換句話說,某些東西佔用了我 50% 的 CPU,並且它沒有在任務管理器中的任何位置列出。(“顯示所有使用者的程序”被選中。)
我已經嘗試停止所有我能停止的服務,但它們都沒有對 CPU 產生影響。重新啟動伺服器沒有任何區別:當我重新登錄時,CPU 再次被鎖定。Procexp.exe 沒有顯示任何異常。
我可以想到兩種可能的解釋: (1) 有某種 rootkit 進入了我的伺服器,並從程序列表中隱藏了自己;或者 (2) taskmgr.exe 突然(並且是第一次)在盒子的其餘部分顯示使用率,而不僅僅是這個特定的實例(儘管這看起來不正確)。
有什麼其他建議可以追踪這個嗎?
我看到你應該研究兩件可能的事情。
首先,每當我聽到有人談論高 CPU 負載,而無法辨識任何有問題的程序時,我的第一個猜測是 IO 爭用。當存在高 IO 爭用時,程序堆積在不間斷的睡眠狀態,使作業系統的程序調度程序充滿等待數據從磁碟讀取或寫入磁碟的任務。單個程序不會顯示為具有高 CPU 負載。您需要查看為該 VM 提供服務的磁碟子系統的性能統計資訊,以查看是否存在許多可能的 IO 瓶頸中的任何一個或多個瓶頸。
其次,您提到有一個 8-CPU 虛擬機。你確定你需要那麼多核心嗎?你確定?好吧,再問問自己你是否真的需要它們。原因是在虛擬化下,多個核心的工作方式與在裸機上執行的方式不同。唯一一次你的虛擬機將在主機上獲得 CPU 時間是當有 8 個核心可用時。如果 8 個核心不可用,則不會獲得 CPU 週期。不用說,在即使是中等負載的主機上,hypervisor 為 8 核 VM 調度 CPU 時間比為單核 VM 調度 CPU 時間要困難得多。出於這個原因,我建議堅持使用單核,除非它對應用程序 100% 絕對必要,此時我可能會分配 2 個或最多 4 個核,在這種情況下,我會確保有
那麼 - 你可以有一個 rootkit 嗎?當然,可能是這樣,你最好做一些盡職調查來確定是否是這樣。但是,如果沒有,您肯定還有其他一些事情要看。