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跨越問題原因分析與解決思路
- java學習中問題與解決方式Java
- 企業雲盤幫你解決資料被盜問題
- JAVA | Java 解決跨域問題Java跨域
- 阿里雲應用上邊緣雲解決方案助力網際網路All in Cloud阿里Cloud
- Java解決跨域問題Java跨域
- Java 8 的日期與時間問題解決方案Java
- 雲安全解決方案|讓企業用上安全的雲
- ubuntu下解決埠被佔用問題Ubuntu
- 磁碟問題定位與解決
- java解決數字黑洞問題Java
- JAVA程式設計題-用java解決兔子問題Java程式設計
- ubuntu下解決埠被佔用的問題Ubuntu
- 解決ELK日誌被截斷的問題
- 應用上雲可以有多快?
- Windows解決斷後佔用問題Windows
- dedecms 後臺假死問題解決方法
- java nio解決半包 粘包問題Java
- java中亂碼問題解決方法Java
- nginx /Java 解決跨域問題方案NginxJava跨域
- Docker殺掉了容器?問題分析與解決過程全面覆盤Docker
- 解決彈出層被Flash擋住的問題
- SpringBoot解決前後端跨域問題Spring Boot後端跨域
- 解決訪問Github與clone很慢的問題Github
- 解決訪問 GitHub 與 clone 很慢的問題Github
- API Server 負載均衡問題被解決 | 雲原生生態週報 Vol. 40APIServer負載
- 快取穿透問題與解決方法快取穿透
- @AllArgsConstructor與@Value共用的問題解決Struct
- 混合雲管理問題,你解決了麼?
- 鴻蒙應用上架全攻略(含常見問題)鴻蒙
- Angular應用解決跨域訪問的問題Angular跨域
- Java™ 教程(常見問題及其解決方案)Java
- pbootcms安全設定解決網站被黑被篡改問題boot網站
- 解決伺服器滿CPU被當礦機問題伺服器
- 解決軟體供應鏈安全問題