Java GC分析

[TOC]

1、如何收集GC日志

1.1、 配置JVM啟動(dòng)參數(shù):

-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:<file-path>
示例:
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/opt/app/gc.log

1.2、 GC相關(guān)啟動(dòng)參數(shù)說(shuō)明

1.2.1、簡(jiǎn)單日志模式

-XX:+PrintGC 或者 -verbose:gc
日志輸出示例:
[GC 246656K->243120K(376320K), 0,0929090 secs]
[Full GC 243120K->241951K(629760K), 1,5589690 secs]

1.2.2、詳細(xì)日志格式

-XX:+PrintGCDetails
日志輸出示例:
[GC [PSYoungGen: 142816K->10752K(142848K)] 246648K->243136K(375296K), 0,0935090 secs] [Times: user=0,55 sys=0,10, real=0,09 secs]
[Full GC [PSYoungGen: 10752K->9707K(142848K)] [ParOldGen: 232384K->232244K(485888K)] 243136K->241951K(628736K) [PSPermGen: 3162K->3161K(21504K)], 1,5265450 secs] [Times: user=10,96 sys=0,06, real=1,53 secs]

1.2.3、日志中添加時(shí)間標(biāo)志(日志每行開頭顯示自從JVM啟動(dòng)以來(lái)的時(shí)間,?????????單位為秒)

-XX:+PrintGCTimeStamps
日志輸出示例:
0,185: [GC 66048K->53077K(251392K), 0,0977580 secs]
0,323: [GC 119125K->114661K(317440K), 0,1448850 secs]

1.2.4、日志中添加日期標(biāo)志(日志每行開頭顯示絕日期及時(shí)間,?????????單位為秒)

-XX:+PrintGCDateStamps
日志輸出示例:
2014-01-03T12:08:38.102-0100: [GC 66048K->53077K(251392K), 0,0959470 secs]
2014-01-03T12:08:38.239-0100: [GC 119125K->114661K(317440K), 0,1421720 secs]

1.2.5、 打印GC前后的詳細(xì)堆棧信息

-XX:+PrintHeapAtGC
日志輸出示例:
Heap after GC invocations=1 (full 0):  
 par new generation   total 943744K, used 54474K [0x0000000757000000, 0x0000000797000000, 0x0000000797000000)  
  eden space 838912K,   0% used [0x0000000757000000, 0x0000000757000000, 0x000000078a340000) 
  from space 104832K,  51% used [0x00000007909a0000, 0x0000000793ed2ae0, 0x0000000797000000)  
  to   space 104832K,   0% used [0x000000078a340000, 0x000000078a340000, 0x00000007909a0000)  
 concurrent mark-sweep generation total 1560576K, used 0K [0x0000000797000000, 0x00000007f6400000, 0x00000007f6400000)  
 concurrent-mark-sweep perm gen total 159744K, used 38069K [0x00000007f6400000, 0x0000000800000000, 0x0000000800000000)  
}

1.2.6、查看每次minor GC后新的存活周期的閾值

-XX:+PrintTenuringDistribution
日志輸出示例:
Desired survivor size 53673984 bytes, new threshold 4 (max 6)  
- age   1:    9165552 bytes,    9165552 total  
- age   2:    2493880 bytes,   11659432 total  
- age   3:    6817176 bytes,   18476608 total  
- age   4:   36258736 bytes,   54735344 total  
: 899459K->74786K(943744K), 0.0654030 secs] 1225769K->401096K(2504320K), 0.0657530 secs] [Times: user=0.55 sys=0.00, real=0.07 secs]

2、GC文件格式說(shuō)明

2.1、 GC文件圖解

Java GC文件圖解

2.2、GC文件格式詳解

2014-11-18T16:39:37.728-0800: 88.808: [Full GC [PSYoungGen: 116544K->12164K(233024K)] [PSOldGen: 684832K->699071K(699072K)] 801376K->711236K(932096K) [PSPermGen: 2379K->2379K(21248K)], 3.4230220 secs] [Times: user=3.40 sys=0.02, real=3.42 secs]

每部分說(shuō)明如下:

2014-11-18T16:39:37.728-0800 – GC運(yùn)行的絕對(duì)時(shí)間.

Full GC – GC類型,可以是‘Full GC’ 或 ‘GC’。

[PSYoungGen: 116544K->12164K(233024K)] – 運(yùn)行新生代GC后,新生代空間從116544k 減少到 12164k 。 總計(jì)分配的新生代空間為233024k。

[PSOldGen: 684832K->699071K(699072K)] – 運(yùn)行年老代GC后, 年老代空間從 684832k 減少到 699071k 。 總計(jì)分配的年老代空間為669072k。

801376K->711236K(932096K) – 運(yùn)行GC后, 整個(gè)內(nèi)存空間從 801376k 減少到 711236k 。 總計(jì)分配的內(nèi)存空間 932096k。

[PSPermGen: 2379K->2379K(21248K)] – 運(yùn)行GC后, 持久代空間從 2379K 減少到 2379K 。 沒(méi)有回收持久代空間。

3.4230220 secs – 此次GC運(yùn)行了3.42秒。

[Times: user=3.40 sys=0.02, real=3.42 secs] – 
Real - 是調(diào)用從開始到結(jié)束的實(shí)際持續(xù)時(shí)間。 這是所有持續(xù)的時(shí)間,包括其他進(jìn)程消耗的時(shí)間片和進(jìn)程花費(fèi)在阻塞等待(比如等待I/O完成)上的時(shí)間。
User - 是進(jìn)程用戶模式(user-mode)代碼(非內(nèi)核模式)消耗的CPU時(shí)間。這只是運(yùn)行這個(gè)進(jìn)程所消耗的CPU時(shí)間。其他進(jìn)程及進(jìn)程花費(fèi)在阻塞等待上的時(shí)間不包括在內(nèi)。
Sys - 是進(jìn)程內(nèi)核模式(執(zhí)行內(nèi)核代碼)消耗的CPU時(shí)間。 只包括內(nèi)核中系統(tǒng)調(diào)用消耗的CPU時(shí)間,不包括執(zhí)行庫(kù)代碼(library code)的時(shí)間。和 'user' 一樣,只統(tǒng)計(jì)這個(gè)進(jìn)程自己消耗的時(shí)間。

User+Sys 告訴你你的進(jìn)程實(shí)際消耗的CPU時(shí)間。注意這個(gè)時(shí)間是所有CPUs時(shí)間總和,所以如果進(jìn)程是多線程執(zhí)行,那么 User+Sys 可能大于 Real 。

并行GC示例:
[Times: user=11.53 sys=1.38, real=1.03 secs]
串行GC示例:
[Times: user=0.09 sys=0.00, real=0.09 secs]

3、GC分析工具

3.1、在線GC分析

http://gceasy.io/

4、參考資料

https://dzone.com/articles/understanding-garbage-collection-log
https://blog.tier1app.com/2016/04/06/gc-logging-user-sys-real-which-time-to-use/
https://blog.codecentric.de/en/2014/01/useful-jvm-flags-part-8-gc-logging/
http://www.codeceo.com/article/twitter-jvm-performance.html#0-tsina-1-26634-397232819ff9a47a7b7e80a40613cfe1
http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
http://darktea.github.io/notes/2013/09/08/java-gc.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,001評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,786評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,986評(píng)論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,204評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,964評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,354評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,554評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,106評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,918評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,093評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,342評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,755評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,009評(píng)論 1 289
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,839評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,107評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,803評(píng)論 18 139
  • 主要關(guān)注點(diǎn): GC日志分析 調(diào)優(yōu)命令 調(diào)優(yōu)工具 GC日志分析 摘錄GC日志一部分(前段為年輕代gc回收;后段為fu...
    好久不見_9264閱讀 710評(píng)論 0 0
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,900評(píng)論 6 342
  • 最近總是會(huì)聽到朋友時(shí)不時(shí)的感慨:為什么美女旁邊的都長(zhǎng)得那么“隨心所欲”的? 我想起當(dāng)年剛進(jìn)北京林業(yè)大學(xué),去北京西單...
    吳宇仁閱讀 386評(píng)論 3 4
  • 昨天晚上,餐前水果是橙子,每個(gè)孩子三瓣。所有人都吃完了,看到有個(gè)小姑娘還沒(méi)吃,有點(diǎn)奇怪,問(wèn)她為什么還不吃,她說(shuō)要...
    我是一朵蘑菇a閱讀 662評(píng)論 0 0