Thursday, July 31, 2008 - 文章

【茶包射手專欄】Windows桌面開太多東西就"怪怪的"

如果你跟我一樣,有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),從此就可以盡情地開視窗了,再也不怕桌面瘋瘋顛顛了。

【參考資料】

題外話,很多時候,所謂的"不穩"、"怪怪的"、"見鬼了",多半另有隱情,搞通了就不再詭異,對系統的掌握度也就更上一層樓了。

不過,是否真能揪出背後的元凶,跟追問題者的積極度(像遇到我這種不信邪的瘋子)、錯誤訊息的明確性(例如: 只知桌面不知使喚,沒有任何警告或提示)、有無適當的偵測工具(dheapmon好棒),都很有關係。在本案例,要不是無意發現Desktop Heap耗盡的錯誤訊息,我對此問題的認知,大概永遠只停留在"Windows桌面開很多東西就會不穩"的層次(没給User明確的訊息,Windows背負這個污名也是活該吧XD)。

原來,對茶包射手來說,運氣也很重要!!

搜尋

Go

<July 2008>
SunMonTueWedThuFriSat
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789
 
RSS
【工商服務】
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


BlogLook Score and Rank

Syndication