大家都知道在Windows系統(tǒng)中svchost.exe進(jìn)程是系統(tǒng)進(jìn)程,而且會有很多個,一般來說并不會影響系統(tǒng)性能,不過某些情況下出現(xiàn)svchost.exe占用cpu高達(dá)到25%甚至50%的情況也會出現(xiàn),這時該怎么解決呢?本文由svchost.exe的運(yùn)行原理說起,然后幫助大家解決svchost.exe占用CPU高的問題。
故障圖如下:
SVCHOST.EXE 位于Windows\system32系統(tǒng)文件夾,其文件描述為“Generic Host Process for Win32 Services”。當(dāng)Windows啟動時,SVCHOST.EXE將自動檢查Windows注冊表的系統(tǒng)服務(wù)組成、構(gòu)建系統(tǒng)服務(wù)列表,然后將相關(guān) 的.DLL動態(tài)鏈接庫文件加載為具體的運(yùn)行中的系統(tǒng)服務(wù)。因此,我們可以將SVCHOST.EXE看作一個“用于加載系統(tǒng)服務(wù)的宿主程序”
由于每個SVCHOST.EXE進(jìn)程可能會加載一個或若干個系統(tǒng)服務(wù),直到所有的SVCHOST.EXE將全部系統(tǒng)服務(wù)加載完畢,所以我們會在任務(wù)管理器 中看到多個SVCHOST.EXE同時運(yùn)行,這是設(shè)計使然。一般地,Windows XP/Windows Server 2003可能會有不超過六個SVCHOST.EXE同時運(yùn)行;而Windows Vista/Windows Server 2008/Windows 7會有不少于十個SVCHOST.EXE同時運(yùn)行。
當(dāng)您在Windows任務(wù)管理器中查看 SVCHOST.EXE進(jìn)程時,SVCHOST.EXE進(jìn)程的“用戶名”應(yīng)該顯示為SYSTEM、LOCAL SERVICE或NETWORK SERVICE。(如果在任務(wù)管理器中看不到“用戶名”,請在菜單中選擇“查看”-“列設(shè)置”,選中“用戶名”復(fù)選框。)如果某個SVCHOST.EXE 進(jìn)程的“用戶名”顯示的是用戶帳戶的名稱(例如Administrator),則這個SVCHOST.EXE很可能是冒仿的惡意程序。
另外您需要確認(rèn),您看到的SVCHOST.EXE進(jìn)程的名稱拼寫是否有誤。比如假設(shè)顯示的進(jìn)程名稱是SVCH0ST.EXE(用數(shù)字0替換了字母O),則 很可能是冒仿的惡意程序;再比如進(jìn)程的名稱雖然是SVCHOST.EXE,但此進(jìn)程卻沒有位于Windows\system32(Windows Vista以上版本的任務(wù)管理器可以查看進(jìn)程所在的文件夾路徑),則也可能是冒仿的惡意程序。
由于SVCHOST.EXE是加載系統(tǒng)服務(wù)的宿主進(jìn)程,所以您如果發(fā)現(xiàn)某SVCHOST.EXE進(jìn)程占用的系統(tǒng)資源較多,即表明通過這個 SVCHOST.EXE進(jìn)程加載的系統(tǒng)服務(wù)占用的系統(tǒng)資源較多。您首先需要確定通過這個SVCHOST.EXE進(jìn)程加載的系統(tǒng)服務(wù)具體是什么,然后根據(jù)計 算機(jī)的實(shí)際情況決定是否關(guān)閉相應(yīng)的系統(tǒng)服務(wù)、以釋放服務(wù)占用的系統(tǒng)資源,這樣SVCHOST.EXE即可釋放相應(yīng)的系統(tǒng)資源。
雖然大多數(shù)系統(tǒng)服務(wù)只有在遇到故障時才會占用較高的系統(tǒng)資源,但某些特殊的服務(wù)即使是正常工作狀態(tài)也將消耗較多系統(tǒng)資源。例如Automatic Updates自動更新服務(wù),當(dāng)自動更新在后臺搜索可用的系統(tǒng)更新程序時必將占用較高的資源,這是設(shè)計使然而不是故障。
判斷一個SVCHOST.EXE加載了哪些系統(tǒng)服務(wù)有兩種方法
判斷方法一:
1、在Windows任務(wù)管理器的“進(jìn)程”選項(xiàng)卡中查看占用資源較高的SVCHOST.EXE進(jìn)程對應(yīng)的PID,將PID記下。(如果在任務(wù)管理器中看不到“PID”,請在菜單中選擇“查看”-“列設(shè)置”,選中“PID”復(fù)選框。)
2、以管理員權(quán)限運(yùn)行命令提示符(CMD.EXE),在命令提示符中執(zhí)行:
TASKLIST –SVC
您將看到類似如下所示的結(jié)果:圖像名 PID 服務(wù)
SVCHOST.EXE 1104 DcomLaunch,TermServices
SVCHOST.EXE 1188 RpcSs
……
3、對 照您在任務(wù)管理器中看到的SVCHOST.EXE的PID,在上述結(jié)果中查找對應(yīng)的 SVCHOST.EXE。例如,假設(shè)您在任務(wù)管理器中看到PID為1188的SVCHOST.EXE占用了較多系統(tǒng)資源,而TASKLIST –SVC的結(jié)果顯示PID為1188的SVCHOST.EXE加載的服務(wù)是RpcSs,即表明RpcSs服務(wù)(Remote Procedure Call (RPC) 服務(wù))占用了較高的系統(tǒng)資源。
判斷方法二:
1、在microsoft.com下載系統(tǒng)工具Process Explorer:
http://www.microsoft.com/technet/sysinternals/Utilities/ProcessExplorer.mspx m.onuomy.cn(http://www.microsoft.com/technet/sysinternals/Utilities/ProcessExplorer.mspx)
2、運(yùn)行Process Explorer,在進(jìn)程列表中找到占用系統(tǒng)資源較多的SVCHOST.EXE進(jìn)程,右鍵單擊選擇Properties(屬性),切換至Services(服務(wù))選項(xiàng)卡,在這里即可查看SVCHOST.EXE進(jìn)程加載的系統(tǒng)服務(wù)是什么。
當(dāng)我們判斷完成后,定位到加載的服務(wù)我償可以打開本地服務(wù),然后嘗試停止服務(wù)再啟動一般就可以解決問題了。解決案例:
通常情況下,網(wǎng)絡(luò)不好時Windows自動更新服務(wù)可能會失敗,導(dǎo)致其反復(fù)重試,結(jié)果CPU負(fù)載極高。其表現(xiàn)為:系統(tǒng)啟動幾分鐘后 svchost.exe就會占100% cpu資源,但是拔掉網(wǎng)線就好了。
解決辦法:
1、進(jìn)入安全模式
2、刪除C:\WINDOWS\SoftwareDistribution下面所有的文件重啟機(jī)器,
3、 打開控制面板->管理工具->服務(wù),找到【自動更新(Automatic Updates)】,設(shè)成手動更新或者關(guān)閉自動更新,
4、重啟機(jī)器,刪除C:\WINDOWS\SoftwareDistribution下面的文件,這時再在控制面板里恢復(fù)自動更新設(shè)置。
當(dāng)然不同的問題要用不同的方法來解決,多搜索網(wǎng)絡(luò)上可能都會解決答案。