虛擬記憶體不足造成的藍屏 問題分析及解決

2021-08-07 11:36:38 字數 3281 閱讀 1906

之前藍屏的問題一直在腦子裡面轉, 沉下心來, 踏實走一遍看看.

1.虛擬記憶體檔案是什麼? 起什麼作用?

2.如何確定虛擬記憶體檔案的大小?

3.如何設定虛擬記憶體檔案?

首先來回答問題1

windows作業系統的記憶體管理是建立在虛擬記憶體的基礎上的.每個程序都有自己的私有虛擬位址空間。當接近低記憶體資源的條件時,windows將」最少」使用的記憶體頁移動到稱為頁面檔案的隱藏檔案中(即pagefile.sys檔案)。

頁面檔案是windows用於儲存修改後頁面的特殊檔案,將頁面從ram移動到頁面檔案的過程稱為「分頁」。

頁面檔案有兩個主要的作用:

ram的物理擴充套件

如果您的伺服器耗盡所有可用的ram並且沒有頁面檔案,那麼windows將無法分配更多的記憶體,所以應用程式將崩潰或掛起。更糟糕的是,在某些情況下,windows本身會變得不穩定。(這就是為什麼虛擬記憶體不足會造成藍屏的原因)

windows commit limit(也稱為系統提交)是當前分頁檔案的大小和windows可用於分配記憶體的物理記憶體的總和。例如:如果有16 gb ram和16 gb分頁檔案,那麼提交限制將為 16+16 = 32 gb。

崩潰轉儲大小

在關鍵業務伺服器上,建議將伺服器配置為捕獲記憶體轉儲以進行分析。windows正在使用頁面檔案作為記憶體轉儲的佔位符,這意味著windows首先在頁面檔案中寫入崩潰轉儲,然後smss程序將其複製到另乙個記憶體轉儲檔案。

這對頁面檔案大小有影響,因為它需要適應windows崩潰期間的所有資訊記錄,稍後再說。

調整頁面檔案的大小

以前的乙個經驗公式 (頁面檔案大小= ram * 1.5或ram * 2);(針對sql server 2000)

但在新的作業系統中,邏輯應該是:你擁有的ram越多,分頁檔案就越少。注意這個定義!

問題2 如何設定頁面檔案的大小 ?

首先應該先抓取系統到底需要使用多少記憶體, 才可以對頁面檔案大小進行規劃.

系統記憶體抓取,就考慮使用效能監視器中的 memory 專案來抓取.(當然抓取要有一定的時間長度才比較可靠),抓取專案參考

memory\committed bytes

memory\committed limit

memory\%committed bytes in use

參考: windows 效能監視器

頁面檔案大小設定的公式:

最大提交虛擬記憶體量 + 最大提交虛擬記憶體量*20% – ram 容量

注意了, 這裡都是算的(以物理檔案擴充套件的方式儲存ram修改後資料) 這個部分的頁面檔案使用估算量. 另外的那個檔案功能(在系統崩潰的情況下,記錄有關系統狀態的資訊)還沒有在考慮範圍之內.

記憶體轉儲的大小由它的型別決定:

完全記憶體轉儲 (ram大小 + 257 mb)

核心記憶體轉儲 (使用的核心模式記憶體量[32位最大為2 gb,64位最大可以上公升至8 tb])

小記憶體轉儲   (64kb~512kb)

在大多數情況下,核心記憶體轉儲其實是足夠用的,因為在特定情況下僅需要完全記憶體轉儲,例如,您希望看到在使用者模式下發生了什麼。

根據網上查到的經驗值:

在達到256gb ram的系統上,核心記憶體轉儲的大小為8-12 gb

在達到1.5tb ram的系統上,核心記憶體轉儲的大小為8-32 gb

注: 這並不是微軟官方發布的資料, 參考即可.

頁面檔案要放到什麼位置?

從windows 2008及以上版本開始,您可以將頁面檔案放在任何分割槽上,而不僅僅是系統分割槽。

從效能的角度來看,只有windows正在廣泛使用頁面檔案(提交虛擬記憶體量大於ram的大小)才有好處。

除了效能,磁碟快照和磁碟複製也是將頁面檔案移動到另乙個磁碟上的另乙個分割槽的好理由。

在這種情況下,您可以考慮將頁面檔案移動到另乙個分割槽,只需確保分割槽在不同的物理磁碟(主軸)上執行,而不是位於同一磁碟上的不同分割槽上。

配置頁面檔案:

執行sysdm.cpl—>高階系統設定—>高階—>(效能)設定—>高階—>更改

裡面有三個選項

系統管理: 預設設定  |  自定義大小  |  無分頁檔案

當使用系統管理選項時, windows將根據ram的大小來確定頁面檔案的大小.

<1gb      頁面檔案大小將1.5~3*ram

>=1gb    頁面檔案大小將1~3*ram

在32位系統上,頁面檔案的最大大小將為4 gb.在64位系統上,例如具有128 gb ram的sql伺服器,最大頁面檔案大小將為384 gb。這並不意味著windows會自動生成384 gb的檔案,只要系統需要這麼多的虛擬記憶體。

系統管理是預設選項,雖然它允許您在大多數情況下執行系統而不用擔心分頁檔案的大小,但有兩個潛在的問題:

1. 磁碟空間 - 在具有ram負載的系統上,頁面檔案大小將是巨大的

2. 頁面檔案碎片 - 如果頁面檔案擴充套件和縮小,可能會導致磁碟碎片和效能不佳

這是我通常建議手動配置這種伺服器上的分頁檔案(大量ram)的原因。

從windows 2012開始,自動內容轉儲旨在減少具有大量ram的系統上的頁面檔案的大小。當使用系統管理和自動記憶體轉儲啟用(預設情況下),最大大小仍將是3 * ram,但最小大小將由幾個因素決定,例如ram的大小,已提交的記憶體歷史和可用磁碟空間,導致乙個小得多的頁面檔案(通常小於1 gb)

無分頁檔案

正如我們所討論的,即使您的伺服器有足夠的ram,也不需要禁用頁面檔案。

有兩個額外的特殊情況需要頁面檔案:

應用需求: 應用程式要求:沒有頁面檔案,不支援域控制器,dfs複製,證書和adam / lds伺服器。

啟用動態記憶體的虛擬機器(hyper-v):動態記憶體要求虛擬機器具有頁面檔案

參考:

解決SQL Server虛擬記憶體不足情況

症狀 在具有 2 gb 或更多 ram 的計算機上,除了 256 mb sql server 7.0 或 384 mb sql server 2000 虛擬位址空間之外,sql server 在啟動過程中保留剩下的所有虛擬位址空間以供緩衝池使用。另外,為了儲存資料和過程快取,sql server 使...

VS2010虛擬記憶體不足報錯

通常是32位系統出現這種情況。可通過增加 windows vista windows 7 或 windows server 2008 系統上的可用位址空間來解決 命令列 bcdedit set increaseuserva 3072 這樣可將 x86 系統中的使用者模式虛擬記憶體分配從 2gb 增加...

MySQL故障 虛擬記憶體不足掛掉了

故障現象 mysql伺服器莫名奇妙的掛掉,並且開啟不了。the server quit without updating pid file failed mysql iz2ze2hchind7gwe2ilatez.pid 錯誤日誌 查詢mysql的錯誤日誌檔案 root iz2ze2hchind7g...