記憶體洩漏引起的 資料庫效能問題
作業系統記憶體洩漏
第一 主機記憶體幾乎耗盡,大量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記憶體
- ThreadLocal記憶體洩漏問題thread記憶體
- 記憶體洩漏問題分析之非託管資源洩漏記憶體
- redisson記憶體洩漏問題排查Redis記憶體
- 關於PHP記憶體洩漏的問題PHP記憶體
- 解決記憶體洩漏(1)-ApacheKylin InternalThreadLocalMap洩漏問題分析記憶體Apachethread
- BufferedImage記憶體洩漏和溢位問題記憶體
- js垃圾回收機制和引起記憶體洩漏的操作JS記憶體
- 分析ThreadLocal的弱引用與記憶體洩漏問題thread記憶體
- 如何解決JVM OutOfMemoryError記憶體洩漏問題?JVMError記憶體
- 分析記憶體洩漏和goroutine洩漏記憶體Go
- 記憶體洩漏的原因記憶體
- 對於記憶體洩漏問題的簡單認知記憶體
- jvm 記憶體洩漏JVM記憶體
- Android 記憶體洩漏Android記憶體
- Java記憶體洩漏Java記憶體
- js記憶體洩漏JS記憶體
- Android記憶體洩漏Android記憶體
- Android效能優化篇之記憶體優化--記憶體洩漏Android優化記憶體
- 使用 Chrome Dev tools 分析應用的記憶體洩漏問題Chromedev記憶體
- C++--問題27--如何檢測記憶體洩漏C++記憶體
- 阿里二面:談談ThreadLocal的記憶體洩漏問題?問麻了。。。。阿里thread記憶體
- 效能優化——記憶體洩漏(1)入門篇優化記憶體
- valgrind 記憶體洩漏分析記憶體
- 記憶體的分配與釋放,記憶體洩漏記憶體
- 一次由於八股文引起的記憶體洩漏記憶體
- Spring Boot引起的“堆外記憶體洩漏”排查及經驗總結Spring Boot記憶體
- 【記憶體洩漏和記憶體溢位】JavaScript之深入淺出理解記憶體洩漏和記憶體溢位記憶體溢位JavaScript
- JVM——記憶體洩漏與記憶體溢位JVM記憶體溢位
- MAT工具定位分析Java堆記憶體洩漏問題方法Java記憶體
- Node.js 應用的記憶體洩漏問題的檢測方法Node.js記憶體
- Android中常見的記憶體洩漏Android記憶體
- .NET 記憶體洩漏的爭議記憶體
- Swift的ARC和記憶體洩漏Swift記憶體
- vue使用中的記憶體洩漏Vue記憶體
- Android中的記憶體洩漏模式Android記憶體模式
- [譯] Swift 中的記憶體洩漏Swift記憶體
- 記憶體洩漏與排查流程——安卓效能優化記憶體安卓優化