问题描述
Windows中CPU使用率较高。
可能原因
CPU使用率较高的可能原因如下。
病毒木马入侵。
第三方杀毒软件运行。
应用程序异常、驱动异常、高I/O使用率或高中断处理的应用程序。
解决方案
步骤一:定位问题
微软有多个工具可以定位CPU使用率过高的问题,例如任务管理器、资源监视器(Resource Monitor)、性能监视器(Performance Monitor)、Process Explorer、Xperf(Windows server 2008 以后)、KernRate(Windows server 2003),抓取系统Full Memory Dump进行检查。在流量大的情况下,您还可以使用Wireshark抓取一段时间的网络包,分析流量使用情况。
说明
Windows Server 2008以上系统,通常使用系统自带的资源监视器监控CPU。
登录windows服务器。
在桌面底部单击开始菜单,选择运行。
打开运行框后,在框中输入
perfmon -res
,并单击确定。在资源监视器页面中,查看各进程是否有CPU使用率过高的现象。
针对占用资源较高的进程,查看对应的进程ID和进程的程序名。
定位进程ID后,结合任务管理器判断程序是否异常并定位程序的具体位置。
定位异常进程前,需要在任务管理器中依次单击查看(V) > 选择列(S)。
在弹出的框中选择PID(进程标识符),单击确定。
在任务管理器的进程页面中,单击PID,通过排序找到之前资源监视器查看到的异常进程。右键单击进程名称,选择打开文件位置,查看进程是否为恶意程序。
步骤二:分析处理
判断影响CPU使用率过高的进程属于正常进程或是异常进程,并按照下述相应步骤处理。
可能原因 | 具体操作 |
正常进程 | 一般情况下,当客户频繁访问业务,或由于Windows自身服务(更新服务等)都可能会占用较高网络流量和CPU 。 说明
|
异常进程 | 对于CPU异常使用率过高的情况,可能是被恶意病毒、木马入侵导致的。有时三方恶意程序可能会利用操作系统的svchost.exe或者Tcpsvcs.exe来伪装,引起高CPU的占用。您需要手动对异常进程进行查杀。 说明 若您无法判断进程是否为病毒或木马,建议将进程名称在网上进行搜索后确认。
|
更多信息
以下是关于Windows实例排查工具推荐的相关内容。
任务管理器
直观检查应用程序列表,定位占用CPU较高的应用程序,如下是任务管理器页面。
在性能页面检查CPU使用率时,右键单击CPU使用率图示,单击将图形更改为 > 逻辑处理器。
如下图显示了4个逻辑CPU的使用率。
当单个进程的CPU使用率飙升至接近100%时,而其它进程的CPU使用率变化不大,则可能是网络I/O处理造成的。
资源监视器
直观检查CPU使用率,还可以通过句柄和模块搜索对应的进程。
Process Explorer
Process Explorer是一款Microsoft Sysinternals工具,通过配置正确的Symbols,检查对应应用程序的线程调用的Call Stack,用以定位可能的问题驱动。下载Process Explorer工具。
如下图是Process Explorer工具使用页面。
性能监视器
性能监视器(Performance Monitor)是Microsoft专业收集各个组件性能计数器的工具。对于系统CPU资源消耗,有多个Counter来检查。通过单击开始 > 运行 > perfmon,打开性能监视器。
Performance有如下三个核心参数。其中
\Processor(_Total)\% Processor Time
是\Processor(*)\% User Time
与\Processor(*)\% Privileged Time
之和。\Processor(_Total)\% Processor Time
\Processor(*)\% User Time
\Processor(*)\% Privileged Time
\Processor(*)\% Privileged Time
是应用程序在内核中执行系统调用(例如驱动、IRP,上下文切换等)操作的时间。如果操作系统花费多余30%的时间在Privileged Time
,如下图所示,则说明实例正在进行高I/O吞吐相关的操作。当
% Privileged Time
很高时,需要进一步检查% DPC Time
、% Interrupt Time
以及Context Switches/sec
的情况。高
% DPC Time
、% Interrupt Time
意味着未知设备出现大量的操作或者很差的性能问题,请参考如下文档。高
Context Switches/sec
意味着有大量的线程处于Ready状态,需要减少线程的数量解决问题。
% DPC Time
、% Interrupt Time
很高时,需使用Microsoft Xperf工具进一步分析,请参考如下文档使用XPerf工具。Context Switch值很高时,请参考如下文档。
\Processor(*)\% User Time
表示处理器用于执行程序代码的时间消耗,可以确定哪个应用程序或函数调用消耗了较多的时间。高
User Time
情况如下图所示。