如果你跟我一樣,有4G以上的RAM,又喜歡在桌面同時開一缸子程式節省來回切換的時間,你應該有遇到以下情境的經驗:
明明RAM還有剩很多,電腦卻開始不聽始喚: 新程式的畫面出不來、程式視窗關不掉(按右上角的X沒用)、選單項目不見、視窗一片空白、右鍵選單出不來… 設法關掉一些程式後,記憶體用得少了,系統就又恢復正常
被這問題困擾很久,也請教不少專家,都沒得到明確的解答,大部分的人刻板印象是: Windows在記憶體用很多時,就會怪怪的,不太穩… 而關掉程式釋放一些Memory後就會恢復,似乎也印證了這個講法有幾分道理。
一直以來,我除了接受這個籠統且對Windows帶點歧視的結論之外,也沒有其他選擇。直到幾前天,我很幸運地在事件檢視器中發現這個錯誤訊息:
Failed to create a desktop due to desktop heap exhaustion.
用這個錯誤訊息Goggle到相關文章,我才搞懂,RAM再多,Desktop Head Size卻是固定的,用完了就有可能導致桌面不正常,例如: 新視窗開不起來。推敲了一下,我覺得這個限制極有可能就是造成RAM剩很多,桌面操作卻開始不正常的元凶!!
另外,我還找到了dheapmon這個好工具,可以測量Desktop Head的用量,就待下回出問題時,再來好好地剖析一下。
昨天,桌面開了一堆東西,想開Word檔案,卻發現Word只出現外框,文件開不出來。機不可失,興奮地用顫抖的手開啟dheapmon檢查:
C:\Program Files\Debugging Tools for Windows\DskHeapMon\x86>dheapmon
Desktop Heap Information Monitor Tool (Version 8.1.2925.0)
Copyright (c) Microsoft Corporation. All rights reserved.
-------------------------------------------------------------
Session ID: 0 Total Desktop: ( 6848 KB - 10 desktops)
WinStation\Desktop Heap Size(KB) Used Rate(%)
-------------------------------------------------------------
WinSta0\Default 3072 99.8
WinSta0\Disconnect 64 4.0
WinSta0\Winlogon 128 8.2
Service-0x0-3e7$\Default 512 13.6
Service-0x0-3e4$\Default 512 3.2
Service-0x0-3e5$\Default 512 1.2
SAWinSta\SADesktop 512 0.8
__X78B95_89_IW\__A8D9S1_42_ID 512 0.4
Service-0x0-1eefc$\Default 512 1.2
Service-0x0-27435$\Default 512 1.4
-------------------------------------------------------------
Bingo!!! 命中要害,Heap用掉99.8%,關掉一些程式,降到86%後,系統就又正常了。由此,我可以確認這個困擾已久的問題,就是肇因於Desktop Heap耗盡。依著MS KB的說明(看英文版比較好,“Out of Memory” error message = 「 郵件答錄機的記憶體 」 錯誤訊息,算你狠!!),調成SharedSection=1024,8192,512(原來的值是3072[註: x64 OS預設20M起跳],原本只敢小小加到4096,但看到有人開到8192也沒事,加上這個數字調大的影響似乎只會影響同時連線的Terminal Service Session數,對我的工作機不是問題,索性就一口氣開上8M),從此就可以盡情地開視窗了,再也不怕桌面瘋瘋顛顛了。
【參考資料】
- Desktop Heap Overview
- dheapmon 8.1下載
- dheapinst安裝說明
- SharedSection調校參考文章: 1 2 3
題外話,很多時候,所謂的”不穩”、”怪怪的”、”見鬼了”,多半另有隱情,搞通了就不再詭異,對系統的掌握度也就更上一層樓了。
不過,是否真能揪出背後的元凶,跟追問題者的積極度(像遇到我這種不信邪的瘋子)、錯誤訊息的明確性(例如: 只知桌面不知使喚,沒有任何警告或提示)、有無適當的偵測工具(dheapmon好棒),都很有關係。在本案例,要不是無意發現Desktop Heap耗盡的錯誤訊息,我對此問題的認知,大概永遠只停留在”Windows桌面開很多東西就會不穩”的層次(没給User明確的訊息,Windows背負這個污名也是活該吧XD)。
本文引自:http://blog.darkthread.net/post-2008-07-31-desktop-heap-issue.aspx
發佈留言