Java應用上雲後被kill問題分析與解決
因為 GC 時間過長導致 k8s 檢活失敗,被 kill 掉
因為記憶體碎片的問題,導致 OOM 被 kill 掉
具體現象和分析
解決
透過 GC 日誌,分析主要耗時點。推薦 GC 分析工具:,調整 JVM引數。 k8s 調整了檢活機制,由原來超時 10s、20s,最後調整為 2min。 透過分析日誌發現主要的長時 GC 是因為新生代晉升失敗,擴大 young 區和堆大小最佳化 JVM 引數。
現象
JVM堆記憶體分析
pmap 記憶體對映分析
pmap說明Address: 記憶體開始地址Kbytes: 佔用記憶體的位元組數(KB)RSS: 保留記憶體的位元組數(KB)Dirty: 髒頁的位元組數(包括共享和私有的)(KB)Mode: 記憶體的許可權:read、write、execute、shared、private (寫時複製)Mapping: 佔用記憶體的檔案、或[anon](分配的記憶體)、或[stack](堆疊)Offset: 檔案偏移Device: 裝置名 (major:minor)
引入記憶體分配器
ptmalloc 解讀
1. 透過 fastbins 查詢合適記憶體塊,
2. 1沒有,從 small bin 中獲取,
3. 2沒有,從 unsorted bin 中獲取,
4. 3沒有,從 large bin 中獲取,
5. 4沒有,從 top chunk 中,
1. 判斷是否是 mmap 對映,是直接回收
2. 判斷是否鄰近 top chunk
3. 不是2,根據 size 放到不同的 bins 中
4. 是2,判斷 top chunk 中鄰近記憶體是否在使用 是 合併 top chunk
替換記憶體分配器解決記憶體碎片問題
執行緒記憶體池:在一個程式中每個執行緒會有自己的記憶體池,用來管理自己的記憶體使用,會大幅度減少併發時鎖的效能損失。
鎖粒度:使用非公平鎖,替換自旋鎖,減少 CPU 空轉。
最佳化 dump 體驗。原來容器 dump 時會存在 dump 到一半機器就重啟的問題,跟基礎架構 和技術運營的同學溝通後,對該部分做了最佳化,讓業務分析 GC 時間過長有了實質性幫助。
確認監控問題。之前大家看到容器使用監控上應用重啟都是因為記憶體翻倍使用,但實際情況是容器在重啟後,監控平臺把兩個容器使用的記憶體求和了,沒有單獨分開處理。
支援可選擇分配器。基礎架構部門對 jemalloc 和 tcmalloc 的記憶體分配器進行支援。
華庭 :《Glibc記憶體管理-Ptmalloc2 原始碼分析》
JeMalloc-UncP 知乎
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024923/viewspace-2933589/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Guideline 3.1.1 iOS應用上架被拒問題GUIIDEiOS
- Mysql使用kill命令解決死鎖問題MySql
- Java中9種常見的CMS GC問題分析與解決JavaGC
- Ajax跨越問題原因分析與解決思路
- zt_enqueue:HW問題分析與解決ENQ
- Error in GetCurrentDir(): 13 問題分析與解決Error
- 企業雲盤幫你解決資料被盜問題
- java學習中問題與解決方式Java
- ontape之後沒有反應(問題未解決)
- 雲安全解決方案|讓企業用上安全的雲
- 新應用上線又見老問題
- 阿里雲應用上邊緣雲解決方案助力網際網路All in Cloud阿里Cloud
- SQLserver 程式被死鎖問題解決SQLServer
- JAVA | Java 解決跨域問題Java跨域
- 更新了java 8 之後一個小問題解決Java
- 應用上雲可以有多快?
- Java郵件(問題解決)Java
- Java解決跨域問題Java跨域
- Java 8 的日期與時間問題解決方案Java
- ubuntu下解決埠被佔用問題Ubuntu
- 磁碟問題定位與解決
- ubuntu下解決埠被佔用的問題Ubuntu
- 解決被掛起的資料庫問題資料庫
- 解決Linux下埠被佔用問題Linux
- 解決ELK日誌被截斷的問題
- 解決「問題」,不要解決問題
- 【kiss0kill】SQL SERVER EXPRESS 常見問題及解決辦法SQLServerExpress
- java解決數字黑洞問題Java
- Java 解決中文亂碼問題Java
- dedecms 後臺假死問題解決方法
- Windows解決斷後佔用問題Windows
- JAVA程式設計題-用java解決兔子問題Java程式設計
- ORA-39083 ORA-23421 問題分析與解決
- Oracle中rownum與rowid使用上的問題Oracle
- ApacheStorm官方文件——問題與解決ApacheORM
- 解決 SQLPLUS不能使用上下左右和BACKSPACE鍵問題SQL
- 混合雲管理問題,你解決了麼?
- API Server 負載均衡問題被解決 | 雲原生生態週報 Vol. 40APIServer負載