如果你跟我一樣,有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)。

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


Comments

# by 小熊子

太棒了。4GB 的 ram 的小熊子也要來試試看

# by 长缨在手

不错,学习了。

# by eric

我也是4GB,看了當然也想試一下,結果... 一打開編輯器一看....就已經是下面這個樣子了= =? ,真是怪 SharedSection=1024,20480,768

# by chicken

(Y) 早點看到這篇... 我一堆檔案就不用重打了...

# by sholfen

我的筆電裝到3G,也會有一樣的問題。這下我可以好好的把筆電操到極限了XD

# by 小志

看到這篇文章就解開我多年來的疑問...

# by Glacier

哈, 感謝茶包大大大解開我多年的疑問. 可是這問題還有一個很神奇的現象就是.. 只要出現過這種問題後, 似乎遇到此問題的頻率會上升(但我開啟很多視窗的習慣從沒改過) , 然後重非得要重灌才能解決(當然現在有茶包大大大發現的方法可以解決) 但重點是"出現頻率升高"的問題............?

# by Glacier

我後來才發現, "茶包射手"好像不是大大的暱稱 , 應該是"Trouble Shooter" , "找問題的專家"的意思.. 真是不好意思啊~ 黑暗大大大~ ^/////^

# by Jeffrey

to Glacier, 真變成"茶包大大"應該會像瘟神一樣人見人怕吧!? 所謂頻率升高,我來大膽推測一下,應該源於那陣子你常用或常駐的軟體本身視窗結構的複雜度偏高,所以Desktop Head吃得特別凶,重灌之後等同砍掉重練,一開始沒裝這麼多東西,都是用到才裝,再慢慢回復到原先一堆複雜視窗軟體的狀況,落入另一個循環,會不會是這種可能? 不然,依Desktop Head的特性,每次重開機/登入都從頭開始算,不會有長期累積的問題,本身應該不致於有"出現後頻率升高"的問題才是。以上純屬個人猜測。

# by Glacier

感謝Jeffrey大大說明, 這樣看來.. 很有可能是這樣喔~ 我都是用到才裝程式, 不知不覺就越裝越多了

# by Johnny

Hmmm... 我剛開出來一看, 這個值原本就已經是 1024,12288,512 了。會不會是因為我安裝的是 SP1 版的 Vista 的緣故?

# by someonepoor

這個WinSta0\當初讀Windows Internals的時候也只是懵懵懂懂, 書上的資料也只有一兩行, 當初我的理解是這東西就是要配置桌面的時候用的一塊記憶體.. 不過今天看到這篇文章倒是勾起了我的回憶...XD, 稍微查了一下找到這一篇: http://alt.pluralsight.com/wiki/default.aspx/Keith.GuideBook/WhatIsAWindowStation.html 供參考, 老實說沒用到的東西根本記不大起來啊..XD

# by Basuya

黑暗大,小弟專門收集疑難雜症在網站上供員工疑難排解。 是否可轉貼閣下的文章呢?自會註明出處。

# by Jeffrey

to Basuya, 歡迎之至,文章上請註明小站名稱及可連至本網頁的URL連結即可,謝謝!!

# by Hirono

好用!! 沒想到這麼輕鬆就可以解決這個問題 虧我還為了這一個數字 不斷在開關程式間存活(死)... 不過2g的ram能不能這樣做?

# by 宜蘭民宿

這篇文章太棒了,電腦開很多視窗,常常當機,或者右鍵無法使用,八成也是這個問題,又學到一些知識了。

# by Jeremy

感謝大大的文章 又學到了一些知識 ^^

# by 阿堯

感謝喔 這問題困擾我很久了 不知道我能不能複製在我的無名呢

# by Jeffrey

to 阿堯,歡迎引用,請在明顯處註明文章來源及連結即可。

Post a comment