平淡
打開(kāi)每臺(tái)使用Windows的電腦的任務(wù)管理器后,都可以看到名為System的進(jìn)程。在System進(jìn)程上單擊鼠標(biāo)右鍵并選擇“打開(kāi)文件的位置”,在打開(kāi)的資源管理器窗口中可以看到該進(jìn)程所對(duì)應(yīng)的程序是“C:\Windows\System32\ntoskml.exe”(圖2)。
Ntoskml.exe是一個(gè)NT系統(tǒng)的內(nèi)核程序,它的主要作用是負(fù)責(zé)操作系統(tǒng)核心的任務(wù),如處理器管理、存儲(chǔ)管理、設(shè)備管理、文件管理、接口管理等。我們?nèi)粘J褂玫尿?qū)動(dòng)程序(如很多sys文件),就是通過(guò)調(diào)用Ntoskrnl.exe的接口加載的。在系統(tǒng)后臺(tái)中,Ntoskrnl.exe扮演的是一個(gè)類似總管的角色,它會(huì)加載硬件驅(qū)動(dòng)(如顯卡、網(wǎng)卡)、系統(tǒng)核心文件等多個(gè)線程,這些線程CPU資源占用之和就是任務(wù)管理器中System進(jìn)程的CPU資源占用顯示值。所以如果System進(jìn)程的CPU資源占用過(guò)高,我們就要查看Ntoskrnl.exe到底加載了什么線程,并找出哪個(gè)(或者哪些)線程的CPU資源占用出現(xiàn)了異常。
如上所述,找出異常的原因是要先查看Ntoskrnl.exe加載的線程。這個(gè)可以借助Process Explorer軟件(下載地址:https:∥docs.microseft.com/en-us/sysinternals/downloads/process-explorer,以下簡(jiǎn)稱為PE)來(lái)完成。
啟動(dòng)PE后,在進(jìn)程列表中找到System進(jìn)程,右鍵單擊該進(jìn)程,在彈出的菜單中選擇“屬性”(圖3)。在接著打開(kāi)的詹性窗口中,點(diǎn)擊CPU資源進(jìn)行排序,在筆者的電腦中可以看到一個(gè)ID為13044的線程,其CPU資源占用為61.23%,而其他線程的CPU資源占用則幾乎為0,現(xiàn)在基本可以判斷出是這個(gè)線程導(dǎo)致了System進(jìn)程CPU資源占用過(guò)高(圖4)。
在上圖內(nèi)選中該線程后點(diǎn)擊“模塊”,打開(kāi)加載的驅(qū)動(dòng)文件屬性窗口。接著再依次切換到“數(shù)字簽名→詳細(xì)信息”,可以看到這是一個(gè)某網(wǎng)絡(luò)科技有限公司開(kāi)發(fā)的驅(qū)動(dòng)文件。最后經(jīng)過(guò)百度查詢,原來(lái)是筆者前幾天安裝的某銀行的U盾驅(qū)動(dòng)(圖5)。
通過(guò)上面的方法可以初步確定CPU資源占用過(guò)高的元兇是PaGuard X64.sys文件,不過(guò)由于這是驅(qū)動(dòng)文件且正被系統(tǒng)使用而無(wú)法直接刪除,而且貿(mào)然刪除驅(qū)動(dòng)文件可能會(huì)帶來(lái)不可預(yù)測(cè)的后果。因此,為了確保系統(tǒng)的安全,接下來(lái)我們可以先將該驅(qū)動(dòng)文件的啟動(dòng)方式設(shè)置為“禁用”,重啟并確認(rèn)系統(tǒng)沒(méi)有異常后再進(jìn)行處理。驅(qū)動(dòng)的啟動(dòng)方式可以通過(guò)Autoruns軟件(https:∥docs.microsoft.com/zh-cn/sysinternals/downloads/autoruns)進(jìn)行查看。
啟動(dòng)Autoruns后切換到“Drivers”,在啟動(dòng)列表中找到PaGuard啟動(dòng)項(xiàng),可以看到其加載的就是圖4所示的窗口中顯示的驅(qū)動(dòng)文件,現(xiàn)在記住文件的路徑,并按提示將其前面的勾選去除(圖6)。
接著按提示重啟電腦,進(jìn)入桌面后打開(kāi)任務(wù)管理器查看,此時(shí)System進(jìn)程的CPU資源占用變?yōu)?.24%,系統(tǒng)恢復(fù)正常,并且使用一段時(shí)間后也沒(méi)有出現(xiàn)什么異?!,F(xiàn)在可以確定之前System進(jìn)程的CPU資源占用過(guò)高,正是由于PaGuard X64.sys導(dǎo)致的?,F(xiàn)在返回圖6所示的窗口,按照路徑提示找到對(duì)應(yīng)的PaGuard X64.sys文件并將其刪除,同時(shí)刪除其注冊(cè)表中對(duì)應(yīng)的鍵值,自此順利地解決這個(gè)問(wèn)題。
那么PaGuard X64.sys文件為什么會(huì)導(dǎo)致CPU資源占用過(guò)高?一般情況下,正常的驅(qū)動(dòng)加載調(diào)用Ntoskrnl.exe接口時(shí)并不會(huì)占用太多的系統(tǒng)資源。不過(guò)一些異常的驅(qū)動(dòng),比如本例的PaGuard X64.sys,它會(huì)在后臺(tái)頻繁地檢測(cè)用戶的電腦是否插入了U盾,從而不斷地向Ntoskrnl.exe發(fā)起請(qǐng)求,導(dǎo)致Ntoskrnl.exe占用過(guò)多的系統(tǒng)資源,在任務(wù)管理器中就體現(xiàn)為System進(jìn)程的CPU或者內(nèi)存資源占用過(guò)高。此外,一些不兼容或者過(guò)時(shí)的硬件驅(qū)動(dòng),由于其與系統(tǒng)的兼容性有問(wèn)題,也會(huì)導(dǎo)致在調(diào)用接口時(shí)出現(xiàn)異?,F(xiàn)象。
如上所述,System進(jìn)程的CPU資源占用過(guò)高的原因大部分是由于其加載的驅(qū)動(dòng)文件有問(wèn)題所導(dǎo)致。我們一般只要先找出占用資源高的.sys文件,然后通過(guò)查看文件的信息判斷來(lái)源,最后根據(jù)文件的性質(zhì)使用不同的方法來(lái)解決問(wèn)題。如果確認(rèn)是新安裝的軟件(比如很多手機(jī)助手類的管理軟件)或硬件(如本例的U盾)所帶的驅(qū)動(dòng),那么可以嘗試卸載或者將其自啟動(dòng)禁止后手動(dòng)刪除;如果是本機(jī)中原有的硬件(如自帶的網(wǎng)卡、顯卡)的驅(qū)動(dòng)文件,則可嘗試自動(dòng)升級(jí)驅(qū)動(dòng)來(lái)解決問(wèn)題。