如何修复微软“诊断策略服务”占用约 4GB 内存和约 1 个 CPU 核心且达到 100% 的问题?
我发现有一个进程一直在消耗大量的 CPU,因为我的电脑风扇一直在旋转以产生热量。但问题是 CPU/内存的使用率并不总是很糟糕。当你重新启动该进程时,它似乎会暂时消失。
我用了一个python 程序 psrecord测量该进程(及其子进程)的 CPU 使用率和内存使用率,发现该进程大约需要 12 小时才能达到最大内存使用率,并且 CPU 使用率很高:
第一个图是:
- x 轴时间(秒)
- y 轴 CPU 使用率百分比(100% 为一个完整核心)
第二张图是内存使用情况:
- x 轴是天数
- y 轴表示内存使用量(以 MB 为单位)
答案1
简而言之:您必须停止该进程,删除该进程使用的目录 C:\Windows\System32\sru,然后重新启动该进程。完成此操作后,该服务现在使用大约 20 MB 内存和 0% CPU。
以下是内存使用率下降的屏幕截图:
很长的故事:
- 谷歌搜索“诊断政策服务”网站:reddit.com
- 找到一个 reddit 帖子https://www.reddit.com/r/pcgamingtechsupport/comments/a7wyrv/can_i_stop_diagnostic_policy_service/谈论“SRUDB.dat”文件变得太大
- 他们指出了微软的一个帖子https://social.technet.microsoft.com/Forums/en-US/cf6ceadd-4bb4-4668-b8fb-8ccf7d067e31/diagnostic-policy-service-high-cpu?forum=win10itprogeneral
- 在微软的帖子中,他们还讨论了 SRUDB.dat 文件变得太大的问题
- 我进入了我机器的 C:\Windows\System32\sru 目录
- 有 22,000 多个文件
- SRUDB.dat 为 4.5GB
- 我尝试创建该目录的 zip 文件,但无法创建,因为它已被正在运行的进程打开
- 我尝试使用 services.msc 手动停止该服务,但该进程会自动重新启动
- 返回微软主题
- 有一个批处理脚本将服务设置为非自动启动(又名“手动”),然后终止该进程,这里是批处理 *1
- 然后删除目录
- 然后再次启动服务
- 我检查了批处理脚本中的所有代码,然后以管理员权限运行了批处理脚本
*1 这是脚本的低级步骤:
- 呼叫
sc
。将服务“DPS”设置为“需求”(又名“手动”) - 调用
sc
以获取“DPS”进程 ID 号 (PID) taskkill
停止 PID 的调用rd
删除 src 目录的调用- 要求
sc
将“DPS”服务更改为“自动” - 呼吁
sc
启动“DPS”服务