隨筆 - 251  文章 - 504  trackbacks - 0
          <2006年8月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          本博客系個人收集材料及學習記錄之用,各類“大俠”勿擾!

          留言簿(14)

          隨筆分類

          收藏夾

          My Favorite Web Sites

          名Bloger

          非著名Bloger

          搜索

          •  

          積分與排名

          • 積分 - 202865
          • 排名 - 284

          最新評論

          故障描述:

          剛剛接到一個用戶反饋,說他每次開機以后發現 spoolsv.exe 進程消耗了大量的CPU資源(70%),嚴重影響了系統的運行,懷疑是計算機病毒,向我求救。

          故障檢查:

          根據他的描述,我首先檢查了 Print Spooler 服務的加載方式等內容。

          1. 打開注冊表編輯器
          2. 定位到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Spooler
          3. 檢查這個鍵以及子鍵的內容是否正確。

          經查,故障系統的鍵完全正確,沒有問題。但是為什么會有?spoolsv.exe 進程消耗了大量的CPU資源的問題呢?

          有人可能會問,spoolsv.exe 進程是不是計算機病毒的進程,這一點很容易確認的。正確的 spoolsv.exe 進程的映像文件路徑肯定是%SystemRoot%\System32\spoolsv.exe ,因為根據Windows System File Check 的原理,如果說%SystemRoot%\System32\spoolsv.exe 被替換的話,Windows系統文件保護裝置會從DllCache里面把正確的文件替換。所以在大多數情況下是可以相信 %SystemRoot%\System32\spoolsv.exe 文件是正確的。而故障系統 spoolsv.exe 進程的映像文件路徑的確是%SystemRoot%\System32\spoolsv.exe,因此 spoolsv.exe 進程沒有問題。

          ???*注:有些特殊的方法可以繞開這個保護,這里不進行討論。

          根據以往知識,我們知道 Print Spooler 服務是用于維護一個打印列表的。所以我懷疑是由于某個打印列表造成了 Print Spooler 服務占用了大量的CPU資源。在進行以下嘗試以后我大致知道的問題的原因:

          1. 先啟動 Print Spooler 服務,讓 spoolsv.exe 進程消耗大量的CPU資源。
          2. 這個時候啟動 Process Explorer,然后選擇 spoolsv.exe 進程,雙擊這個進程,再選擇線程選項卡。在線程選項卡里面,我發現 CreateThread API函數的調用占用了很高的 CPU 資源。問題應該就出在這里,由于某種特殊的原因,導致 CreateThread 在創建線程的時候出現了死循環,從而導致spoolsv.exe 進程消耗大量的CPU資源。

          再,我們知道每當創建一個打印任務以后,會在 %SystemRoot%\System32\spool\PRINTERS 目錄下創建2個文件,擴展名分別為 SHD 和 SPL。如果估計沒錯,肯定是這里出現問題了。遠程控制,打開 %SystemRoot%\System32\spool\PRINTERS 目錄檢查,果然發現有2個文件,擴展名分別為 SHD 和 SPL,如果刪除這2個文件會不會解決 spoolsv.exe 進程消耗大量的CPU資源的問題呢?

          故障處理:

          嘗試先把? Print Spooler 服務停止掉,然后再把 %SystemRoot%\System32\spool\PRINTERS 目錄下的 SHD 和 SPL 文件刪除,重新啟動? Print Spooler 服務,故障排除。

          故障分析:

          Print Spooler 服務啟動的時候會檢查打印隊列,如果發現有未完成的隊列則會嘗試執行,如果隊列文件被破壞,則可造成 Print Spooler 服務執行的時候出現死循環,導致 spoolsv.exe 進程消耗大量的CPU資源.

          SPL文件為當前脫機文件,包含當前打印任務。
          SHD文件為當前脫機打印的信息文件,包含誰發起了打印任務,打印任務中的隊列信息,以及該打印任務發送到哪里等等信息。
          此外還伴隨一些TMP文件,如果SPL、SHD文件出現問題,或者打印隊列送往無效打印機,又或者送往的打印驅動模塊無法正確響應,這可能導致spoolsv.exe進行反復嘗試,進而占用大量CPU資源,這個現象有可能導致系統掛起。

          posted on 2006-08-13 11:00 matthew 閱讀(4083) 評論(0)  編輯  收藏 所屬分類: 雜錄
          主站蜘蛛池模板: 精河县| 黔东| 龙泉市| 兴国县| 洛浦县| 长汀县| 大理市| 志丹县| 县级市| 彝良县| 烟台市| 肇州县| 耿马| 九寨沟县| 分宜县| 伊春市| 海口市| 阳城县| 从江县| 抚顺市| 汉阴县| 阜宁县| 开平市| 乳源| 车险| 界首市| 登封市| 云南省| 北京市| 辽阳县| 南陵县| 新干县| 涪陵区| 双流县| 普宁市| 饶平县| 霞浦县| 六安市| 河津市| 永登县| 武宣县|