Windows云服务器CPU使用率高怎么办?
问题描述
使用Windows操作系统的弹性云服务器时,出现下列现象:
- 系统运行卡顿、服务响应时长较长、应用性能下降等。
- 通过云监控查看云服务器的CPU使用率监控指标,发现当前CPU使用率大于80%(参考值),可认为CPU使用率过高,当前负载值大于0.5(参考值),可认为负载值过高。
- 收到CPU使用率或者负载超过设定阈值的告警信息。
可能原因
CPU使用率较高可能有以下原因:
- 云服务器遭到病毒木马入侵。
- 云服务器中第三方杀毒软件运行占用较高CPU资源。
- 云服务器中存在应用程序异常、驱动异常、高I/O使用率或高中断处理的应用程序。
处理方法
- 登录弹性云服务器,具体操作,请参见Windows ECS登录方法概述。
- 在桌面底部单击“
”按钮,或打开Win后单击搜索框,输入“资源监视器”进行搜索。
- 在“资源监视器”窗口,单击“CPU”页签,查看各进程是否有CPU使用率过高的现象。
- 针对占用CPU资源较高的进程,查看对应的进程ID和进程的程序名。
- 打开“任务管理器”,单击左侧导航的“详细信息”,找到步骤4中的异常进程名和对应的PID。
- 右键单击异常进程的名称,选择“打开文件所在的位置(O)”,查看进程是否为恶意程序。
图2 任务管理器
- 观察CPU使用率情况,根据具体场景进行处理。
- 场景一:正常用户程序/进程长时间占用大量CPU资源。
可以根据实际情况变更单台ECS规格到更大的规格或优化业务程序。
- 场景二:异常用户程序/进程长时间占用大量CPU资源。
- 通过资源监视器或任务管理器右键该进程选择结束进程。
结束进程前请确保您了解该进程的相关信息,避免误操作导致业务中断。
- 如果怀疑该进程属于恶意程序,可以进行查杀,可参考病毒查杀。
- 通过资源监视器或任务管理器右键该进程选择结束进程。
- 场景三:没有单个程序/进程占用大量CPU资源,但整体CPU使用率较高,负载较低。
可能是因为当前实例的服务正常运行所需的CPU资源性能大于实例本身的CPU性能,存在CPU性能瓶颈。
您可以选择升级实例规格,可参考变更单台ECS规格。
- 场景四:单个业务程序/进程偶发CPU使用率及负载较高,但持续时间较短且频率较低。
需要优化业务程序,解决特殊业务场景(如加解密、高并发等)触发的CPU资源占用过高的问题。
- 场景一:正常用户程序/进程长时间占用大量CPU资源。
查看CPU的常见工具
- 任务管理器
- 任务管理器的“进程”页签中,可以直观查看应用程序列表,定位CPU占用较高的应用程序。
图3 任务管理器“进程”页签
- 任务管理器的“性能”页签中,右键单击CPU使用率图示,单击“图形更改为(H) > 逻辑处理器(L)”。
图4 任务管理器“性能”页签
- 当单个进程的CPU使用率飙升至100%,而其他进程的CPU使用率变化不大时,可能是由于网络I/O处理造成的。
- 任务管理器的“进程”页签中,可以直观查看应用程序列表,定位CPU占用较高的应用程序。
- 资源监视器
资源监视器可以直观查看CPU使用率,还可以通过句柄和模块搜索对应的进程。图5 资源监视器
- Process Explorer
Process Explorer是一款Microsoft Sysinternals工具,通过配置正确的Symbols,检查对应应用程序的线程调用的Call Stack,用以定位可能的问题驱动。
下载链接,请参考Precess Explorer。
图6 Process Explorer - 性能监视器
性能监视器(Performance Monitor)是Microsoft专业收集各个组件性能计数器的工具。对于系统CPU资源消耗,有多个Counter来检查。
在WIndows的搜索框中输入“性能监视器”即可打开,在曲线图区域右键单击“添加计数器(D)”,可以根据需要增加。
图7 性能监视器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的情况。
- \Processor(_Total)\% Processor Time:CPU执行非空闲线程的时间百分比。