作業系統HugePage配置導致記憶體驟降探究
一、故障描述
某次,使用者某套資料庫最初的大頁引數設定值為 vm.nr_hugepages = 138246,執行 Oracle官方指令碼 hugepages_settings.sh之後,將對應的引數值進行了微調 vm.nr_hugepages = 204810,大頁新值生效後,驟然,系統可用實體記憶體出現急速下降。
二、根因分析
透過具體分析, vm.nr_hugepages 值設定為 138246時,系統記憶體使用情況:
vm.nr_hugepages 值設定為 204810時,系統記憶體使用情況:
透過上圖可以看出,引數調整前後,系統記憶體 free值從 200G左右降低至 80G,系統記憶體迅速減少,且對比發現系統的 buff/cache快取無明顯變化。為此引出了對應的問題,調大 hugepages大頁記憶體後,資料庫的可用記憶體為何會迅速降低。
分析 Alert日誌可以看出, vm.nr_hugepages設定為 138246,由於該資料庫的 SGA配置為 400G, hugepages大頁的記憶體頁不足,進行 sga分配時,記憶體會透過大頁記憶體( 2048k)和普通頁( 4k)記憶體構成,日誌資訊如下:
上述的啟動日誌可以看出,當前例項 SGA設定的記憶體為 400G,可用的記憶體分為兩個部分,分別為 4k頁記憶體和 2048k頁的記憶體。其中 4k也的記憶體頁分配了 34078751個,約為 130G, 2048k的記憶體頁分配了 138241個,約為 270G。資料庫進行 hugepage分配時,會預留至少 5個大頁記憶體,所以實際分配的大頁個數與設定的個數存在一定差異。透過作業系統層,也可以直接看出大頁的使用情況。
後續將 vm.nr_hugepages調整為 204810,即大頁的記憶體大小設定為 400G,然而由於資料庫 SGA採用的是預分配的方式,資料庫 SGA記憶體段已經安裝 130G的 4k頁和 270G的 2048k頁記憶體進行了分配,雖然調大了 2048k的記憶體頁分配,但資料庫並不能對 SGA的記憶體進行重新分配,導致增加的大頁記憶體並未被資料庫使用。透過系統可以看出,調整大頁記憶體後的使用情況,如下圖:
透過計算( Total-Free=204810-66569=138241)的值,可以看出,雖然調大了大頁分配的值,但是實際上新增的大頁記憶體並未被使用,當前被使用的 2048k頁的個數依然為 138241個。有 66569個 hugepage的記憶體頁( 66569*2048=130G)沒有被使用,從而造成了系統記憶體的浪費。
三、解決方案
透過上述的分析可以看出,由於資料庫的 SGA記憶體已經進行了預分配,直接調整 vm.nr_hugepages值,會造成大量的 HugePages_Free產生,而這些大頁記憶體只能被共享記憶體使用,如此會造成大量的記憶體浪費,導致系統剩餘記憶體迅速降低。
建議調整 vm.nr_hugepages值後,將資料庫進行重啟,如此才能啟動的時候 SGA全部使用大頁記憶體,將之前預分配的 4k頁記憶體進行釋放,從而保障了資料庫執行效能的同時,節省了系統記憶體的資源,實現資料庫系統的穩定執行。同時,也要注意 memory lock資源限制選項配置對大頁的影響。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/30310891/viewspace-3006890/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 作業系統-記憶體管理作業系統記憶體
- 作業系統——記憶體管理作業系統記憶體
- 【作業系統】記憶體管理概述作業系統記憶體
- 作業系統-記憶體、檔案管理作業系統記憶體
- Linux作業系統記憶體淺析Linux作業系統記憶體
- MySQL記憶體管理,記憶體分配器和作業系統MySql記憶體作業系統
- 作業系統——記憶體管理學習筆記作業系統記憶體筆記
- 計算機作業系統——虛擬記憶體與實體記憶體計算機作業系統記憶體
- 作業系統的記憶體管理你知道嗎作業系統記憶體
- 作業系統(八) -- 記憶體的分段與分頁作業系統記憶體
- 作業系統——記憶體連續分配管理方式作業系統記憶體
- 記憶體瘋狂換頁!CPU怒批作業系統記憶體作業系統
- 作業系統思考 第六章 記憶體管理作業系統記憶體
- linux查詢作業系統資訊(CPU、記憶體、硬碟)Linux作業系統記憶體硬碟
- 避免PHP-FPM記憶體洩漏導致記憶體耗盡PHP記憶體
- android Handler導致的記憶體洩露Android記憶體洩露
- [20210803]對比transparent hugepage的記憶體消耗.txt記憶體
- 讀懂作業系統之虛擬記憶體頁表(五)作業系統記憶體
- 記憶體回收導致關鍵業務抖動案例分析-論雲原生OS記憶體QoS保障記憶體
- Android-Fragment 切換造成記憶體溢位,導致記憶體增長AndroidFragment記憶體溢位
- 記一次排序導致的記憶體危機排序記憶體
- nfs導致的作業系統目錄無法訪問NFS作業系統
- 作業系統:x86下記憶體分頁機制 (1)作業系統記憶體
- 《作業系統真象還原》核心記憶體分佈與載入作業系統記憶體
- 探究 iOS 記憶體問題iOS記憶體
- Linux 中的“大記憶體頁”(hugepage)是個什麼?Linux記憶體
- ucore作業系統學習筆記(二) ucore lab2實體記憶體管理分析作業系統筆記記憶體
- 一個導致JVM實體記憶體消耗大的BugJVM記憶體
- dotnet 6 在 Win7 系統證書鏈錯誤導致 HttpWebRequest 記憶體洩露Win7HTTPWeb記憶體洩露
- 作業系統(十) -- 段頁結合的實際記憶體管理模型作業系統記憶體模型
- 作業系統導論(1)作業系統
- java陣列記憶體的探究Java陣列記憶體
- [20210126]探究oracle記憶體分配.txtOracle記憶體
- 清華大學-作業系統學習筆記(五)--- 虛擬記憶體技術作業系統筆記記憶體
- 異常連線導致的記憶體洩漏排查記憶體
- 日誌導致jvm記憶體溢位相關問題JVM記憶體溢位
- Oracle在Linux下對記憶體大頁HugePage的實踐OracleLinux記憶體
- 記一次記憶體溢位導致的生產事故記憶體溢位