问题说明:
云服务器中CPU使用率较高问题的排查及解决方法。通常CPU使用率较高可能的原因有,病毒木马入侵、第三方杀毒软件运行、应用程序异常、驱动异常、高I/O使用率或高中断处理的应用程序等。
解决方法:
方法1:定位问题。
找到影响CPU使用率过高的具体进程。微软有多个工具可以定位CPU使用率过高的问题,例如任务管理器、资源监视器(Resource Monitor)、性能监视器(Performance Monitor)、Process Explorer、Xperf(Windows server 2008 以后)、KernRate(Windows server 2003),抓取系统Full Memory Dump进行检查。在流量大的情况下,您还可以使用Wireshark抓取一段时间的网络包,分析流量使用情况。
1)在桌面底部单击开始菜单,选择 运行。打开运行框后,在框中输入perfmon -res,并单击 确定。
2)在资源监视器页面中,查看各进程是否有CPU使用率过高的现象。
3)针对占用资源较高的进程,查看对应的进程ID和进程的程序名。
4)定位进程ID后,结合任务管理器判断程序是否异常并定位程序的具体位置。
a.定位异常进程前,需要在任务管理器中依次单击查看选择列。
b.在弹出的框中选择 PID(进程标识符),单击 确定。
c.在任务管理器的进程页面中,将会增加PID这一项。单击 PID,通过排序,找到之前资源监视器查看到的异常进程。右键单击进程名称,选择打开文件位置,查案进程是不是恶意程序。
方法2:分析处理。
需要判断影响CPU使用率过高的进程,属于正常进程还是异常进程,并分类进行处理。
1)正常使用率过高的分析处理。
正常情况下,当客户频繁访问业务,或由于Windows自身服务(更新服务等)都可能会占用较高网络流量和CPU 。针对正常进程导致的CPU使用率过高的情况,请按照如下顺序逐一进行排查。
a.检查后台是否有执行Windows Update的行为。
b.建议在服务器上安装杀毒软件,进行杀毒。如有安装杀毒软件,请检查CPU飙高时,杀毒软件是否在后台执行扫描操作。如果可能,请升级杀毒软件到最新版本,或者删除杀毒软件。
c.检查该ECS内应用程序是否有大量的磁盘访问、网络访问行为或高计算需求。通过尝试增配实例规格的方式,使用更多核数或内存的规格来解决资源瓶颈问题,如升级配置。
d.若自身服务器配置较高,再去升级配置已经没有太大意义。架构方面也并非是服务器配置越高就越好。此时,您需要尝试进行应用分离,同时对相关程序进行优化。示例说明如下。
2)异常使用率过高的分析处理。
对于CPU异常使用率过高的情况,可能是被恶意病毒、木马入侵导致的。有时三方恶意程序可能会利用操作系统的svchost.exe或者Tcpsvcs.exe来伪装,引起高CPU的占用。您需要手动对异常进程进行查杀。
a.使用商业版杀毒软件,或使用微软免费安全工具Microsoft Safety Scanner,在安全模式下进行扫描杀毒。
b.运行Windows Update来安装最新的微软安全补丁。
c.使用MSconfig禁用所有非微软自带服务驱动,检查问题是否再次发生。
d.若服务器或站点遭受DDoS攻击或CC攻击等,短期内产生大量的访问需求。您可以登录云安全中心,查看云盾中的防护DDoS攻击是否调整好阈值,并核实是否开启CC防护。如果攻击没有触发到阈值,云盾没有清洗,可以联系阿里云售后协助开起清洗。
方法3:解决流程。
1)CPU使用率较高时,检查后台是否正在执行Windows Update的进程。
2)检查杀毒软件在后台是否正在执行扫描操作。可以升级杀毒软件到最新版本,或者删除杀毒软件。
3)单击 运行,然后输入 MSCONFIG,禁用所有非Microsoft自带服务驱动,然后检查问题是否再次发生。
4)使用商业版杀毒软件或Microsoft安全扫描程序在安全模式下扫描杀毒。
5)运行Windows Update安装最新Microsoft安全补丁。
6)当ECS实例有大量的磁盘访问、网络访问和高计算需求时,CPU使用率较高是正常现象,可以通过升级实例规格的方式以应对资源不足问题。
7)任务管理器。
a.直观检查应用程序列表,定位占用CPU较高的应用程序,如下是任务管理器页面。
b.在性能页面检查CPU使用率时,右键单击CPU使用率图示,单击 将图形更改为 > 逻辑处理器。如下图显示了4个逻辑CPU的使用率。
c.当单个进程的CPU使用率飙升至接近100%时,而其它进程的CPU使用率变化不大,则可能是网络I/O处理造成的。
8)资源监视器。直观检查CPU使用率,还可以通过句柄和模块搜索对应的进程。
9)Process Explorer。Process Explorer是一款Microsoft Sysinternals工具,通过配置正确的Symbols,检查对应应用程序的线程调用的Call Stack,用以定位可能的问题驱动。