开发者社区> 问答> 正文

云服务器 Windows 实例 CPU 高占用率的处理及工具都有哪些


注意:本文大量引用 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 较高的应用程序。

  • 在性能页面检查 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使用之和。

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

  2. % 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 EnvironmentHow To: Identify Functions causing a High User-mode CPU Bottleneck for Server Applications in a Production Environment 解决高 User Time 问题。下图为高 User Time 示例:


  • 如问题还未解决,请 提交工单联系阿里云。

    展开
    收起
    boxti 2017-10-24 11:01:30 3172 0
    0 条回答
    写回答
    取消 提交回答
    问答排行榜
    最热
    最新

    相关电子书

    更多
    如何运维千台以上游戏云服务器 立即下载
    网站/服务器取证 实践与挑战 立即下载
    ECS计算与存储分离架构实践 立即下载