Loading
0

Windows 服务器CPU占用高的处理解决办法

客户使用Windows时会遇到CPU高利用率的情况,在某些情况下这是正常的行为,例如客户购买了低规格(例如1核1G的ECS)安装了Windows 2012 服务器,有时会发现服务器的CPU突然飙高,定位下来发现是Windows Update服务在进行自动更新。但是在某些情况下,由于病毒木马,三方杀毒/网络防护软件,应用程序/驱动异常,运行高IO或者高中断处理的应用程序等情况下也会造成CPU占用率高。本文根据日常处理中遇到的高CPU问题以及微软官方文档,总结下如何处理CPU高的问题。

最佳实践

如果希望快速解决问题,请尝试如下方法:

  • 如果有安装杀毒软件,请检查CPU飙高时,杀毒软件是否在后台执行扫描操作。如果可能,请升级杀毒软件到最新版本,或者删除杀毒软件;
  • 使用MSconfig禁用所有非微软自带服务驱动,检查问题是否再次发生,具体参考微软KB How to perform a clean boot in Windows;
  • 请使用商业版杀毒软件,或者使用微软免费安全工具Microsoft Safety Scanner在安全模式下扫描杀毒,链接如下
    https://www.microsoft.com/security/scanner/zh-cn/default.aspx
  • 检查CPU飙高时,是否后台有执行Windows Update的行为;
  • 运行Windows Update来安装最新的微软安全补丁;
  • 如果该ECS内应用程序有大量的磁盘访问/网络访问行为/高计算需求,高CPU很可能是正常结果,您可以尝试增配实例规格的方式,使用更多核数/内存的规格来解决资源瓶颈问题。

注:请参考微软官方博文
How to troubleshoot high cpu in the System process

排查指南

如果需要定位为何出现CPU高的原因,可以参考微软官方博客说明,微软有多个工具可以定位CPU高的问题,例如任务管理器,资源监视器(Resource Monitor), 性能监视器(Performance Monitor), Process Explorer,Xperf (Windows server 2008以后), KernRate(Windows server 2003),抓取系统Full Memory Dump检查。

任务管理器

可以直观检查应用程序列表获取哪个应用程序占用CPU较高。点击CPU列可以按照CPU使用率排序。

在任务管理器的"性能"页中检查CPU占用率,注意在右侧CPU使用率图示,请右键选择"将图形更改为"->"逻辑处理器"。如下图显示了4个逻辑CPU的利用率。

技巧:如果仅仅看到某个CPU飙升到接近100%, 但是其它CPU变化不大,很可能是网络IO的处理造成。

资源监视器

直接检查CPU的使用率,还可以通过句柄和模块搜索对应的进程。

Process Explorer

微软官方sysinternals工具,下载链接如下:
https://technet.microsoft.com/en-us/sysinternals/processexplorer.aspx
该工具非常强大,在检查高CPU问题方面,通过配置正确的Symbols,可以通过检查对应应用程序的线程调用的Call Stack,来定位可能的问题驱动。

关于使用实例,请参考微软专家Mark Russinovich 的博文  The Case of the System Process CPU Spikes

性能监视器/Xperf

性能监视器(Performance Monitor)是微软专业收集各个组件性能计数器的工具。对于系统CPU资源消耗,有多个Counter来检查。通过开始->运行->perfmon打开该工具。
微软博文User Mode Versus Privileged Mode Processor Usage 描述了Performance的3个核心Counter
“\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 ,那么意味着其可能在进行高IO吞吐相关的操作。下图是Privileged Time高的示例:

此时,请进一步检查 % DPC Time、% Interrupt Time、Context Switches/sec的情况。

如果% DPC Time、% Interrupt Time值较高,请参考文档:
    Choose Your Own Adventure: High Deferred Procedure Calls (DPCs) or High Interrupts

【声明】:8090安全小组门户(http://www.8090-sec.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们:邮箱hack@ddos.kim,我们会在最短的时间内进行处理。