最近處理一台主機的異常,發現因為幾個地方沒調好,造成自我復原過程的不順暢。這裡整理分享一下我自己常用的啟動修復設定建議,給大家參考參考。

不管是Windows NT/2000/XP/2003,都可以在"我的電腦"按右鍵選"內容",找到以上的"啟動與修復"設定頁面。說明其中兩個設定重點:

  1. 自動重新開機:
    當Windows出現Blue Screen(BSOD)時,Windows預設會自動重新開機。今天處理的主機,這個選項卻是被取消的,所以,當錯誤發生後,畫面就一直停在Blue Screen上,必須要有人跑進機房幫忙重開(Terminal Service等遠端功能早掛了)。保留現場的主意不錯,但大部分的人不大能由Blue Screen看出端倪,而正式主機常被關在機房中,未必有人時時刻刻盯著,會延誤重啟復原的時機。另一方面,有挺高的比例,Windows只需重開機就又是一條好漢,因此自動重開符合力求減少Down Time的管理實務。只是即使自動開機後能恢復正常,系統管理者也應認真追查每次導致當機的真實原因,設法排除,切忌鄉愿,不然遲早Blue Screen會代替月亮懲罰你的。
  2. 撰寫偵錯資訊:
    (挺爛的翻譯,Writiing Debugging Information中的Writing應該翻"寫入"就好,事實上它不過是將當機時的記憶體內容寫入Disk中,又不是論文或Proposal,說"撰寫"未免沈重。)
    系統發生嚴重錯誤時,OS會呼叫SAVEDUMP.EXE將完整的記憶體內容保留下來,CSI鑑定專家就能100%還原命案現場,找出問題所在,這是多美好的一件事?! 只是地球上有能力解讀Memory Dump的超人沒幾位(我知道一位: Debugger Lady),加上分析工程浩大,除非當機的真相影響重大(例如: 兩顆子彈之類的),否則我們很少會真的將Memory Dump檔案交給MS Support解析(或者閣下自己就有能力解讀? 失敬! 失敬!)。既然用不到,就沒必要花時間跟空間將數GB的RAM內容寫到Disk上;系統預設會"完整記憶體傾印"(具有2GB+ RAM的主機則是"核心記憶體傾印"),記得把它停用,或寫個64K意思意思就好了。

最後分享幾次被SAVEDUMP.EXE扯後腿的經驗。

一般來說Memory Dump應發生在Blue Screen的同時,也就是Blue Screen的下方跑出一個百分比進度,顯示已將多少%的Memory寫入Disk了,跑到100%後再重新開機。但是我卻發現,有時SAVEDUMP.EXE會在Reboot後才啟動(記憶體都重置過了,莫非在寫心酸的? 記憶體Dump會先放在PageFile中,隔次開機時才處理)。最狠的是,SAVEDUMP會佔用掉全部的記憶體空間,讓重開機後的啟動程序陷入極度的記憶體不足及嚴重Swapping的狀況,搞得所有的程序都慢到不行。最悲情的一次經驗,Windows因故Blue Screen當機重開後,SAVEDUMP被叫出執行吃光記憶體,接某個Service在記憶體嚴重不足的狀況下不支倒地,再度造成Blue Screen,於是Windows自動重開後SAVEDUMP再跑出來吃RAM,接著Service因記憶體不足又再Blue Screen... 好個無間地獄~~~ orz

聽完以上的鬼故事,我想你應該會像我一樣(**不會分析Memory Dump File**),現在就去把Windows的System Failure Memory Dump功能關起來。

【延伸閱讀】微軟關於Memory Dump的完整說明

【Update @ 2007-07-31】

有高人路過小站,特別指點了一下,原來開機後的SaveDump是在處理當機前留在PageFile中資料。謝謝someonepoor賜教!
另外,順便補充一點,朋友Steve寫了一篇關於IIS Crash Dump分析工具的Post。這年頭好用的分析工具愈來愈多,真是茶包射手們的一大福音。


Comments

# by someonepoor

這年頭看dump沒這麼難了啦,工具越來越好用. 另外, Winodws是先將dump寫到pagefile裡面,再下一次開機的時候才從pagefile取出dump,這就是為什麼你會看到savedump在開機的時候跑的原因.

# by Jeffrey

原來如此,謝謝賜教!!

# by mark

BlueScreenView v1.15 - View BSOD (blue screen) crash information Copyright (c) 2009 Nir Sofer http://www.nirsoft.net/utils/blue_screen_view.html

Post a comment


34 - 32 =