刚刚接到一个用户反馈,说他每次开机以后发现 spoolsv.exe 进程消耗了大量的CPU资源(70%),严重影响了系统的运行,怀疑是计算机病毒,向我求救。
根据他的描述,我首先检查了 Print Spooler 服务的加载方式等内容。
经查,故障系统的键完全正确,没有问题。但是为什么会有 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资源。在进行以下尝试以后我大致知道的问题的原因:
再,我们知道每当创建一个打印任务以后,会在 %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资源,这个现象有可能导致系统挂起。
欢迎光临 江西广告网 (http://bbs.jxadw.com/) | Powered by Discuz! X3.2 |