文章編號: 188831 - 上次校閱: 2009年10月7日 - 版次: 11.0 如何使用 「 特殊集區 」 功能來隔離集區的傷害
結論集區損毀可能導致許多最 evasive 問題與 Windows NT 傷害因為當核心模式元件將寫入至已配置的集區區以外的記憶體集區。藉由撰寫超過其配置的區域範圍的記憶體,很有可能的另一個區域配置可能是由另一個元件所擁有的記憶體是覆寫。 這個傷害可能完全無關的程式碼部分會造成問題,例如藍色畫面。讀取超出其配置區域的核心模式元件也可能會造成問題。 它由原始設備製造商 (OEM) 驅動程式或 Windows 中的問題所造成,是否集區損毀問題都是最難識別部份。通常,都可以看到變損毀傾印分析中如資料區域實際問題的徵狀得完全無關的程式碼區塊中的損毀,並造成問題。 直到現在,程式幾乎不可能找到損害記憶體的程式碼區段。 集區傷害的來源可以現在識別於指令導致資料庫損毀。新的記憶體管理公用程式,名為特殊的集區是隨附於 Windows NT 4.0 服務套件 4 (SP4)、 Windows 2000、 Windows XP,Windows Server 2003,Windows Vista 及 Windows Server 2008。「 特殊集區 」 公用程式識別損害藉由撰寫其配置區域以外的記憶體集區資料的核心模式元件。 附註不適用於 Windows Vista 及 Windows Server 2008 記憶體微調。但是 「 特殊集區 」 功能不會套用這些產品。 其他相關資訊重要這個區段、 方法或任務包含告訴您如何修改登錄的步驟。然而,如果您不當修改登錄,可能會發生嚴重的問題。因此,執行這些步驟時請務必小心。為加強保護,修改登錄之前,請務必將它備份起來。以後您就可以在發生問題時還原登錄。如需有關如何備份和還原登錄的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件: 322756?
(http://support.microsoft.com/kb/322756/
)
如何備份和還原在 Windows 登錄 「 特殊集區 」 公用程式會透過符合下列準則的 ExAllocatePoolWithTag 要求每個集區配置的配置虛擬記憶體的兩個的頁面:
滿溢偵測是最可能在常使用。滿溢偵測的要求的配置會先位於第一頁的末端,藉由從頁面結尾備份要求大小。配置大小接近於 8 位元組界限。在第一頁的第一個八個位元組的標頭寫入模式的索引鍵]、 [大小] 和 [集區標籤資訊。此模式也傳播整個頁面。因為最接近的 8 位元組界限上的位置配置,可能會多達 7 個 slop 位元組之後的配置。模式也會寫入至 slop 位元組之後的配置。 第二個頁面是守衛頁。守衛頁面標有無存取保護一個特殊分頁表項目 (PTE) 所組成。標示有無存取保護這第二頁,嘗試讀取或立即寫入第一頁結尾之外的任何程式碼會造成停止 0x0000000A 或 Stop 0x0000001E 錯誤會導致發生存取違規。 這可讓某人偵錯系統來找出確切會導致資料庫損毀的指令。 為備份檢查,以攔截撰寫配置結尾之外,但不是超過頁面結尾的 violators,可用集區要求期間驗證 slop 位元組配置的結尾 (ExFreePoolWithTag)。slop 位元組被比較中配置標頭,以判斷是否任何項目覆寫在 slop 位元組區域樣式。 如果仍無法運作驗證] 核取,發生停止 0x00000001A 錯誤。 這項檢查會找不一定是到確切會導致資料庫損毀的程式碼區塊。不過,它可以協助識別造成損害的元件。 若要以便 「 特殊集區 」 公用程式將下列機碼和值加入登錄中: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management 數值名稱: PoolTag 資料類型: REG_DWORD 資料: 集區標籤遮罩 | 配置大小遮罩 | 0 下列表格列出多個範例。 Pool to monitor Character representation Pool tag mask ---------------------------------------------------------- All pools "*" 0x2A N??s "s??N" 0x733F3F4E 指定零 (0x0) 時 「 特殊集區 」 公用程式 」 未初始化。在另外 「 特殊集區 」 公用程式 」 未初始化如果 PoolTag 登錄值未定義在登錄中。 數值名稱: PoolTagOverruns 1 表示之指定標記偵測到集區配置滿溢。配置是頁面結尾處,守衛頁面後面。資料類型: REG_DWORD 資料: 1 | 0 0 表示之標記偵測到集區配置不足。配置是位於頁起始處,守衛頁面是來自包含配置頁之前。 若要建立這些兩個登錄機碼的常見使用範例是,如下所示: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\
Memory Management 數值名稱: PoolTag 資料類型: REG_DWORD 資料: 0x2A 數值名稱: PoolTagOverruns 資料類型: REG_DWORD 資料: 1 附註Windows NT 「 終端機伺服器 4.0 您必須停用 KStackPool 當您使用特殊的集區。若要執行此動作要將新增下列登錄值: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management 數值名稱: EnableKStackPool 資料類型: REG_DWORD 資料: 0 1-一律啟用 KStack 集區 2-KStack 集區啟用電腦有 256 MB 或更多的記憶體 (預設) 附註如果沒有足夠的特殊分頁表項目 (PTE),「 特殊集區 」 功能可能不適用於 Windows Server 2003。在單一使用者終端機伺服器,包含多個 1 GB 的 RAM 及有記憶體管理微調的值設為預設值的電腦上通常會發生這個問題。在 64 位元版本的 Windows Server 2003 中,不會發生這個問題。 此問題的記憶體傾印檔案分析可能會包含下列資訊: *** Virtual Memory Usage *** Physical Memory: 1015660 ( 4062640 Kb) Page File: \??\C:\Pagefile1\pagefile.sys Current: 4193280Kb Free Space: 4180856Kb Minimum: 4193280Kb Maximum: 4193280Kb Available Pages: 552680 ( 2210720 Kb) ResAvail Pages: 932179 ( 3728716 Kb) Locked IO Pages: 347 ( 1388 Kb) Free System PTEs: 187166 ( 748664 Kb) Free NP PTEs: 32765 ( 131060 Kb) Free Special NP: 117228 ( 468912 Kb) Modified Pages: 106 ( 424 Kb) Modified PF Pages: 98 ( 392 Kb) NonPagedPool Usage: 6599 ( 26396 Kb) NonPagedPool Max: 65536 ( 262144 Kb) PagedPool 0 Usage: 10697 ( 42788 Kb) PagedPool 1 Usage: 1240 ( 4960 Kb) PagedPool 2 Usage: 1239 ( 4956 Kb) PagedPool 3 Usage: 1265 ( 5060 Kb) PagedPool 4 Usage: 1231 ( 4924 Kb) PagedPool Usage: 15672 ( 62688 Kb) PagedPool Maximum: 90112 ( 360448 Kb) Shared Commit: 3866 ( 15464 Kb) Special Pool: 511 ( 2044 Kb) <-- very small Shared Process: 5205 ( 20820 Kb) PagedPool Commit: 15672 ( 62688 Kb) Driver Commit: 2091 ( 8364 Kb) Committed pages: 439832 ( 1759328 Kb) Commit limit: 2023823 ( 8095292 Kb) 0: kd> dd nt!MmSpecialPoolRejected l8 8057afe0 00000000 00000000 00b2e59a 00000000 <-- A DWORD value of 3 causes special pool PTE's shortage. 8057aff0 00000000 00000000 00000000 00000000 8057afd8 nt!MiSpecialPoolFirstPte = 0xc022af78 8057afd4 nt!MiSpecialPoolLastPte = 0xc022af78
若要解決這個問題,設定 PagedPoolSize 登錄項目,為小於所允許的分頁集區大小的值的值。比方說 PagedPoolSize 登錄項目設定為值 256 MB。如果想設定較大的值可用於 「 效能監視器 」 公用程式判斷電腦的需求,針對較大的分頁集區大小。 您可以使用下列值 PagedPoolSize 登錄項目: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory
Management
數值名稱: PagedPoolSize 資料類型: REG_DWORD 資料: 10000000 基底: 十六進位 Windows Server 2003 與服務封包 1 (SP1) 安裝: 數值名稱: PagedPoolSize 資料類型: REG_DWORD 資料: FFFFFFFF 基底: 十六進位 附註之後請任何所述的登錄變更本文中重新啟動電腦,以使變更生效。 如果您啟用 「 特殊集區] 功能之後,電腦停止回應 (擱置),並且在啟動時收到錯誤訊息在藍色畫面上的,使用 [上次的良好設定] 選項來重新啟動電腦。 啟用 「 特殊集區 」 功能是不會寫入到上次已知的良好設定項目直到成功的登入後登錄中。 這篇文章中的資訊適用於:
機器翻譯重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。 按一下這裡查看此文章的英文版本:188831?
(http://support.microsoft.com/kb/188831/en-us/
)
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。 | 其他資源 其他支援網站社群立即取得協助文章翻譯
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


回此頁最上方
