如果很不幸——蓝屏了怎么办?记一次奇怪的蓝屏IRQL_NOT_LESS_OR_EQUAL
不知从什么时候,我的电脑出现了一个奇怪的问题,在某些软件里上传文件的时候只要一上传就出现IRQL_NOT_LESS_OR_EQUAL的错误,然后蓝屏重启。最开始是IE会这样,后来连chrome都是这样。谷歌百度了半天都没有找出原因,今天又出现了,终于解决了这个问题。这里记一下,希望能帮助到遇到类似情况的朋友。
首先亮出我的配置:
机器:DELL M800
内存:16GB
显卡:Intel集显+Nvidia k2100M
其他信息无关紧要,就不罗列了。
说一下遇到的问题及解决办法。
问题:在浏览器(IE或者chrome)上传文件时瞬间蓝屏,重启后问题依旧。
解决过程:
1.在谷歌搜索browser upload blue screen,然后出来一堆结果,通过标题和摘要信息过滤到不相关的,在打开相关页面查看,其中有一个说是内存问题,部分内存坏了。于是下载了个内存测试软件MemTest64(下载:http://nl1-dl.techpowerup.com/files/5Ppc_mWYURA3ZxYB6kkLbg/1519796308/MemTest64.exe),下载来运行软件提示我虚拟内存小(我设置了4GB),好吧,让windows自动管理,虚拟内存跟实际内存一样大了。结果测试了半天,没有发现任何错误。
2.既然不是内存错误,搜索也没有什么新的突破。刚好,有导出文件(蓝屏时系统导出的文件,在C:\Windows\Minidump里)。因为以前看到过有分析这个文件的文章,不过看上去比较烦也就没仔细看了。今天先看看有没有这方面的自动分析工具,于是谷歌dump file analysis,第一条记录就是,还是online的,真是太好了(链接:http://www.osronline.com/page.cfm?name=Analyze)。按照提示上传文件,不一会儿出来一堆分析,不是很懂,浏览了一遍,得出两个结论:(1)这个一般是由某个驱动错误造成的;(2)进一步的信息需要debug(这家公司还提供了一个windebug工具: Windows Kernel Debugging and Crash Dump Analysis Seminar ,不过我是没打开,有兴趣的朋友试试)。
顺带贴一下分析结果
其实,上面的结果对某些专业人士来说,已经比较明白了,但是我不是这方面的专家,所以对我没有太多用处。
3.看起来又陷入了死胡同。等等~~,什么,刚才上传怎么没有问题?回过头看看这个上传页面和上传按钮,嗯,不错,是最简单最原始的。
所以,找到关键点了!出问题的上传页面都使用了HTML5!也就是说,出在了渲染的环节上,出问题的地方自然是显卡驱动了!那么要重装驱动吗?不要!(一出问题就重装系统的人都是菜鸟,只要见到这样的帖子,我统统不看——包括微软官方的)。因为显卡驱动不久前重装过,应该是没有问题的,那问题可能就出在设置上!
打开nvidia的控制面板查看设置,找来找去,觉得可能是”垂直同步“这个选项的问题,我的设置是”使用3D应用程序设置",然后选择“关”,点“应用”,再试,结果,好了!
问题是解决了,那么就该到此结束吗?显然这不符合一个程序猿的精神,既然发现了问题就要追根究底!现在会过去看上面的错误信息里有一项是:
FAILURE_BUCKET_ID: X64_AV_nt!KiTryUnwaitThread+32
说实话,我也不知道这个模块的准确意思,但是可以猜啊,那个TryUnwait不就是说在等待的时候出问题了吗?什么意思?显卡的垂直同步功能就是要让显卡的输出和显示器的刷新相匹配,显卡先将结果输出到缓冲区,然后等显示器刷新好了再输出更新的画面,而我的设置是“使用3D应用程序设置”,并且这个是全局配置,浏览器自然默认使用了这个设置,但是浏览器的渲染程序应该是没有做这样的处理的(也许是浏览器的bug,传统上,我们对浏览器的要求都比较低,但H5时代,应该有更高要求),所以系统一直在那里等浏览器决定啊,是开垂直同步还是不开垂直同步?因为浏览器没有处理这个回调,所以系统那里拿到的数据是非法的,也就只有蓝屏了。当我们把垂直同步关闭的时候,自然问题就解决了。
亡羊补牢:要注意默认设置,默认设置应该尽可能保守,因为你不知道使用它的程序是什么样的!
因为我不怎么打游戏,所以这样的设置也够了。如果要打游戏的话,就打开垂直同步(我估计应该也没问题,没测试)或者针对游戏对应的程序做自定义的设置(这样比较好)。
至此,问题解决!