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:

  1. 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.)
  2. Disabling the "Intel(R) Management Engine Interface" helped reduce the number of occasions of this problem.
  3. 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%的更多相关文章

  1. Apache服务器httpd.exe进程占用cpu超过50%的解决方法

    httpd.exe进程占用cpu超过50%,关闭掉Apache服务,cpu应用率立刻下降到0.  重新启动Apache又出现占用cpu高的情况.  原因是:httpd.exe和防火墙配置有冲突. 解决 ...

  2. 解决ccSvcHst.exe CPU占用超50%的问题,及其缘由

    无意中发现任务管理器中一个非常奇特的进程,迅速吃掉了我50%的cpu资源,并且是持续性的,于是上google一番查找,终于有了新的发现. 非常多问答产品所有都是清一色的 错误解决方式: 正常情况下,系 ...

  3. SQL语句导致cpu占用如此高

    一般我们可以使用sql server自带的性能分析追踪工具sql profiler分析数据库设计所产生问题的来源,进行有针对性的处理.但我们也可以通过自己写SQL语句来有针对性的进行性能方面的查询.通 ...

  4. SQLSERVER排查CPU占用高的情况

    SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...

  5. w3wp.exe(IIS ) CPU 占用 100% 的常见原因及解决办法

    对于IIS 管理员来说,经常会碰到 Web 服务器 CPU 占用 100% 的情况,以下是个人的日常工作总结和一些解决办法,主要用来剖析 w3wp.exe(IIS )  占用 CPU 100% 的一些 ...

  6. sql server cpu占用过高优化

    SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...

  7. Oracle SQL CPU占用高

    Oracle数据库经常会遇到CPU利用率很高的情况,这种时候大都是数据库中存在着严重性能低下的SQL语句,这种SQL语句大大的消耗了CPU资源,导致整个系统性能低下.当然,引起严重性能低下的SQL语句 ...

  8. Mysql CPU占用高的问题解决方法小结

    通过以前对mysql的操作经验,先将mysql的配置问题排除了,查看msyql是否运行正常,通过查看mysql data目录里面的*.err文件(将扩展名改为.txt)记事本查看即可.如果过大不建议用 ...

  9. 【原创】用python写的一个监测本地进程CPU占用的程序

    #coding=utf-8import psutilimport sysimport timetry:#输入需要监测的进程PID PID = raw_input('ProcessPID: ') def ...

随机推荐

  1. PHP中cURL错误号对照[转]

    PHP cURL curl_errno 在php程序编写中,使用curl函数库的几率还是挺高的,如curl_init().curl_setopt().curl_exec().curl_errno()等 ...

  2. FAQ:Python 断点调试

    Python程序调试:断点调试是必须有的功能,以Pycharm开发工具为例: 一.理论知识: 1. step into(F7)就是单步执行,遇到子函数就进入并且继续单步执行: 2  step over ...

  3. Perfmon 介绍

    1.UI 1.笔图标,可以把视图里的细线加粗. 2.加号图标.可以为视图添加新的记数器. 3.操作-->属性.可以用于设置默认的采样时间. 2.增加计数据器页面 1.一个计数据器会包涵多个对象. ...

  4. J2SE知识点摘记(十七)

    1.        Applet Applet的生命周期分为四个阶段,各阶段分别由init,start,stop和destroy四种方法来具体体现. public void init() 此方法通知A ...

  5. 十九、Android Activity初探

    原文:十九.Android Activity初探 Activity是一个应用中的组件,它为用户提供一个可视的界面,方便用户操作,比如说拔打电话.照相.发邮件或者是浏览地图等.每个activity会提供 ...

  6. c# 获取移动硬盘信息、监听移动设备的弹出与插入事件

    原文 http://www.cnblogs.com/coolkiss/p/3328825.html 备忘一下改功能,主要通过WMI来实现,对于监听外接设备的弹出和插入事件一开始使用IntPtr Wnd ...

  7. poj2186 Popular Cows --- 强连通

    给一个有向图,问有多少结点是其它全部结点都能够到达的. 等价于,在一个有向无环图上,找出度为0 的结点.假设出度为0的结点仅仅有一个,那么这个就是答案.假设大于1个.则答案是0. 这题有环.所以先缩点 ...

  8. iOS开发-object-c之 @[], @{}

    今天看别人代码的时候发现这样的用法 navigationController.viewControllers = @[secondViewController]; 这里用到了@[]. 刚开始不是很明白 ...

  9. Javascript 基础编程练习一

    Javascript 基础互动编程,这篇练习结合了function 函数名(), onclick 时间, prompt输入窗口, window.open和confirm窗口, 任务 1.新窗口打开时弹 ...

  10. 怎么增加照片的KB大小

    之前都是要想办法压缩图片的大小 今天有人发来一张1.8MB的图片让我帮忙调到30MB左右 一下子放大这么多着实有点茫然 之后想到了一个办法 首先把图片占用体积变大,是不会增加清晰度的,而减小占用体积却 ...