記憶體洩漏引起的 資料庫效能問題
作業系統記憶體洩漏
第一 主機記憶體幾乎耗盡,大量swap被使用。主機、資料庫登入嚴重卡頓。
第二 每次重啟資料庫的十幾分鍾之內很正常,但那之後又很卡
HIS資料庫1月17日6點左右從原先P550伺服器切換至P720,切換完成之後,資料庫版本保持不變即11.2.0.3,,主機作業系統版本從原來的AIX 6.1升級至AIX 7.1(作業系統版本為7100-03-00-0000,沒有安裝SP3補丁)。執行3天之後,即從1月21日開始,資料庫由於作業系統記憶體不足產生大量交換,而導致多次當機。美創科技工程師經過仔細診斷,發現作業系統記憶體不足(P720有64GB記憶體)是由於命中Oracle BUG 10190759和缺失作業系統補丁IV53587引起的。其中Oracle BUG會導致USLA heap size從原來的幾十KB上漲到7MB左右,作業系統補丁IV53587缺失會導致作業系統的記憶體回收機制不能完全執行。詳見Oracle MOS官方文件和IBM官方文件:
11gR2/Aix - Dedicated Server Processes Have Large Usla Heap Segment Compared To Older Versions
Virtual Memory Consumption Paging under AIX 7.1 ( 文件 ID 1666458.1)
針對Oracle BUG 10190759,工程師打了Oracle ,記憶體過度消耗有一定程度的緩減,但是記憶體使用率依然高達90%左右。隨後,我們建議主機工程師打操作補丁IV53587。由於IV53587包含在AIX 7.1 SP3補丁集中,主機工程師打了SP3補丁集之後,作業系統記憶體大量消耗問題得到徹底解決,觀察3天之後,記憶體使用量維持在50%左右。
Oracle 單個程式記憶體使用存在洩漏
可以使用svmon -P PID - where PID is an Oracle process id程式跟蹤。
Oracle Release -> (work USLA heap times 4k pages size) 獨佔模式下不同版本程式記憶體使用值
11.2.0.1.0 -> 7M bytes
11.1.0.7.0 -> 60KB
10.2.0.4.0 -> 420KB
Slow system performance for larger footprint of all oracle server process. If physical memory is fully used, the could terminate an Oracle instance via terminating a PMON process.
同樣,vmstat監控命令也顯示,故障期間,主機已經產生了大量交換。記憶體嚴重不足。如下所示:
提取故障時間點的awr報告與正常時間段的進行對比。同樣時間點正常時間段的AWR報告:
同樣時間點故障時間段的AWR報告:
對比兩份awr報告,可以發現故障時間段的latch:shared pool和libaray cache:mutex x等待十分嚴重,結合作業系統資源使用情況,基本可以確定是由於記憶體不足導致資料庫效能急劇下降。
11gR2/Aix - Dedicated Server Processes Have Large Usla Heap Segment Compared To Older Versions (文件 ID )
從oracle官方提示的文件可以看出是由於USLA HEAP的使用異常導致記憶體使用不斷上升。 使用情況,如下所示:
從USLA HEAP的使用情況( )可以判斷程式私有使用量已經接近oracle官方提示的1800 4KB pages 也就是 7MB左右。這是oracle官方公佈的一個bug 10190759。 解決方法如下:
打Oracle Patch:10190759。
打完Bug 10190759補丁之後 ,如下所示:
從本次故障分析來看,主要是由於Oracle bug導致程式記憶體使用存在洩漏的。
參考文件
11gR2/Aix - Dedicated Server Processes Have Large Usla Heap Segment Compared To Older Versions (文件 ID 1260095.1)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23732248/viewspace-2770882/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- WebView引起的記憶體洩漏WebView記憶體
- handlder引起的記憶體洩漏問題以及解決辦法記憶體
- 記憶體洩露引起的問題記憶體洩露
- AFN的記憶體洩漏問題記憶體
- 記憶體洩漏問題分析之非託管資源洩漏記憶體
- HibernateDaoSupport 記憶體洩漏的問題!記憶體
- ThreadLocal記憶體洩漏問題thread記憶體
- 關於PHP記憶體洩漏的問題PHP記憶體
- iOS八種記憶體洩漏問題iOS記憶體
- iOS 11 textField記憶體洩漏問題iOS記憶體
- bea記憶體洩漏問題診斷記憶體
- 記憶體洩漏記憶體
- 解決記憶體洩漏(1)-ApacheKylin InternalThreadLocalMap洩漏問題分析記憶體Apachethread
- js垃圾回收機制和引起記憶體洩漏的操作JS記憶體
- 如何解決JVM OutOfMemoryError記憶體洩漏問題?JVMError記憶體
- 分析記憶體洩漏和goroutine洩漏記憶體Go
- 【Java面試題】之記憶體洩漏Java面試題記憶體
- 記憶體洩漏的原因記憶體
- js記憶體洩漏JS記憶體
- Java記憶體洩漏Java記憶體
- webView 記憶體洩漏WebView記憶體
- Javascript記憶體洩漏JavaScript記憶體
- 分析ThreadLocal的弱引用與記憶體洩漏問題thread記憶體
- 對於記憶體洩漏問題的簡單認知記憶體
- 我是如何搞定 NodeJS 記憶體洩漏問題的NodeJS記憶體
- Android效能優化之記憶體洩漏Android優化記憶體
- ARC下的記憶體洩漏記憶體
- 【轉】Java的記憶體洩漏Java記憶體
- 使用 Chrome Dev tools 分析應用的記憶體洩漏問題Chromedev記憶體
- ThreadLocal會不會有所謂“記憶體洩漏”的問題thread記憶體
- 急!請教用optimizeit檢測記憶體洩漏的問題?記憶體
- 記憶體分析與記憶體洩漏定位記憶體
- 記憶體洩漏和記憶體溢位記憶體溢位
- C++--問題27--如何檢測記憶體洩漏C++記憶體
- valgrind 記憶體洩漏分析記憶體
- Android 記憶體洩漏Android記憶體
- Android記憶體洩漏Android記憶體
- 淺談記憶體洩漏記憶體