【茶包射手專欄】Windows桌面開太多東西就"怪怪的"
21 | 28,319 |
如果你跟我一樣,有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)。
原來,對茶包射手來說,運氣也很重要!!
Comments
# by 小熊子
太棒了。4GB 的 ram 的小熊子也要來試試看
# by 长缨在手
不错,学习了。
# by eric
我也是4GB,看了當然也想試一下,結果... 一打開編輯器一看....就已經是下面這個樣子了= =? ,真是怪 SharedSection=1024,20480,768
# by chicken
(Y) 早點看到這篇... 我一堆檔案就不用重打了...
# by sholfen
我的筆電裝到3G,也會有一樣的問題。這下我可以好好的把筆電操到極限了XD
# by Jeffrey
to eric, 您的OS應是x64版本吧? x64 OS的Interactive Desktop Heap以20M起跳,這也是我最近開始熱衷Vista x64的原因。參考: http://blogs.msdn.com/ntdebugging/archive/2007/07/05/desktop-heap-part-2.aspx
# 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 阿堯,歡迎引用,請在明顯處註明文章來源及連結即可。
# by Morris
在網路上 Google 到下列網址的文章 http://kevincg.wordpress.com/2008/10/02/windows-desktop-heap-monitor/ 感覺抄襲成份重大... 而且是 黑暗大 + Will 保哥 的混合體