前一陣子,我發現IE10有時候就像是假死一樣地,偶爾無響應,或者是打開網頁或者進行任何操作都奇慢無比。我當時沒有太在意,因為我家裡用的是一台舊電腦,性能不怎麼樣,以為是偶發的正常的性能問題。
可是,隨著最近在網上看視頻的次數越來越多(最近Win8、Surface都發布了嘛,好多視頻呢~),我發現這個問題越來越突出,越來越頻發,於是我想到了分析進程的等待鏈,看看IE究竟是在等待什麼。要知道,IE浏覽器總是假死,並且點擊了"恢復網頁"按鈕後還是死掉或者打開奇慢的話,那就真的是不正常了。
Windows8裡面自帶的新版任務管理器呀,就已經帶有分析進程等待鏈的功能了。以前我們可能要使用 resmon 資源監視器來完成。
在詳細信息裡面,我找到iexplore.exe進程,然後右擊選擇"分析等待鏈",可以看到,IE的一個或多個線程的確在等待完成網絡I/O,而在等待鏈樹狀結構中,我們可以看見,它在等待"FlashUtil_ActiveX.exe",PID為2248,可線程信息缺失。
哈哈,沒錯,你看見的這個"FlashUtil_ActiveX.exe"就是 Windows 8 內置的 Flash 的針對IE浏覽器的插件的執行體。難怪偶爾網頁會死掉,並且不可恢復,原來是每次死的時候,都是我在用IE10看視頻。我原以為,是IE內置的這個 Flash不穩定,想想也覺得有一定的可能性,因為它不論怎樣,都還是Adobe開發的(我查看了執行體的文件信息)。可是發現中止它以後,沒多久還是有這個問題。我又不敢隨便將其刪除,以免引發Win8裡面不可預知的後果。暫且沒有做實驗研究刪除它會有什麼結果、而後補裝一個Adobe下載的Flash Player又是否會使引發的問題消失。各位如有測試,也歡迎告訴我。
我想,其實我當時應該直接找到這個FlashUtil的進程,然後再看看它究竟在等待什麼,也許可以看到它也在等待什麼資源,或是用WinDbg看看能否有進一步的診斷。可當問題又重現時,我再看另一個IE的進程,恰好發現該進程得到了完整詳細的等待鏈信息:
可以清楚地看見,其實,FlashUtil_ActiveX.exe 也在等待一個線程,來自 QQExternal.exe. 噢!我這才恍然大悟,問題重現時,我的QQ的確處於運行狀態。於是,以後每次發生看Flash視頻就死網頁的情況時,我結束掉QQExternal進程,問題立馬就解決了,網頁馬上起死回生,加載出來,然後播放視頻。
可是這個QQExternal究竟是什麼呢?這我不知道,但是通過搜索互聯網,我發現了這樣的解釋:
呵呵,有意思吧,這個進程是為了能讓網頁的Flash保持穩定的。。。的確有了它會穩定不少,穩定得一動不動。真希望該進程隨時都不會出現。