ThinkPad x200为何总是CPU占用50%
2009年,我从美国买回一台ThinkPad X200 Tablet,Windows XP Tablet PC Edition 2005版,服役几年一直很正常。直到2012年初的时候,突然发现电脑非常的慢,打开文件夹都特别慢。十分奇怪,于是我打开任务管理器Task Manager,吃惊的看到system进程持续占用50%,傻眼了。这让正常的进程怎么活啊。
于是,我便开始了漫长的寻找原因的过程。
首先,用Process Explorer看看进程的情况,在System进程下,子进程Interrupts占用50%。说明有大量的中断请求反复的出现,而且是潮水般的非正常的情况。立刻怀疑可能是某个硬件故障,导致大量无效的中断。打开Interrupts属性,看看线程Threads的情况,一个家伙反复出现,ntkrnlpa.exe,而且CSwitch非常高。由于ntkrnlpa是一个WinNT Kernel核心,所以初步估计是一个基础硬件功能不停的触发中断所致。
无奈只能继续分析ntkrnlpa.exe的中断请求统计情况。使用KrView工具,输入kernrate_i386_XP.exe -s 5 -z ntkrnlpa -v。这时能看见中断执行模块的统计结果,此时占用率最高的是KdDebuggerDataBlock和RtlIpv6StringToAddressA。开始稍微有点眉目了,怀疑是网卡出问题了。
关于KrView的使用情况,可以看看这里
http://forum.sysinternals.com/kernrate-trace-rtlipv6stringtoaddressa_topic19138.html
http://forum.sysinternals.com/hardware-interrupts-30-kernrates-ntkrnlpaexe_topic19231.html
这里要强调一个地方,使用KrView需要下载symbols(dbghelp.dll,symsrv.dll),不然模块名会出现NtBuildNumber,那就真的一头雾水了。
关于symbols的下载,详细看这里
http://forum.sysinternals.com/kernrate-trace-need-help_topic14768.html
问题跟踪到了这里,棘手的问题开始出现了。我怎么知道这个KdDebuggerDataBlock和RtlIpv6StringToAddressA是由谁调用的?如果不能找到问题的源头,就根本不能解决问题。我开始迷茫了。
于是我开始研究系统中断DPCs原理,希望能找到问题的根源。
无奈,看了一部分资料后,我放弃了。DPCs非常复杂,一时半伙弄不明白。即使道理弄懂了,离实际解决问题还有很大的距离。
http://analyze-v.com/?p=598
研究中断原理的道路,走到这里就到尽头了。以我现有的能力无法进行下去,有太多基础的知识需要补充了。
为了解决问题,我只能另辟蹊径。
我先开始试试,把网卡禁用,问题依旧。
然后我便尝试寻找lenovo的技术支持。结果皇天不负有心人,真的给我发现了这个。
http://forums.lenovo.com/t5/X-Series-ThinkPad-Laptops/x200-Hardware-Interrupts-constantly-at-40-of-CPU-resources/td-p/98869
根据第3页MikeSL的回答,问题出在显卡的驱动上,更新驱动的版本就可以解决了。
原话如下
This isn't a specific fix for this specific issue, but I've found with a very similar "excessive hardware interrupts" scenario I experienced over the past few months (Windows XP, Thinkpad T61) that:
- There was ample evidence in the output of the KrView.exe tool (KernRate from Microsoft) that these issues were caused by drivers that were responding to (or firing off) APIs with names like "AddDevice()", and that the vast majority of the unnecessary/excessive/CPU-consuming interrupts were directly related to these API calls. (Note: KernRate is likely not supported on Windows Vista - at the very least, Microsoft strongly encourages those with Vista/Server 2008 or later to use the Windows Performance Analysis Tools in place of KernRate. I have no experience using these tools, and cannot guess whether they provide similar detailed kernel tracing capabilities, but I surely hope so.)
- Disabling the "Intel(R) Management Engine Interface" helped reduce the number of occasions of this problem.
- Upgrading the "Mobile Intel(R) 965 Express Chipset Family" driver to the latest (v6.14.10.5029) finally stopped the last remaining case of these excessive Hardware Interrupts from occurring.
My conclusion? This is not an uncommon type of API call for a driver to make/respond to - since many device drivers, such as multi-output video adapters and other hardware-controlling devices are trying to emulate the Windows "plug and play" behaviour. Thus, it's likely there are many potential sources of these "excessive Hardware Interrupts", and addressing each potential troublesome driver is the only way to drive *all* the sources of the error to ground. Thankfully I don't seem to *need* the Intel ME Interface driver for my computer to operate, and thankfully there was a recently-released version of the 965 video driver that didn't have the issue. YMMV, and it's a long road to travel (I spent at least two months obsessively pursuing this issue), but I suspect there almost always *are* solutions, if you're patient and persistent enough.
至此,真的是山穷水复疑无路,柳暗花明又一村啊。心情非常激动,立刻开始更新驱动,问题完美解决。
ThinkPad x200为何总是CPU占用50%的更多相关文章
- Apache服务器httpd.exe进程占用cpu超过50%的解决方法
httpd.exe进程占用cpu超过50%,关闭掉Apache服务,cpu应用率立刻下降到0. 重新启动Apache又出现占用cpu高的情况. 原因是:httpd.exe和防火墙配置有冲突. 解决 ...
- 解决ccSvcHst.exe CPU占用超50%的问题,及其缘由
无意中发现任务管理器中一个非常奇特的进程,迅速吃掉了我50%的cpu资源,并且是持续性的,于是上google一番查找,终于有了新的发现. 非常多问答产品所有都是清一色的 错误解决方式: 正常情况下,系 ...
- SQL语句导致cpu占用如此高
一般我们可以使用sql server自带的性能分析追踪工具sql profiler分析数据库设计所产生问题的来源,进行有针对性的处理.但我们也可以通过自己写SQL语句来有针对性的进行性能方面的查询.通 ...
- SQLSERVER排查CPU占用高的情况
SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...
- w3wp.exe(IIS ) CPU 占用 100% 的常见原因及解决办法
对于IIS 管理员来说,经常会碰到 Web 服务器 CPU 占用 100% 的情况,以下是个人的日常工作总结和一些解决办法,主要用来剖析 w3wp.exe(IIS ) 占用 CPU 100% 的一些 ...
- sql server cpu占用过高优化
SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...
- Oracle SQL CPU占用高
Oracle数据库经常会遇到CPU利用率很高的情况,这种时候大都是数据库中存在着严重性能低下的SQL语句,这种SQL语句大大的消耗了CPU资源,导致整个系统性能低下.当然,引起严重性能低下的SQL语句 ...
- Mysql CPU占用高的问题解决方法小结
通过以前对mysql的操作经验,先将mysql的配置问题排除了,查看msyql是否运行正常,通过查看mysql data目录里面的*.err文件(将扩展名改为.txt)记事本查看即可.如果过大不建议用 ...
- 【原创】用python写的一个监测本地进程CPU占用的程序
#coding=utf-8import psutilimport sysimport timetry:#输入需要监测的进程PID PID = raw_input('ProcessPID: ') def ...
随机推荐
- 使用cmake安装mysql5.5.13
MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. 安装cmake : tar zxvf ...
- python request使用
相比httplib.urllib,request真是太美丽了,记录下 下载安装地址:http://docs.python-requests.org/en/latest/user/install/#in ...
- 【算法】超大数组去重(Java语言实现)
要求时间复杂度和空间复杂度尽可能低! 情景一:需要返回的是不重复的数组. 情景二:只需要返回不重复的元素个数.
- git/github 笔记
2016-1-9 创建github repos并提交修改 在[这里](https://github.com/new)创建一个repos, 进入终端,cd到一个目录下,这个目录用来放等下clone的工程 ...
- android 自定义控件,自定义属性设置
做listView的上拉下拉刷新,网上找了个历程.但是有些界面只有上拉刷新,有些界面是下拉刷新.觉得应该在xml里定义一个属性控制上下拉使能. 0.关于自定义控件: 自定义控件设计主要方式有:a) 继 ...
- JS中String的反转函数
利用prototype封住reverse方法: (求更简便的方法: String.prototype.reverse=function () { var str=""; for(v ...
- Redis用户添加、分页、登录、注册、加关注案例
连接redis代码redis.php <?php //实例化 $redis = new Redis(); //连接服务器 $redis->connect("localhost&q ...
- MFC非模态对话框销毁
非模态对话框需要重载OnCanel方法, 并调用DestroyWindow, 且不能调用基类的OnCanel重载PostNcDestroy, 需要delete掉this指针 // Overrides ...
- Ubuntu小私房(3)--Uubutnu启动美化大变身
Grub是什么? GNU GRUB 和GRUB是GRand Unified Bootloader的缩写,它是一个多重操作系统启动管理器.用来引导不同系统,如windows,linux.GRUB是多启动 ...
- 核心基础以及Fragment与Activity传递数据完整示例
MainActivity如下: package cc.testsimplefragment0; import android.os.Bundle; import android.app.Activit ...