一份很有意思的 GC log
這是 HBase 的 GC log。
遺憾由於沒有加 -XX:+PrintHeapAtGC 引數,日誌只有這些。
暴露的問題:
YGC 時間久,需要 3 至 5 秒,與出現問題之前的 20ms 有很大差距。
JVM 配置如下:
堆大小 30G。
年輕代 3G,SurvivorRatio = 2,E 和 S 的大小分別為 1.5G 和 0.75G。
從日誌中可以推斷出,應該是 survivor 區空間少,導致存活物件超出 Desired survivor size = 0.75G * 50% = 402653184b,晉升閾值調整為 1,物件過早進入老年代導致。
圖中第一次 YGC 的時間為 20ms,比較正常。加了 PrintTenuringDistribution 引數,看到物件分佈。
從很多文章中寫到,PrintTenuringDistribution 列印的是 survivor 區的物件分佈。
但日誌中看到 812976448 total,約等於 775M,大於 survivor 區的 768M。
所以我將這個統計理解成希望進入 survivor to 區的物件分佈?
第一次正常 YGC 時,單是年齡為 1 的物件就超過了 survivor 區的大小。
所以 YGC 之後,survivor 區被年齡為 1 的物件填滿,並且由於 survivor 區的佔比超過了 50%,晉升閾值被調整為 1。在之後的 YGC 中,非新分配物件直接晉升到老年代。
在之後的 YGC 中,可以看到,每次 GC 之後,年輕代佔用的記憶體均為 786432K = 0.75G,恰好為一個 survivor 區的大小。
認為之後新分配的存活物件在 YGC 後,佔滿了 survivor to 區。
但如果將 PrintTenuringDistribution 分佈理解成期望進入 survivor 區的物件分佈。
但是第一次異常 YGC 發生時,物件總數只用 773677304b 約等於 738M,不足以填滿 survivor 區的 768M。
很是疑惑,求指點。
相關文章
- 一個很有意思的選擇表情DialogActivity
- 一個很有意思的hook庫:react-hangerHookReact
- github 主頁可以 DIY 了,很有意思Github
- Java堆外快取(一個很有意思的應用)Java快取
- 有哪些鮮為人知,但是很有意思的網站?網站
- 介紹幾篇很有意思的計算機科普文章計算機
- 請問面試官?一次很有意思的調查活動面試
- 超讚!有哪些很少為人所知,但是很有意思的網站?網站
- 一個關於資料庫關閉很有意思的現象資料庫
- 一個很有意思的Python小案例,真的是城市套路深呀Python
- gc cr request 'gcs log flush sync'GC
- 看到演算法問題很有意思,這邊用最笨方法解!演算法
- sqlplus /nolog 是什麼意思SQL
- sendmail的log裡面maybeforged是什麼意思?(轉)AI
- EBS R12中設定JDK GC LOGJDKGC
- PHP很有用的功能PHP
- log4net 使用與配置 每天一份log檔案
- [C++] cin, cout, clog, cerr中的c是什麼意思C++
- Minor GC、Major GC以及Full GC的介紹及對比GC
- SmartDialog遷移至4.0:一份真誠的遷移說明
- linux的cut命令很有用Linux
- 九個PHP很有用的功能PHP
- 微軟唐娜姐預告Win10 Mobile年度更新版本“很有意思”:即將推送微軟Win10
- 很有用的 GCC 命令列選項GC命令列
- 很有用的HTML+JavaScript程式碼HTMLJavaScript
- 20個很有用的PHP類庫PHP
- 沒有發生GC也進入了安全點?這段關於安全點的JVM原始碼有點意思!GCJVM原始碼
- python的GCPythonGC
- 從CLR GC到CoreCLR GCGC
- GCGC
- 10 個新的很有用的開發框架框架
- Full GC (Metadata GC Threshold)GC
- GC.MaxGeneration屬性【GC示例】GC
- 不常用卻很有妙用的事件及方法事件
- 10個很有用的高階Git命令Git
- 一段很有內涵的話,分享
- mysqlsla :一款很有用的mysql工具MySql
- 一道很有趣的拓撲題