云服务器 Windows 实例 CPU 高占用率的处理及工具推荐

  • A+
所属分类:Windows
高性能企业级服务器首台5折

注意:本文大量引用 Microsoft 官方文档/工具链接,版权/所属权归 Microsoft 所有,并请您充分考虑 Microsoft Windows 产品迭代或者文档未及时更新可能带来的问题。

现象描述

Windows 实例有时会遇到 CPU 高利用率的情况。

原因分析

在某些情况下这是正常的行为,例如当您购买了 Windows Server 2012 低规格实例(如实例规格为 1 核 1 GB),实例 CPU 有时突然飙高,排查后发现 Windows Update 服务在进行自动更新。其他情况,如:病毒木马、第三方杀毒软件、应用程序异常、驱动异常、高 I/O 或高中断处理的应用程序,也会造成 CPU 占用率高。

解决方法

  • CPU 飙高时,检查是否后台有执行 Windows Update 进程。
  • CPU 飙高时,检查杀毒软件是否在后台执行扫描操作。您可以升级杀毒软件为最新版本,或者删除杀毒软件。
  • 打开 运行 -> MSCONFIG 禁用所有非 Microsoft 自带服务驱动,然后检查问题是否再次发生。参考 Microsoft 文档 How to perform a clean boot in Windows
  • 使用商业版杀毒软件或 Microsoft 免费工具 Microsoft Safety Scanner 在安全模式下扫描杀毒。
  • 运行 Windows Update 安装最新 Microsoft 安全补丁。
  • ECS 实例有大量的磁盘访问,网络访问,高计算需求时,CPU 高利用率是正常结果,您可以尝试升级实例规格以应对资源瓶颈问题。
  • 更多解决方法可参考 Microsoft 文档 How to troubleshoot high cpu in the System process

Windows 实例排查工具推荐

注意:此处推荐几款排查 Windows 实例高 CPU 占有率的工具,具体技术支持请以 Microsoft 官方申明为准。

Microsoft 有多个工具可以排查 CPU 高利用率的问题,例如,任务管理器、资源监视器(Resource Monitor)、性能监视器(Performance Monitor)、Process Explorer、Xperf (Windows server 2008 及以上版本),或使用 KernRate (Windows server 2003)抓取系统内存转储文件(Full Memory Dump)进行检查。

1. 任务管理器

直观检查应用程序列表,定位占用 CPU 较高的应用程序。

TaskManager

  • 性能页面检查 CPU 占用率时,右击 CPU 使用率图示,单击将图形更改为 -> 逻辑处理器。如下图显示了 4 个逻辑 CPU 的利用率。TaskManagerConfiguration
  • 当单个进程 CPU 飙升至接近 100%,其它 CPU 变化不大,可能是网络 I/O 处理造成的。

2. 资源监视器

直观检查 CPU 使用率,还可以通过句柄和模块搜索对应的进程。

demonstration

3. Process Explorer

一款 Microsoft Sysinternals 工具,通过配置正确的 Symbols,检查对应应用程序的线程调用的 Call Stack,来定位可能的问题驱动,点此下载,并参考博文 The Case of the System Process CPU Spikes使用该工具。

ProcessExplorer

4. 性能监视器

性能监视器(Performance Monitor)是 Microsoft 专业收集各个组件性能计数器的工具。对于系统CPU资源消耗,有多个Counter来检查。通过开始-> 运行-> perfmon 打开工具。

Performance 有三个核心参数(参考 Microsoft 文档 User Mode Versus Privileged Mode Processor Usage):

  • \Processor(_Total)\% Processor Time
  • \Processor(*)\% User Time
  • \Processor(*)\% Privileged Time

其中,\Processor(_Total)\% Processor Time 是 \Processor(*)\% User Time 与 \Processor(*)\% Privileged Time使用之和。

  1. 查看 \Processor(*)\% Privileged Time 数据。\Processor(*)\% Privileged Time 是应用程序在内核中执行系统调用(例如驱动、IRP,上下文切换等)操作的时间。如果操作系统花费多余 30% 的时间在Privileged Time,如下图,意味着实例正在进行高 I/O 吞吐相关的操作。

    PrivilegedTime

  2. % Privileged Time 很高时,进一步检查 % DPC Time、% Interrupt Time 以及 Context Switches/sec的情况。
  3. % DPC Time、% Interrupt Time 很高时,使用 Microsoft Xperf 工具进一步分析,可参考 Microsoft 文档 Windows IT Pro Magazine: Examining xPerf使用 XPerf 工具。
  4. Context Switch 值很高时,请参考 Microsoft 文档 The Case of the 2 Million Context Switches。还可以参考 Microsoft 文档 Mark Russinovich’s The Case of the System Process CPU Spikes
  5. 查看 \Processor(*)\% User Time 数据。\Processor(*)\% User Time 表示处理器用于执行程序代码的时间消耗,可以用来哪个应用程序/函数调用消耗了最多的时间,可参考 Microsoft 文档 How To: Identify Functions causing a High User-mode CPU Bottleneck for Server Applications in a Production Environment 及 How To: Identify Functions causing a High User-mode CPU Bottleneck for Server Applications in a Production Environment 解决高 User Time 问题。下图为高 User Time 示例:

    UserTime1

    UserTime2

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: