本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
在Windows系统中,可以通过任务管理器、资源监视器等工具查看CPU使用率。本文主要介绍Windows实例中CPU使用率较高问题的排查及解决方法。
问题现象
使用 Windows 系统的ECS实例时,出现如下现象。
系统运行卡顿、服务响应时长较长、应用性能下降等问题。
通过ECS控制台查看实例 CPU 使用率监控时,发现CPU使用率或者负载过高(参考值:当前CPU 使用率> 80%,可认为CPU使用率过高,当前负载值>0.5,可以认为负载值过高)。
收到CPU使用率或者负载超过设定阈值的告警信息。
可能原因
CPU使用率较高可能有以下原因。
ECS实例遭到病毒木马入侵。
ECS实例中第三方杀毒软件运行占用较高CPU资源。
ECS实例中应用程序异常、驱动异常、高I/O使用率或高中断处理的应用程序。
排查步骤
使用资源监视器查看CPU使用率指标
在Windows实例中,可以通过任务管理器、资源监视器等工具定位CPU使用率过高的问题。本文以Windows Server 2022系统为例,介绍如何通过资源监视器定位CPU使用率较高的问题。其他常见工具,请参见常见工具。
通过VNC方式连接ECS实例。
具体信息,请参见通过VNC连接实例。
在桌面底部单击搜索按钮,并输入
资源监视器
,单击确定。在资源监视器页面中,查看各进程是否有CPU使用率过高的现象。
针对占用CPU资源较高的进程,查看对应的进程ID和进程的程序名。
打开任务管理器,任务管理器的详细信息页签下,找到之前资源监视器查看到的异常进程名和对应的PID。右键单击进程名称,选择打开文件所在的位置(O),查看进程是否为恶意程序。
处理CPU使用率高的问题
常见CPU占用较多问题的原因及解决方案如下。
问题现象 | 原因 | 解决方案 |
异常用户程序或进程长时间占用大量CPU资源,导致CPU使用率和负载较高。 | 该程序为异常程序或进程,运行时占用过多CPU资源。 |
|
正常用户程序或进程长时间占用大量CPU资源。导致CPU使用率和负载较高。 | 该程序为正常业务程序或进程,运行时占用过多CPU资源。 | 如果实例出现CPU性能瓶颈,您可以结合实际情况选择相应的处理策略。
|
单个业务程序或进程偶发CPU使用率及负载较高,但持续时间较短,且发生频率较低。 | 业务程序需要优化,以解决特殊业务场景(加解密,高并发等)触发的CPU资源占用过高问题。 | 优化业务程序。 |
没有单个程序或进程占用大量CPU资源,但整体CPU使用率较高,负载较低。 | 当前实例的服务正常运行所需CPU资源性能大于实例的CPU性能。 | 如果实例出现CPU性能瓶颈,您可以选择升级实例规格。相关操作,请参见修改实例规格。 |
常见工具
以下是关于Windows系统中定位CPU使用率过高问题工具的简要说明。
任务管理器
任务管理器可以直观查看应用程序列表,定位占用CPU较高的应用程序,如下是任务管理器页面。
在性能页面检查CPU使用率时,右键单击CPU使用率图示,单击
。如下图显示了2个逻辑CPU的使用率。
当单个进程的CPU使用率飙升至接近100%时,而其它进程的CPU使用率变化不大,则可能是网络I/O处理造成的。
资源监视器
资源监视器可以直观查看CPU使用率,还可以通过句柄和模块搜索对应的进程。
Process Explorer
Process Explorer是一款Microsoft Sysinternals工具,通过配置正确的Symbols,检查对应应用程序的线程调用的Call Stack,用以定位可能的问题驱动。下载Process Explorer工具,请参见Process Explorer。
如下图是Process Explorer工具使用页面。
性能监视器
性能监视器(Performance Monitor)是Microsoft专业收集各个组件性能计数器的工具。对于系统CPU资源消耗,有多个Counter来检查。
Performance有如下三个核心参数。
\Processor(_Total)\% Processor Time
:CPU执行非空闲线程的时间百分比。\Processor(_Total)\% Processor Time
=\Processor(*)\% User Time
+\Processor(*)\% Privileged Time
.\Processor(*)\% User Time
:表示处理器用于执行程序代码的时间消耗,可以确定哪个应用程序或函数调用消耗了较多的时间。\Processor(*)\% Privileged Time
:应用程序在内核中执行系统调用(例如驱动、IRP,上下文切换等)操作的时间。如果操作系统花费多于30%的时间在Privileged Time
,则说明实例正在进行高I/O吞吐相关的操作。当
% Privileged Time
很高时,需要进一步检查% DPC Time
、% Interrupt Time
以及Context Switches/sec
的情况。高
% DPC Time
、% Interrupt Time
表示未知设备出现大量的操作或者很差的性能问题。Context Switch
值很高时,说明内核在CPU上对进程或线程进行切换。更多详情,请参见The Case of the 2 Million Context Switches和Mark Russinovich's The Case of the System Process CPU Spikes。Context Switches/sec
值很高表示有大量的线程处于Ready状态,需要减少线程的数量解决问题。
相关文档
如需解决Linux系统CPU使用率高的问题,请参见Linux实例CPU使用率或负载较高问题的排查及解决方案。