暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Windows中CPU使用率较高问题的排查及解决方法

原创 watson 2023-01-11
895

问题描述

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。

  1. 登录windows服务器。

  2. 在桌面底部单击开始菜单,选择运行

  3. 打开运行框后,在框中输入perfmon -res,并单击确定1

  4. 在资源监视器页面中,查看各进程是否有CPU使用率过高的现象。2

  5. 针对占用资源较高的进程,查看对应的进程ID和进程的程序名。

  6. 定位进程ID后,结合任务管理器判断程序是否异常并定位程序的具体位置。

    1. 定位异常进程前,需要在任务管理器中依次单击看(V) > 选择列(S)3

    2. 在弹出的框中选择PID(进程标识符),单击确定4

    3. 在任务管理器的进程页面中,单击PID,通过排序找到之前资源监视器查看到的异常进程。右键单击进程名称,选择打开文件位置,查看进程是否为恶意程序。

步骤二:分析处理

判断影响CPU使用率过高的进程属于正常进程或是异常进程,并按照下述相应步骤处理。

可能原因

具体操作

正常进程

一般情况下,当客户频繁访问业务,或由于Windows自身服务(更新服务等)都可能会占用较高网络流量和CPU 。

说明

  • 检查后台是否有执行Windows Update的行为。

  • 建议在服务器上安装杀毒软件进行杀毒。如有安装杀毒软件,请检查CPU使用率较高时,杀毒软件是否在后台执行扫描操作。如果可能,请升级杀毒软件到最新版本,或者删除杀毒软件。

  • 若自身服务器配置较高,再去升级配置已无太大意义。架构方面也并非是服务器配置越高就越好。此时,您需要尝试进行应用分离,通过不同的服务器去承载不同的应用,同时对相关程序进行优化。

    程序优化方面,您可以根据自身的配置状况进行调整,具体的操作有调整连接数、缓存配置、Web和数据库调用时的各项参数等。

异常进程

对于CPU异常使用率过高的情况,可能是被恶意病毒、木马入侵导致的。有时三方恶意程序可能会利用操作系统的svchost.exe或者Tcpsvcs.exe来伪装,引起高CPU的占用。您需要手动对异常进程进行查杀。

说明 

若您无法判断进程是否为病毒或木马,建议将进程名称在网上进行搜索后确认。

  • 使用商业版杀毒软件,或使用微软免费安全工具Microsoft Safety Scanner,在安全模式下进行扫描杀毒。

  • 运行Windows Update来安装最新的微软安全补丁。

  • 使用MSconfig禁用所有非微软自带服务驱动,检查问题是否再次发生。

更多信息

以下是关于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很高时,需使用Microsoft Xperf工具进一步分析,请参考如下文档使用XPerf工具。

  • Context Switch值很高时,请参考如下文档。

  • \Processor(*)\% User Time表示处理器用于执行程序代码的时间消耗,可以确定哪个应用程序或函数调用消耗了较多的时间。

  • User Time情况如下图所示。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论