我使用的是 Windows 8 Pro x64。我注意到该Rundll32.exe
进程占用了大量 CPU(25%,即单核 100% 负载),然后我没有使用计算机,具体来说,屏幕保护程序处于活动状态。然后该进程终止立即地然后屏幕保护程序消失(然后我移动鼠标,或按下键盘上的某个键)。
我发现这个是因为我正在使用定制流程监控程序,这也允许我收集有关进程的信息(这是已停止的进程提供的最新信息):
Path = C:\WINDOWS\system32\rundll32.exe
User Name = NT AUTHORITY \ SYSTEM
PID/Parent PID = 4576 / 800
Started by = C:\WINDOWS\system32\services.exe
Virtual KB Curr = 149 872 Peak = 299 416
Working Set KB Curr = 54 732 Peak = 54 732
Page File KB Curr = 46 720 Peak = 46 720
System Pool KB Paged = 208 Nonpaged = 22
Private KB = 46 720
Handles Count = 385
Faults Count = 293 958
Windows = 0
Reads = 4 255 Read KB = 56 263
Writes = 1 Write KB = 0
Other IOs = 677 511 Other KB = 8 614
从该信息可以看出,该进程正在执行大量读取操作,但没有写入操作。此外,它是由服务控制管理器启动的。在升级之前,我从未注意到我的 Windows 7 出现过此类行为,我想知道这是否是某种错误导致的,或者是某些合法的系统扫描任务?
我正在使用Blank screen
屏幕保护程序,它不使用任何 CPU。我实际上已经验证了它scrnsave.scr
也已终止,但不消耗 CPU。CPU 专门由Rundll32.exe
它消耗,显然,这与屏幕保护程序 DOWN 事件有某种关联。
我还注意到它并不是在 ssaver 启动时就启动,而是在 ssaver 启动后一段时间才启动(或者在启动前可能还有其他一段时间不活动),但总是在 ssaver 停止后才停止。我发现它实际上在一段时间后终止,我估计最近的一次遭遇大约需要 2 分钟的工作时间(但我不确定它是否总是需要这么多时间)。
而且(正如我刚才发现的)它似乎在完成工作后不会重新启动。看起来实际上只是一些合法的系统操作正在进行,然后系统处于空闲状态。这是有道理的,因为它占用大量 CPU,因此不会减慢任何用户进程的速度(有点类似于它的ngen.exe
工作方式)。
答案1
安装Windows 性能工具包,运行具有管理员权限的命令提示符并运行此命令并最小化窗口:
xperf -on latency -stackwalk profile -buffersize 1024 -MaxFile 256 -FileMode Circular && timeout -1 && xperf -d HighCPUUsage.etl
重现问题后,返回 CMD,按任意键停止记录。现在将其压缩HighCPUUsage.etl
为 7z 并上传。
答案2
可能是 rundll32.exe 正在加载屏幕保护程序。
大多数屏幕保护程序都是无用的,它们很漂亮,但只会消耗 CPU、GPU,而如果只是暂停然后关闭屏幕,则会消耗更多。您可以设置屏幕保护程序,但只能在暂停屏幕前设置一分钟。暂停后,屏幕保护程序不应运行(我不知道 Windows 8 是否真的会在暂停屏幕时关闭屏幕保护程序,请测试一下)
答案3
我不太确定,但据我了解,这与 Dr.Web 防病毒软件的后台例程有关(可能是某种数据库更新或内部检查)。但我不能 100% 确定。
因为看起来不像是出现故障的时候,所以我不想花更多的时间去研究。
更新:我注意到我的基于 Windows 7 HB x64 的笔记本电脑上也有同样的行为,该笔记本电脑也安装了同样的 Dr.Web 防病毒软件,因此这似乎就是它——某种 Dr. Web 后台例程。