概要
高 CPU 使用率可能会显著影响 Windows Server 系统或应用程序的性能。 本文可帮助你识别和排查长时间 CPU 使用率一直保持在 80% 或更高的场景。 虽然当进程处理请求时 CPU 使用率暂时峰值是正常的,但持续较高的使用率表示存在基础问题。
使用本指南确定消耗过多 CPU 资源的进程或应用程序,然后排查并修复问题的原因。
故障排除工具
任务管理器
使用任务管理器查看 CPU 消耗情况,以帮助确定导致 CPU 使用率较高的进程或应用程序:
- 选择 “开始”,输入 任务,然后在搜索结果中选择 “任务管理器 ”。
- “任务管理器”窗口默认为“进程”选项卡。如果在**“名称”**列中看到单个进程名称列表,则可以展开分组进程的任何实例。
- 选择 CPU 列标题以按 CPU 使用率对列表进行排序。 确保标头上显示的箭头指向下,以对数据进行从最高到最低 CPU 消耗的排序。
如果进程可以停止,或者可以禁用相关服务,请停止进程或服务。 然后,检查这是否缓解了问题。
资源监视器
使用资源监视器查看 CPU 消耗:
-
选择 “开始”,输入 resmon,然后从搜索结果中选择 “资源监视器 ”。
-
在 “资源监视器 ”窗口中,选择 “CPU ”选项卡。
注释
可能需要最大化窗口才能查看所有数据。
-
选择 “平均 CPU ”列标题以按总体 CPU 使用率对列表进行排序。 确保标头上显示的箭头指向下,以对数据进行从最高到最低 CPU 消耗的排序。
如果任何进程显示环境消耗率高于预期,请在尝试确定问题原因时先考虑这些顶级进程。
进程管理器
进程资源管理器工具提供了有关计算机上当前正在运行的进程的完整概述,包括有关谁调用进程的详细信息,以及它们消耗的系统资源总数。
如果要验证与操作系统相关的进程(例如 System),请执行以下步骤:
- 以管理员身份运行进程资源管理器。
- 右键单击进程,选择“ 属性”,然后选择“ 线程 ”选项卡。
- 选择消耗大量 CPU 的线程,然后选择 “Stack ”以查看正在运行的函数。
注释
若要获取更好的堆栈信息结果,请在进程资源管理器中配置符号。 为此,请执行以下步骤:
- 安装 适用于 Windows 的调试工具。
- 以管理员身份运行进程资源管理器。
- 选择 “选项” 菜单,然后选择“ 配置符号”。
- 将 Dbghelp.dll 路径更改为 C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\dbghelp.dll,然后选择“ 确定”。
常见故障排除方案
本部分介绍使用高 CPU 使用率的不同进程的方案。
唯一命名的单一Microsoft进程
-
收集性能监视器日志。 使用 1 秒到 5 秒的快照间隔。
-
在 CPU 使用率较高时收集 Windows 性能记录器(WPR) 日志。 注释
不要让此日志长时间运行,因为文件增长非常快。 你只需运行日志几分钟(3 到 5 分钟),以便捕获高 CPU 使用率。
-
在报告的 CPU 使用率过高期间,运行 ProcDump 工具两次。 请将各次运行间隔几分钟。
Svchost 进程
如果 svchost 进程消耗较高的 CPU 使用率,并且 svchost 进程包含多个服务,则需要将每个服务分解为在其自己的 svchost 进程中运行,以确定哪个服务导致 CPU 使用率过高。 为此,请执行以下步骤:
-
打开提升的命令提示符窗口。
-
将每个服务从共享的 svchost 进程中分离出来,使其运行在单独的 svchost 进程中。 为此,请运行以下命令:
sc config <service name> type= own注释
在此命令中,将<替换为>实际的服务名称。
-
重新启动服务。
-
在命令提示符下,运行
tasklist /svc以验证服务是否在其自己的 svchost 进程中运行。重要
解决问题后,必须返回到步骤 2 并还原所执行的操作。
为此,请在命令中将
sc config <service name> type= own替换为sc config <service name> type= share。 然后,重启服务。 -
将每个服务分解成自己的 svchost 进程后,现在必须确定哪个服务正在导致 CPU 使用率上升或消耗大量 CPU。
-
收集性能监视器日志。 使用 1 秒到 5 秒的快照间隔。
-
记录有问题的 Svchost 进程的 PID。
-
在出现问题时收集 WPR 日志。
-
在报告的 CPU 使用率过高期间运行 ProcDump 两次。 请将各次运行间隔几分钟。
多个具有相同名称的进程实例
进程的多个实例可以共享同一名称。 例如,远程桌面协议 (RDP) 服务器上的 explorer.exe 进程可能会出现此问题。
若要排查此问题,请执行以下步骤:
-
收集性能监视器日志。 使用 1 秒到 5 秒的快照间隔。
-
在出现问题时收集 WPR 日志。
-
在报告的 CPU 使用率过高期间运行 ProcDump 两次。 请将各次运行间隔几分钟。
-
运行以下命令记录有问题的进程的 PID:
tasklist /v /fo csv >Running_Process.txt
第三方应用程序流程
如果第三个进程被确定为问题的原因,则必须联系应用程序供应商,以了解为什么相应的进程导致计算机上的 CPU 使用率较高。
数据收集
问题发生前
可以使用调试诊断 2.0 版本进一步排查此问题。 若要使用该工具,请执行以下步骤。
-
重要
安装 2.0 版本之前,请卸载所有其他版本的调试诊断工具。
-
选择 “开始”,输入 性能监视器,然后右键单击 “性能监视器 ”以以管理员身份运行它。
-
使用性能监视器收集性能计数器日志并启动日志记录。
出现问题时
- 打开 DebugDiag 2 集合。
- 选择“ 进程 ”选项卡,右键单击对应于相应应用程序池的工作进程,然后选择“ 创建完整用户dump”。
- 在 CPU 使用率较高时重复步骤 2 三次。
- 停止性能监视器日志记录。
- 使用 DebugDiag 压缩数据。 为此,请选择 工具>创建增量 CAB 文件。
我们建议你保留收集的信息以备不时之需,方便联系 Microsoft 支持。