職稱計(jì)算機(jī)輔導(dǎo):Windows啟動(dòng)和故障恢復(fù)中的文件1

字號:

默認(rèn)情況下,Windows配置為當(dāng)系統(tǒng)發(fā)生崩潰時(shí)嘗試自動(dòng)抓取一個(gè)當(dāng)前操作系統(tǒng)的狀態(tài)信息。接下來我們將討論系統(tǒng)故障,非應(yīng)用程序失敗。Dump選項(xiàng)可以通過控制面板中的系統(tǒng)工具來進(jìn)行設(shè)置。我們打開系統(tǒng)屬性—高級選項(xiàng)卡,找到啟動(dòng)和故障恢復(fù),點(diǎn)擊設(shè)置,我們就可以看到Dump文件的相關(guān)配置。當(dāng)系統(tǒng)發(fā)生崩潰時(shí),有3類Dump文件可以被捕獲:
    完全內(nèi)存轉(zhuǎn)儲(chǔ):當(dāng)崩潰發(fā)生時(shí),將捕獲整個(gè)物理內(nèi)存的狀態(tài)。此類轉(zhuǎn)儲(chǔ)文件大小為內(nèi)存中頁面文件大小+1MB的文件頭。Windows NT4只支持完全內(nèi)存轉(zhuǎn)儲(chǔ),當(dāng)然這也是Windows Server Systems的默認(rèn)設(shè)置。
    核心內(nèi)存轉(zhuǎn)儲(chǔ):當(dāng)崩潰發(fā)生時(shí),核心內(nèi)存轉(zhuǎn)儲(chǔ)只捕獲物理內(nèi)存中內(nèi)核態(tài)的頁面文件讀/寫數(shù)據(jù)。這只是內(nèi)核態(tài)的轉(zhuǎn)儲(chǔ),并不包括用戶態(tài)進(jìn)程的頁面。不過,由用戶態(tài)進(jìn)程頁引起系統(tǒng)崩潰是不大可能的,通常都是由內(nèi)核態(tài)引起。核心內(nèi)存轉(zhuǎn)儲(chǔ)中包括:當(dāng)前運(yùn)行進(jìn)程、線程和被加載的驅(qū)動(dòng)等相關(guān)信息。核心內(nèi)存轉(zhuǎn)儲(chǔ)文件大小=操作系統(tǒng)內(nèi)核態(tài)內(nèi)存占用大小+操作系統(tǒng)為驅(qū)動(dòng)程序分配內(nèi)存的大小。
    小內(nèi)存轉(zhuǎn)儲(chǔ):小內(nèi)存轉(zhuǎn)儲(chǔ)(又叫Mini-dump)是一個(gè)64K的轉(zhuǎn)儲(chǔ)文件(64位系統(tǒng)和Windows7里是128K,Vista512K),它包括:終止代碼、參數(shù)和被加載的驅(qū)動(dòng)列表。主要信息為崩潰時(shí)的當(dāng)前進(jìn)程、線程和內(nèi)核堆。
    注意:有的情況下我們需要進(jìn)行完全內(nèi)存轉(zhuǎn)儲(chǔ),手動(dòng)進(jìn)行完全內(nèi)存轉(zhuǎn)儲(chǔ)為程序停止響應(yīng)的排錯(cuò)提供了最為豐富的信息。因?yàn)楫?dāng)程序Hang住時(shí),我們需要查看用戶態(tài)進(jìn)程、死鎖等等信息。不過,當(dāng)你在選擇捕獲哪種Dump文件時(shí),一定要考慮好捕獲出來的文件大小。如上所述,完全內(nèi)存轉(zhuǎn)儲(chǔ)文件大小會(huì)是在物理內(nèi)存大小的基礎(chǔ)上+1MB。(筆者8GB內(nèi)存,再加1MB。恐怖啊……)
    前面我們回顧了3種類型的Dump文件,實(shí)則在日常的工作中核心內(nèi)存轉(zhuǎn)儲(chǔ)是我們系統(tǒng)崩潰和Bug檢查時(shí)最常用到的。請記住,核心內(nèi)存轉(zhuǎn)儲(chǔ)文件大小僅基于內(nèi)核態(tài)內(nèi)存占用和驅(qū)動(dòng)內(nèi)存占用。(在有更多內(nèi)存的系統(tǒng)上,Dump文件過大是正常的。)目前我們還無法精準(zhǔn)的計(jì)算核心內(nèi)存轉(zhuǎn)儲(chǔ)文件大小,你可以嘗試手動(dòng)配置核心內(nèi)存轉(zhuǎn)儲(chǔ)來查看頁面文件是否足夠大。對于設(shè)置最小的核心內(nèi)存轉(zhuǎn)儲(chǔ)大小我們有一定的指導(dǎo)方針,但對于值目前還沒辦法:
    物理內(nèi)存最小頁面文件 (Kernel Dump)
    < 128MB50MB
    < 4GB200MB
    < 8GB400MB
    >= 8GB800MB
    如果你擔(dān)心頁面文件設(shè)置過小,無法很好的捕獲核心轉(zhuǎn)儲(chǔ),我們的辦法就是通過KB244139所描述的方式使用 CrashOnCtrlScroll方法造成手動(dòng)崩潰。系統(tǒng)重啟之后,我們可以手工查看Dump文件大小。另一種方法是在啟動(dòng)分區(qū)上手動(dòng)設(shè)置 2GB+1MB的頁面文件大?。?2位系統(tǒng)),這是因?yàn)?2位操作系統(tǒng)內(nèi)核態(tài)地址空間就是2GB。
    除了配置正確的頁面文件大小之外,我們也需要確保有足夠的磁盤空間讓Dump文件能夠被正確的寫入。與頁面文件用來捕獲Dump不同,Dump文件可以被寫入其它的本地分區(qū)。在保存多個(gè)Dump文件時(shí),請取消選擇“覆蓋任何現(xiàn)有文件”。不過請記住,這會(huì)給剩余的磁盤空間造成很大的壓力。
    下面我們來看Dump文件是如何被產(chǎn)生的。當(dāng)系統(tǒng)啟動(dòng)時(shí),會(huì)到注冊表HKLMSystemCurrentControlSetControlCrashControl 讀取崩潰轉(zhuǎn)儲(chǔ)選項(xiàng)。所有在圖形界面所做的操作都會(huì)修改如下注冊表值:
    將事件寫入系統(tǒng)日志=LogEvent
    自動(dòng)重新啟動(dòng)= AutoReboot
    寫入調(diào)試信息= CrashDumpEnabled
    轉(zhuǎn)儲(chǔ)文件= DumpFile
    覆蓋任何現(xiàn)有文件= Overwrite