高 CPU 使用率故障排除指南

本文可帮助你确定持续高 CPU 使用率的原因。 请记住,当进程或应用程序为请求提供服务时,CPU 使用率可能会增加。 但是,如果一直看到长时间的 CPU 使用率保持在较高级别(80% 或更高),则系统或应用程序的性能将受到影响。 因此,请务必了解持续高 CPU 使用率的原因,以便尽可能纠正问题。

故障排除工具

任务管理器

使用任务管理器查看 CPU 消耗情况,以帮助确定导致 CPU 使用率较高的进程或应用程序:

  1. 选择“开始”,输入任务,然后在搜索结果中选择“任务管理器”。
  2. 任务管理器”窗口默认为“进程”选项卡。如果在“名称”列中看到单个进程名称列表,则可以展开分组进程的任何实例。
  3. 选择 CPU 列标题以按 CPU 使用率对列表进行排序。 确保标头上显示的箭头指向下,以对数据进行从最高到最低 CPU 消耗的排序。

如果进程可以停止,或者可以禁用相关服务,请停止进程或服务。 然后,检查这是否缓解了问题。

资源监视器

使用资源监视器查看 CPU 消耗:

  1. 选择“开始”,输入 resmon,然后从搜索结果中选择“资源监视器”。

  2. “资源监视器 ”窗口中,选择 “CPU ”选项卡。

    注意

    可能需要最大化窗口才能查看所有数据。

  3. 选择 “平均 CPU ”列标题以按总体 CPU 使用率对列表进行排序。 确保标头上显示的箭头指向下,以对数据进行从最高到最低 CPU 消耗的排序。

如果任何进程显示环境消耗率高于预期,请在尝试确定问题原因时先考虑这些顶级进程。

进程资源管理器

进程资源管理器工具提供了有关计算机上当前正在运行的进程的完整概述,包括有关谁调用进程的详细信息,以及它们消耗的系统资源总数。

如果要验证与操作系统相关的过程(例如系统),请执行以下步骤:

  1. 以管理员身份运行进程资源管理器。
  2. 右键单击进程,选择“属性,然后选择“线程”选项卡。
  3. 选择消耗大量 CPU 的线程,然后选择“Stack以查看正在运行的函数。

注意

若要获取更好的堆栈信息结果,请在进程资源管理器中配置符号。 为此,请按照下列步骤进行操作:

  1. 安装 适用于 Windows 的调试工具。
  2. 以管理员身份运行进程资源管理器。
  3. 选择 “选项” 菜单,然后选择“ 配置符号”。
  4. 将Dbghelp.dll路径更改为 C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\dbghelp.dll,然后选择“ 确定”。

常见故障排除方案

本部分介绍使用高 CPU 使用率的不同进程的方案。

唯一命名的单一Microsoft进程

  1. 收集性能监视器日志。 使用 1 秒到 5 秒的快照间隔。
  2. 在 CPU 使用率较高时收集 Windows 性能记录器(WPR)日志。

    注意

    不要让此日志长时间运行,因为文件增长非常快。 只需运行日志几分钟(3 到 5 个),才能捕获高 CPU 使用率。

  3. 报告的 CPU 使用率过高期间,运行 ProcDump 工具两次。 将运行空间分开几分钟。

Svchost 进程

如果 svchost 进程消耗较高的 CPU 使用率,并且 svchost 进程包含多个服务,则需要将每个服务分解为在其自己的 svchost 进程中运行,以确定哪个服务导致 CPU 使用率过高。 为此,请按照以下步骤操作:

  1. 打开提升的命令提示符窗口。

  2. 如果每个服务是共享 svchost 进程,则将其分解为自己的 svchost 进程。 为此,请运行以下命令:

    sc config <service name> type= own
    

    注意

    在此命令中,将服务名称>替换为<实际的服务名称。

  3. 重新启动服务。

  4. 在命令提示符下,运行 tasklist /svc 以验证服务是否在其自己的 svchost 进程中运行。

    重要

    解决问题后,必须返回到步骤 2 并还原所执行的操作。

    为此,请使用命令中的替换sc config <service name> type= ownsc config <service name> type= share。 然后重启该服务。

  5. 将每个服务分解成自己的 svchost 进程后,现在必须确定哪个服务正在推动 CPU 使用率或消耗高 CPU 使用率。

  6. 收集性能监视器日志。 使用 1 秒到 5 秒的快照间隔。

  7. 记录有问题的 Svchost 进程的 PID。

  8. 在出现问题时收集 WPR 日志。

  9. 在报告的 CPU 使用率过高期间运行 ProcDump 两次。 将运行空间分开几分钟。

多个具有相同名称的进程实例

进程的多个实例可以共享同一名称。 例如,远程桌面协议 (RDP) 服务器上的explorer.exe进程可能会出现此问题。

若要排查此问题,请执行以下步骤:

  1. 收集性能监视器日志。 使用 1 秒到 5 秒的快照间隔。

  2. 在出现问题时收集 WPR 日志。

  3. 在报告的 CPU 使用率过高期间运行 ProcDump 两次。 将运行空间分开几分钟。

  4. 运行以下命令记录有问题的进程的 PID:

    tasklist /v /fo csv >Running_Process.txt

第三方应用程序过程

如果第三个进程被确定为问题的原因,则必须联系应用程序供应商,以了解为什么相应的进程导致计算机上的 CPU 使用率较高。

数据收集

问题发生前

可以使用调试诊断 2.0 版本进一步排查此问题。 若要使用该工具,请执行以下步骤。

  1. 安装调试诊断工具 v2 Update 2

    重要

    安装 2.0 版本之前,请卸载所有其他版本的调试诊断工具。

  2. 选择“开始,输入性能监视器,然后右键单击性能监视器以管理员身份运行。

  3. 使用性能监视器收集性能计数器日志并启动日志记录。

出现问题时

  1. 打开 DebugDiag 2 集合
  2. 选择“进程”选项卡,右键单击对应于相应应用程序池的工作进程,然后选择“创建完整用户dump”。
  3. 在 CPU 使用率较高时重复步骤 2 三次。
  4. 停止性能监视器日志记录。
  5. 使用 DebugDiag 压缩数据。 为此,请选择工具>创建增量内阁文件。

我们建议你保留你收集的信息方便,以防你必须联系Microsoft 支持部门。