注意:本文大量引用 Microsoft 官方文档/工具链接,版权/所属权归 Microsoft 所有,并请您充分考虑 Microsoft Windows 产品迭代或者文档未及时更新可能带来的问题。
现象描述
Windows 实例有时会遇到 CPU 高利用率的情况。
原因分析
在某些情况下这是正常的行为,例如当您购买了 Windows Server 2012 低规格实例(如实例规格为 1 核 1 GB),实例 CPU 有时突然飙高,排查后发现 Windows Update 服务在进行自动更新。其他情况,如:病毒木马、第三方杀毒软件、应用程序异常、驱动异常、高 I/O 或高中断处理的应用程序,也会造成 CPU 占用率高。
解决方法
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 较高的应用程序。
在性能页面检查 CPU 占用率时,右击 CPU 使用率图示,单击将图形更改为 -> 逻辑处理器。如下图显示了 4 个逻辑 CPU 的利用率。
当单个进程 CPU 飙升至接近 100%,其它 CPU 变化不大,可能是网络 I/O 处理造成的。
2. 资源监视器
直观检查 CPU 使用率,还可以通过句柄和模块搜索对应的进程。
3. Process Explorer
一款 Microsoft Sysinternals 工具,通过配置正确的 Symbols,检查对应应用程序的线程调用的 Call Stack,来定位可能的问题驱动,
点此下载,并参考博文
The Case of the System Process CPU Spikes使用该工具。
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使用之和。
查看 \Processor(*)\% Privileged Time 数据。
\Processor(*)\% Privileged Time 是应用程序在内核中执行系统调用(例如驱动、IRP,上下文切换等)操作的时间。如果操作系统花费多余 30% 的时间在Privileged Time,如下图,意味着实例正在进行高 I/O 吞吐相关的操作。
% Privileged Time 很高时,进一步检查 % DPC Time、% Interrupt Time 以及 Context Switches/sec的情况。
% DPC Time、% Interrupt Time 很高时,使用 Microsoft Xperf 工具进一步分析,可参考 Microsoft 文档 Windows IT Pro Magazine: Examining xPerf使用 XPerf 工具。
Context Switch 值很高时,请参考 Microsoft 文档 The Case of the 2 Million Context Switches。还可以参考 Microsoft 文档 Mark Russinovich’s The Case of the System Process CPU Spikes。
查看 \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 示例:
如问题还未解决,请
提交工单联系阿里云。