2008年11月13日 星期四

吃掉所有CPU資源的 svchost.exe

過年回到家後發現,家裡的 PC 和老媽的 Notebook ,莫名其妙的都會被 svchost.exe 佔用掉所有的 CPU 資源(難怪老媽一直跟我抱怨新買的 Notebook 總是跑的很慢 XD)。一看到這個情況,腦中馬上浮現「不會是中毒了吧」的念頭,於是在 CPU 使用率總是停在100%的狀態下,花了半天的時間才把兩台電腦做掃毒、掃木馬以及Windows Update。結果當然,事情不是憨人想的那麼簡單,好幾個小時換來的代價就是,連個子兒都沒掃到,神秘的svchost.exe仍舊霸道地侵佔我的CPU。無可耐何之下只好求助Google大神,試了好多種解法都禺用,不過總算是皇天不負苦心人,最後還是讓我找到了解決的方法。


svchost.exe 吃掉所有 CPU 資源的原因很多,不過我的狀況都是在執行 Windwos Update 時發生的(或是自動更新服務 Automatic Updates 執行時)。因此解決方法主要就是把 Windows 的自動更新重設一次,步驟如下:

一、首先檢查系統服務的狀態。
1. 點「開始」–>「執行」,輸入「services.msc」後按「確定」。
2. 在服務「Automatic Updates」上點二下。
3. 點選「登入」頁籤,確定登入身分為「本機系統帳戶」且「允許服務與桌面互動」“沒有”被選取。
4. 確認服務已在目前的「硬體設定檔」中被啟用,如果沒有,按下「啟用」按鈕。
5. 點選「一般」頁籤,確定「啟動類型」為「自動」,然後按下「啟動」按鈕以啟動服務。
6. 對「Background Intelligent Transfer Service (BITS) 」服務重覆 2 ~ 5 的步驟。

二、接著重新註冊 Windwos Update 的元件。
1. 點選「開始」–>「執行」。
2. 輸入「REGSVR32 WUAPI.DLL」後按 Enter。
3. 當看到 “DllRegisterServer 在 WUAPI.DLL 成功” 的訊息後按下「確定」。
4. 重覆上述步驟重新註冊下列元件
REGSVR32 WUAUENG.DLL
REGSVR32 WUAUENG1.DLL
REGSVR32 ATL.DLL
REGSVR32 WUCLTUI.DLL
REGSVR32 WUPS.DLL
REGSVR32 WUPS2.DLL
REGSVR32 WUWEB.DLL

三、最後清除可能已損壞了的 Windows Update 暫存目錄。
1. 點「開始」–>「執行」,輸入「cmd」後按「確定」。
2. 在命令提示字元中鍵入以下指令。(若出現錯誤訊息請先重開機後再報執行一次)
net stop WuAuServ
2. 點「開始」–>「執行」,輸入「%windir%」後按「確定」。
3. 找到「SoftwareDistribution」並更名為「SDold」。
4. 點「開始」–>「執行」,輸入「cmd」後按「確定」,並在在命令提示字元中鍵入以下指令。
net start WuAuServ

四、大功告成!


補充:
此篇文章在來源的部落格中,有人反應 Microsoft 有針對這個問題推出 Hotfix,不過還沒有機會測試過。
http://support.microsoft.com/kb/927891/zh-tw

http://www.yannicafe.info/wp/
http://www.yannicafe.info/wp/2007/02/18/61.html

如何分析系統自動重新啟動的原因




 最近公司有一台 Server 常發生莫名自動重新開機,請原廠工程師來檢測硬體也沒有任何問題,原廠工程師在 Server 收集 Log 帶回分析。



 過了幾天原廠工程師打來,告知他們分析的結果,說他們根據下面圖示的錯誤訊息(STOP 0x0000003f),在 Microsoft 的 Knowledge Base 得知應該是驅動程式移除不完全,所造成系統自動會重新開機,並建議我們依照 Microsoft KB 修改機碼,重新開機啟動 Stack Traces 機制。








 在事件檢視器會出現下圖錯誤訊息,顯示系統發生意外自動重新開機的時間。







 機碼修改內容如下,修改完成後,記得要重新開機讓它生效。

Microsoft KB:http://support.microsoft.com/kb/256004/en-us

Use Registry Editor (Regedt32.exe) to view the following registry key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management

Modify the following registry value, and then restart your computer:

Value Name: TrackPtes
Value Type: REG_DWORD
Value Data: 1
Radix: Hex
 
 記得確認有「啟用錯誤報告功能」,在「系統內容 / 進階 / 錯誤報告」,此功能會在系統發生自動重新開機時,將 Memory 內的資料 Dump 出來以便分析原因。








 當下次發生再度發生自動重新開機時,便可以根據「系統內容 / 進階 / 啟動及修復 / 設定」內的「傾印檔案」進行分析自動重新開機的原因,但由於 Memory.dmp 的內容太過複雜不是一般人能夠解讀的。







 於是我們必須借助其它工具來幫我們分析-「Windbg」,此工具可以在 Microsoft 下載

http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.6.07.5.exe

1. 當系統發生藍底白字並開始 dump Memory 的資料後重新開機。
2. 正常開機後,在 Windows 目錄下會有一個 MEMORY.DMP 的檔案。
3. 安裝 Windbg,並執行 Windbg。
4. 選擇「File / symbol file path」輸入下列內容:



 SRV*c:\temp*http://msdl.microsoft.com/download/symbols



5. 然後再選擇「File / open crash dump」,開啟 Windows 目錄下的 MEMORY.DMP
6. 在”Probably caused by”顯示是什麼檔案可能造成發生此問題。






7. 出現”Use !analyze -v to get detailed debugging information.”,輸入「!analyze -v」有更詳細的分析。

注意:1. Windbg 在使用中會需要連上網路。
   2. 有關 Windbg 的詳細操作我也不是很懂,所以不用發問任何有關 Windbg 的問題。



參考文件:
http://forum.fdzone.org/archiver/?tid-1739313.html

 

Recovery Console ( 復原主控台 ) 簡易說明

 「復原主控台」是在安裝 XP 光碟時的其中一個選項,平常應該不太會去注意,也很少人會去用到這個功能。
 復原主控台,主要是作業系統發生問題,無法開機時,而使用類似 DOS 的環境進行修復,不過這個環境有兩個限制。


1. 不能複製資料到 Floppy 或 USB Disk 外接磁碟。
2. 除 C:\Windows 目錄下,其餘目錄皆不可進入,限 Boot Partition。


 首先先檢查「本機安全性原則」裡有兩個項目與復原主控台有關,開啟「控制台 / 系統管理工具 / 本機安全性原則」。


 選擇「安全性設定 / 本機原則 / 安全性選項」:
復原主控台:允許自動系統管理登入
(進入復原主控台自動以 Administrator 帳號登入)
預設:已啟用
實務:已停用(建議,避免被人使用復原主控台登入取得資料)
實務設定是針對 Server 端建議停用,個人電腦其實預設即可,除非有這方面考量才需更改設定。


復原主控台:允許軟碟複製以及存取所有磁碟和所有資料夾
(允許執行 Set 指令解除復原主控台預設兩個限制)
預設:已啟用
實務:已啟用


 當不幸發生問題,真的必須進入復原主控台時,如何將上述兩個限制條件解除,指令如下(好像有分大小寫):
set AllowAllPaths = True
(允許進入其他目錄)


Set AllowRemovableMedia = True
(允許將資料寫入外部磁碟)


 另外在復原主控台下常用指令如下:
listsvc - 列出裝置及服務的開機狀態
disable [device 或 Service 名] - 停止裝置或服務
enable [device 或 Service 名] Service_Boot_Start - 啟動裝置或服務
fixmbr - 修復 MBR
fixboot - 修復開機磁區
exit - 離開 Recovery Console,並重新開機