cpu使用率100%是怎么回事?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cpu使用率100%是怎么回事?相关的知识,希望对你有一定的参考价值。

机子7年前的,之前cpu使用率还正常,昨天新装了个MC玩了一会,将win7调整为最佳性能,在系统配置里勾选了处理器数和最大内存,今天一开机基本上打开任何程序cpu使用率就会飙100%,这是咋回事?

原因一、硬件方面
电脑cpu占用过高,其实硬件方面决定着较大的因素,如果电脑配置太过老旧,那么随便开几个软件就容易导致CPU占用率过高,不管你怎么优化系统,这个问题都无法解决。所以这种情况只能通过升级硬件解决。
原因二、软件方面
软件方面涉及到的是系统问题,比如系统过于臃肿,开启过多程序,以及中病毒都会造成CPU占用率过高。所以解决办法主要通过查杀病毒、系统优化、关闭开机启动项、避免开启太多程序等等。
如果是电脑中病毒的情况下,恶意程序会大量占用CPU资源,这种情况就很容易出现CPU使用率过高。因此如果发现CPU占用过高,首先应该检查电脑是否中病毒了,运用杀毒软件进行全面查杀。
参考技术A Win
XP中CPU占用率100%原因及解决方法2007年04月08日
星期日
16:08Win
XP中CPU占用率100%原因及解决方法
我们在使用Windows
XP操作系统的时候,用着用着系统就变慢了,一看“任务管理器”才发现CPU占用达到100%。这是怎么回事情呢?遇到病毒了,硬件有问题,还是系统设置有问题,在本文中笔者将从硬件,软件和病毒三个方面来讲解系统资源占用率为什么会达到100%。
经常出现CPU占用100%的情况,主要问题可能发生在下面的某些方面:
CPU占用率高的九种可能1、防杀毒软件造成故障由于新版的KV、金山、瑞星都加入了对网页、插件、邮件的随机监控,无疑增大了系统负担。处理方式:基本上没有合理的处理方式,尽量使用最少的监控服务吧,或者,升级你的硬件配备。
2、驱动没有经过认证,造成CPU资源占用100%大量的测试版的驱动在网上泛滥,造成了难以发现的故障原因。处理方式:尤其是显卡驱动特别要注意,建议使用微软认证的或由官方发布的驱动,并且严格核对型号、版本。
3、病毒、木马造成大量的蠕虫病毒在系统内部迅速复制,造成CPU占用资源率据高不下。解决办法:用可靠的杀毒软件彻底清理系统内存和本地硬盘,并且打开系统设置软件,察看有无异常启动的程序。经常性更新升级杀毒软件和防火墙,加强防毒意识,掌握正确的防杀毒知识。
4、控制面板-管理工具-服务-RISING
REALTIME
MONITOR
SERVICE点鼠标右键,改为手动。
5、开始->;运行->;msconfig->;启动,关闭不必要的启动项,重启。
6、查看“svchost”进程。
svchost.exe是Windows
XP系统的一个核心进程。svchost.exe不单单只出现在Windows
XP中,在使用NT内核的Windows系统中都会有svchost.exe的存在。一般在Windows
2000中svchost.exe进程的数目为2个,而在Windows
XP中svchost.exe进程的数目就上升到了4个及4个以上。
7、查看网络连接。主要是网卡。
8、查看网络连接当安装了Windows
XP的计算机做服务器的时候,收到端口445上的连接请求时,它将分配内存和少量地调配CPU资源来为这些连接提供服务。当负荷过重的时候,CPU占用率可能过高,这是因为在工作项的数目和响应能力之间存在固有的权衡关系。你要确定合适的MaxWorkItems设置以提高系统响应能力。如果设置的值不正确,服务器的响应能力可能会受到影响,或者某个用户独占太多系统资源。要解决此问题,我们可以通过修改注册表来解决:在注册表编辑器中依次展开[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserver
]分支,在右侧窗口中新建一个名为“maxworkitems”的DWORD值。然后双击该值,在打开的窗口中键入下列数值并保存退出:如果计算机有512MB以上的内存,键入“1024”;如果计算机内存小于512
MB,键入“256”。
9、看看是不是Windows
XP使用鼠标右键引起CPU占用100%前不久的报到说在资源管理器里面使用鼠标右键会导致CPU资源100%占用,我们来看看是怎么回事?
参考技术B

在使用Windows XP系统的过程中,可能会出现系统的性能越来越慢的现象,打开任务管理器发现cpu的使用率达到100%,这究竟什么怎么回事呢?如何解决啊,不用担心,本文就为大家详细介绍解决方法

工具/原料

Windows XP

​​Process Explorer

方法/步骤

1、首先我们需要打开任务管理器,然后查看是哪个进程的导致使用率达到100%,根据不同的进程再作出相应的解决方法。

2、鼠标右击任务栏空白处,打开的右键菜单单击“任务管理器”或直接按“Ctrl+Alt+Del”组合键来打开任务管理器

3、打开的“Windows 任务管理器”窗口切换到“进程”选项卡,在这里就可以看到CPU的使用率

4、 正常软件造成CPU使用率占用100%​。 可调成任务管理器结果该进程,然后升级或重新安装出问题的软件

5、 故障名称: explorer.exe

具体原因: 一般附带在explorer.exe进程后台的第三方模块会导致cpu的占用率大

解决方法: 使用Process Explorer工具来查看是哪个第三方模块造成的,然后将引发问题的模块删除掉

6、 故障名称: iexplore.exe

具体原因: 后台的第三方插件造成的

解决方法: 同explorer进程的排查方法一样

7、 故障名称: system

具体原因: 驱动程序导致的,不匹配的版本或新版本出问题

解决方法: 用Process Explorer工具查看system的线程,看看哪些线程最活跃,CPU占用率最高,根据文件名判断是哪个驱动程序需要使用

8、 故障名称: svchost.exe

具体原因: 某个服务导致的

解决方法: 用Process Explorer工具查看cpu使用率过高的svchost.exe进程中的已注册服务,然后足一这些停止服务来排查是哪个服务出问题

9、 故障名称: 防病毒软件

具体原因: 防病毒软件会实时监控系统,程序在进行读取、写入等操作时,防病毒软件的监控就会被激活,并判断此操作是否对系统有害,如果程序频繁进行操作,那么防病毒软件也要进行预防、查杀操作,这样就会引发防病毒软件使用率过高的现象

解决方法: 暂时退出防病毒程序或重新启动计算机

10、 故障名称: 病毒、木马

具体原因: 大量病毒、木马文件会在系统内存中迅速复制,并不断地读取本地硬盘,写入病毒代码,造成CPU占用率过高

解决方法: 升级到最新版本的杀毒软件,然后全盘进行查杀

11、 故障名称: AVI视频文件

具体原因: 在选中一个较大的AVI视频文件,系统可能会出现假死现象,造成explorer进程使用率达到100%,这是因为系统要先对该文件进行扫描,并检查文件的所有部分,建立索引。

解决方法: 右击AVI视频文件,打开的右键菜单单击“属性”命令,进入属性界面,在“常规”选项卡下单击“高级”按钮,在打开的“高级属性”界面去掉“为了快速搜索,允许索引服务编制该文件夹的索引”复选框,单击“确定”按钮

12、 故障名称: Word文档

具体原因: 处理较大的Word文档时,CPU使用率会过高,这是因为在Word文档键入文字时,Word会检查拼写和语法

解决方法: 打开Word,单击“工具”菜单中的“选项”命令,切换到“拼写和语法”选项卡,去掉“键入时检查拼写”和“键入时检查语法”的复选框,单击“确定”按钮

13、 故障名称: 鼠标右键引起CPU占用100%

具体原因: 在使用右键菜单时出现假死现象,并且CPU的占用率达到100%

解决方法: 1、在桌面空白处鼠标右键单击“属性”命令,在“显示属性”窗口切换到“外观”选项卡,单击下面的“效果”按钮,弹出的窗口去掉“动画显示菜单和工具提示”的复选框,单击“确定”按钮2、在要使用右键菜单的文件前先单击选中该文件,接着再鼠标右键显示快捷菜单

END

教程结束,以上就是cpu使用率100%的解决方法,希望对大家有所帮助!

参考技术C 1、 CPU占用率越高,说明该程序耗用的CPU资源就越多,如果CPU一直在100%运行,说明当前运行的程序很大,很繁杂,很可能超出了CPU的承载能力,这时候所运行的程序才会感觉卡,运行不够顺畅。
2、如果没有开什么应用程序,CPU使用率就一直保持在100%,电脑很可能是中了蠕虫病毒或木马,需要杀毒。
3、假如偶尔CPU使用70%--100%,那就很正常了,特别是配置比较低的电脑(如:CPU较差或者内存过小),在运行一些比较繁杂的工作时,如:图片渲染、杀毒、运行大型游戏软件等等时,会经常出现100%的现象。
4、主机内存过小,导致CPU使用率过高,老电脑还是选性能均衡比较好,把你的设置改回默认吧,那样好一点。追问

大概是第4条,我把系统配置的处理器数和最大内存去掉就基本正常了,那么新问题就来了,我勾选了最大内存显示的明明是6G,重启后再进入系统配置却显示成2G了,而且系统属性的安装内存显示的是6G(5G可用),改回之后则显示6G,这是怎么个情况呢?机子dell原装,内存2*2G ddr2 800海力士+2G ddr2 800 金士顿。

参考技术D 玩时不要开傲游等浏览器,这种浏览器插件经常会占用100%内存,如果去除病毒原因,那就系统处理问题,重装系统,换个系统盘不要用原来的

CAS到底是怎么回事

CAS到底是怎么回事


为什么需要CAS

CAS全称为Compare And Set(比较并交换)

对于现代操作系统而言,一般都是多核机器,会存在好几个cpu,而每块cpu都单独有一套缓存和mmu等组件。

多核CPU的好处是能够实现线程级别的并发操作,极大提高程序执行效率,但是这也会导致并发问题的产生,如下面这个场景:

关于操作系统进程,线程和时间片关系,可以看这篇文章了解一下: Linux系统中 进程 、线程 、时间片的关系?


两个cpu上并行运行着一个java进程中的两个线程,这两个线程几乎同时从主存中读取变量i的值,放入高速缓存中,然后交给cpu进行自增操作,操作完后再写回高速缓存,最后再写回主存。

如果cpu要修改的内存地址在高速缓存中存在,那么称为写命中,这种情况下,有两种策略来将高速缓存中修改后的数据写回主存,分别为:

  • 全写法: 当CPU对Cache写命中时,必须把数据同时写入Cache和主存,一般使用一个缓存区来存放要写回主存的数据,然后慢慢写回主存,此时cpu可以干其他事情,这个过程由硬件实现。
  • 写回法: 当cpu对cache写命中时,只修改cache的内容,而不立即写入主存,只有当此块被换出时才会写回主存。

上面多个cpu同时并发读写同一个内存单元,显然会导致结果与预期不符,其问题本质在于对于内存单元的读写操作是非原子性的,如何保证对内存单元读写操作的原子性,这就是CAS需要完成的使命。

原子性意味着不能允许多个cpu同时读写同一块内存单元


如何实现CAS

要避免多个cpu同时读写同一块内存单元,对于从事上层应用开发的程序员而言,最先想到的就是加锁,但是cpu层面的加锁如何实现呢?

  • 更加接近机器层面的语言就是汇编语言了,我们只需要通过x86汇编语言中提供的lock前缀的指令就可以完成上述加锁功能
  • x86汇编中,如果对一个指令加“lock”前缀,会发生什么 ?

对于早期的CPU,总是采用的是锁总线的方式。具体方法是,一旦遇到了Lock指令,就由仲裁器选择一个核心独占总线。其余的CPU核心不能再通过总线与内存通讯。从而达到“原子性”的目的。

这种方式的确能解决问题,但是非常不高效。为了个原子性结果搞得其他CPU都不能干活了。因此从Intel P6 CPU开始就做了一个优化,改用Ringbus + MESI协议,也就是文档里说的cache conherence机制。这种技术被Intel称为“Cache Locking”。

根据文档原文:如果是P6后的CPU,并且数据已经被CPU缓存了,并且是要写回到主存的,则可以用cache locking处理问题。否则还是得锁总线。因此,lock到底用锁总线,还是用cache locking,完全是看当时的情况。当然能用后者的就肯定用后者。

MESI大致的意思是:若干个CPU核心通过ringbus连到一起。每个核心都维护自己的Cache的状态。如果对于同一份内存数据在多个核里都有cache,则状态都为S(shared)。一旦有一核心改了这个数据(状态变成了M),其他核心就能瞬间通过ringbus感知到这个修改,从而把自己的cache状态变成I(Invalid),并且从标记为M的cache中读过来。同时,这个数据会被原子的写回到主存。最终,cache的状态又会变为S。

这相当于给cache本身单独做了一套总线(要不怎么叫ring bus),避免了真的锁总线。

回到CAS。

我们一般说的CAS在x86的大概写法是

lock cmpxchg a, b, c 

对于一致性来讲,“lock”前缀是起关键作用的指令。cas的实现用了lock cmpxchg指令。cmpxchg指令涉及一次内存读和一次内存写,需要lock前缀保证中间不会有其它cpu写这段内存。

CAS的特性使得他称为实现任何高层“锁”的必要的构建。几乎所有的“锁”,如Mutex,ReentrantLock等都得用CAS让线程先原子性的抢到一个东西(比如一个队列的头部),然后才能维护其他锁相关的数据。并且很有意思的是,如果一个竞争算法只用到了CAS,却没有让线程“等待”,就会被称为“无锁算法”。CPU会不会有点小郁闷……


关于CAS和ABA

实际上CAS和cmpxchg压根就没处理过ABA问题。严格来说CAS就不会有ABA的问题,它只是一个简单的,原子的"比较-设置值"的指令而已。

会出ABA问题的是这种CAS的用法:

var curVal = getValue();
var newVal = modify(curVal);
compareAndSwap(getValueAddr(), curVal, newVal); // 这里是CAS

即这个代码的第一句和第三句可能看到的curVal是一样的,但是有可能造这个curVal在另一个线程ABA了。

如果真的需要解决ABA问题,需要上层代码来处理,比如

  • 把value和version放到一起形成一个变量的值(比如 "62@v1“),然后对这个变量的值做CAS。这种比较适合值本身比较简单的场景。
  • 把value和version包一个对象,然后对对象的引用做CAS(Java的AtomicStampedReference就是这么干的)。

现实工程当中,绝大部分情况下,都不需要考虑ABA问题。


关于应用层的锁和CPU的锁的关系

CPU锁和应用层的锁要解决的问题不一样。

CPU锁主要解决的是多个核心并发访问/修改同一块内存的问题。所以有锁总线和MESI协议来做。对于上层主要的抽象就是CAS。主要的招数就是用CAS+循环来抢东西。如果抢不到就只能:

  • 继续循环下去玩命抢(这时会空耗CPU)
  • 不抢了,回复给上层代码“抢不到”。

应用层的锁存在了“进程/线程“的概念(下文统一都说进程)。解决的是多个进程并发访问同一块内存的问题。比起CPU的层级来说,应用层的锁可以多一个招数,叫做“让当前进程不可调度“。这个是OS提供的支持。

因此在应用层的层次上你可以定义一个高级的“锁”,大概执行这样一个抢锁流程

  1. 尝试用CAS抢到锁
  2. 如果抢不到,则回到1重试
  3. 如果抢了几十次都还抢不到,就把当前进程(的信息)尝试挂到一个等待队列上(当然挂的过程还是要CAS)
  4. 把当前进程设定为不可调度,这样OS就不会把当前进程调度给CPU执行。(这种情况因为需要做一次系统调用,所以有比较大的损耗,一般被称为“重量级锁”)

而当某个进程释放锁时,他就可以做释放锁的流程

  1. 找到释放锁的那个等待队列
  2. 把等待队列里第一个等待的进程信息取出来,并且告诉OS,这个进程程可以执行了(这里也要做一次系统调用)
  3. 这个被复活了的进程一般需要在做一次循环尝试抢锁,然后就回到了上面的抢锁流程。

简单来说,CAS是应用层锁的building block。


参考

cas做了锁了总线或缓存行还是volatile做了锁总线或缓存行?

以上是关于cpu使用率100%是怎么回事?的主要内容,如果未能解决你的问题,请参考以下文章

电脑运作一段时间以后CPU使用率一下子达到100%是怎么回事?要如何解决?

在运行一个程序的时候CPU占100%是怎么回事?咋解决?~

电脑CPU使用率突然很高是怎么回事?

CPU使用老是100% 进程里services.exe 占用CPU非常大, 是怎么回事

我的电脑总显示CPU使用率百分之百是怎么回事啊?是内存不够么?

我的电脑cpu占用率老是接近100%是怎么回事?