More Related Content
Similar to Unified JVM Logging (20)
More from Yuji Kubota (20)
Unified JVM Logging
- 2. はじめに!
• 本セッションは Java 9 から変
わる JVM ログの設定方法を把
握することが第一目標です
• Log4J を代表としたロギングの
java.util.logging は扱いません
ここは口頭補足用なので見えなくても OK
Copyright©2017 NTT corp. All Rights Reserved.+ 2!
- 3. おやくそく!
• 本セッション (スライド) は、
以下の JVM 実装に基づきます
– OpenJDK 9 EA b170 (HotSpot VM)
– jdk9/jdk9/hotspot 12762:b3ee8ab233ed
EA = Early Access。正式リリース前のバイナリ
Copyright©2017 NTT corp. All Rights Reserved.+ 3!
$ java -version
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+170)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+170, mixed mode)+
- 9. 一貫性のない例!
Copyright©2017 NTT corp. All Rights Reserved.+ 9!
[GC [1 CMS-initial-mark: 2925342K(3853568K)] 2937899K(4160256K),
0.0098890 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[CMS-concurrent-mark-start]
[CMS-concurrent-mark: 0.454/0.454 secs] [Times: user=1.38 sys=0.00,
real=0.45 secs]
[GC3.586: [ParNew (promotion failed): 232923K->283768K(306688K),
0.1500250 secs] 3.736: [CMS: 3102003K->240898K(3853568K), 1.8438740
secs] 3334926K->259898K(4160256K), [CMS Perm : 125100K-
>115103K(262144K)], 1.9941370 secs] [Times: user=2.05 sys=0.00,
real=1.99 secs]
[Full GC62.696: [CMS64.460: [CMS-concurrent-sweep: 2.319/2.386
secs] [Times: user=3.75 sys=0.13, real=2.39 secs] (concurrent mode
failure): 3315076K-
JDK7uのログ+
マイナーアップデートで変わるのが一番辛い
- 10. 一貫性のない例!
マイナーアップデートで変わるのが一番辛い
Copyright©2017 NTT corp. All Rights Reserved.+ 10!
[GC [1 CMS-initial-mark: 2925342K(3853568K)] 2937899K(4160256K),
0.0098890 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[CMS-concurrent-mark-start]
[CMS-concurrent-mark: 0.454/0.454 secs] [Times: user=1.38 sys=0.00,
real=0.45 secs]
[GC3.586: [ParNew (promotion failed): 232923K->283768K(306688K),
0.1500250 secs] 3.736: [CMS: 3102003K->240898K(3853568K), 1.8438740
secs] 3334926K->259898K(4160256K), [CMS Perm : 125100K-
>115103K(262144K)], 1.9941370 secs] [Times: user=2.05 sys=0.00,
real=1.99 secs]
[Full GC62.696: [CMS64.460: [CMS-concurrent-sweep: 2.319/2.386
secs] [Times: user=3.75 sys=0.13, real=2.39 secs] (concurrent mode
failure): 3315076K-
唐突かつ特に
意味はない+
CMS-initial-mark-startは?+
出ないケースがある(上のログもFull GC)+
フェーズごとに異なる値(size)+
JDK7uのログ+
フェーズごとに異なる値(time)+
- 12. PrintXX, TraceXX だけでも 66 種類ある(8u131)
Copyright©2017 NTT corp. All Rights Reserved.+ 12!
PrintAdaptiveSizePolicy+
PrintCMSInitiationStatistics+
PrintCMSStatistics+
PrintClassHistogram+
PrintClassHistogramAfterFullGC+
PrintClassHistogramBeforeFullGC+
PrintCodeCache+
PrintCodeCacheOnCompilation+
PrintCommandLineFlags+
PrintCompilation+
PrintConcurrentLocks+
PrintFLSCensus+
PrintFLSStatistics+
PrintGC+
PrintGCApplicationConcurrentTime+
PrintGCApplicationStoppedTime+
PrintGCCause+
PrintGCDateStamps+
PrintGCDetails+
PrintGCID+
PrintGCTaskTimeStamps+
PrintGCTimeStamps+
PrintHeapAtGC+
PrintHeapAtGCExtended+
PrintHeapAtSIGBREAK+
PrintJNIGCStalls+
PrintJNIResolving+
PrintOldPLAB+
PrintOopAddress+
PrintPLAB
PrintPromotionFailure+
PrintReferenceGC+
PrintSafepointStatistics+
PrintSharedArchiveAndExit
PrintSharedDictionary+
PrintSharedSpaces
PrintTLAB+
PrintTenuringDistribution+
PrintTieredEvents+
PrintVMOptions+
PrintVMQWaitTime+
PrintWarnings+
TraceBiasedLocking+
TraceClassLoading+
TraceClassLoadingPreorder+
TraceClassPaths+
TraceClassResolution+
TraceClassUnloading
TraceDynamicGCThreads+
TraceJVMTI+
PrintParallelOldGCPhaseTimes
PrintStringDeduplicationStatistics+
PrintStringTableStatistics
PrintSafepointStatisticsCount+
PrintSafepointStatisticsTimeout+
TraceGen0Time+
TraceGen1Time+
TraceLoaderConstraints+
TraceMetadataHumongousAllocation+
TraceMonitorInflation+
TraceParallelOldGCTasks+
TraceRedefineClasses+
TraceSafepointCleanupTime+
TraceSuspendWaitFailures+
設定の多種多様さ(一部例)!
○:後から変えられない
ので事前に把握が必要+
△:細やかな設定が可能+
◎:無理ゲー+
- 13. 設定の多種多様さ!
• GC ログの場合
– 全て別々の設定
ログローテートは GC ログにだけある
Copyright©2017 NTT corp. All Rights Reserved.+ 13!
-Xloggc:/path/to/gc_%p_%t.log #出力先
-XX:+PrintGCDetails #詳細出力
-XX:+PrintGCDateStamps #タイムスタンプ
-XX:+UseGCLogFileRotation #ログローテート
-XX:GCLogFileSize=100m #(〃)サイズ数
-XX:NumberOfGCLogFiles=7 #(〃)世代数
JDK8u131の設定+
- 18. Quiz #1!
• Java 8 以前のログ出力に関係す
るフラグは -XX:+TraceXXX (17
種類) -XX:+PrintXXX(49種類)以
外にもある。マルかバツか。
マルバツクイズ
Copyright©2017 NTT corp. All Rights Reserved.+ 18!
- 19. Quiz #1!
• Java 8 以前のログ出力に関係す
るフラグは -XX:+TraceXXX (17
種類) -XX:+PrintXXX(49種類)以
外にもある。マルかバツか。
• マル。例えば ParallelGCVerbose,
ProfilerPrintByteCodeStatistics など
マルバツクイズ
Copyright©2017 NTT corp. All Rights Reserved.+ 19!
ドキュメントもほぼない
- 23. ログ例!
全 info ログを有効にしてバージョン表示
Copyright©2017 NTT corp. All Rights Reserved.+ 23!
% java -Xlog -version
[0.003s][info][os] SafePoint Polling address: 0x00007f6d378bf000
[0.003s][info][os] Memory Serialize Page address: 0x00007f6d378be000
[0.003s][info][os,thread] Capturing initial stack in user thread: req. size:
1024K, actual size: 1024K, top=0x00007ffc84f89000, bottom=0x00007ffc84e89000
[0.003s][info][os ] HotSpot is running with glibc 2.24, NPTL 2.24
:
[0.362s][info][startuptime ] Create VM, 0.3598174 secs
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+165)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+165, mixed mode)
[0.364s][info][os,thread ] JavaThread detaching (tid: 110366).
:
[0.371s][info][os,thread ] Thread finished (tid: 110367, pthread id:
140272699377408).
[0.371s][info][os,thread ] Thread finished (tid: 110376, pthread id:
140272177387264).
ログ内容+
- 24. ログ例!
デコレータ(decorator):各ログに付く汎用情報
Copyright©2017 NTT corp. All Rights Reserved.+ 24!
% java -Xlog -version
[0.003s][info][os] SafePoint Polling address: 0x00007f6d378bf000
[0.003s][info][os] Memory Serialize Page address: 0x00007f6d378be000
[0.003s][info][os,thread] Capturing initial stack in user thread: req. size:
1024K, actual size: 1024K, top=0x00007ffc84f89000, bottom=0x00007ffc84e89000
[0.003s][info][os ] HotSpot is running with glibc 2.24, NPTL 2.24
:
[0.362s][info][startuptime ] Create VM, 0.3598174 secs
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+165)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+165, mixed mode)
[0.364s][info][os,thread ] JavaThread detaching (tid: 110366).
:
[0.371s][info][os,thread ] Thread finished (tid: 110367, pthread id:
140272699377408).
[0.371s][info][os,thread ] Thread finished (tid: 110376, pthread id:
140272177387264).
起動経過時間、
ログレベル、タグ
(デフォルト)+
ログ内容+
- 25. ログ例!
タグ(tags):各ログは必ず1~5個のタグに属する
Copyright©2017 NTT corp. All Rights Reserved.+ 25!
% java -Xlog -version
[0.003s][info][os] SafePoint Polling address: 0x00007f6d378bf000
[0.003s][info][os] Memory Serialize Page address: 0x00007f6d378be000
[0.003s][info][os,thread] Capturing initial stack in user thread: req. size:
1024K, actual size: 1024K, top=0x00007ffc84f89000, bottom=0x00007ffc84e89000
[0.003s][info][os ] HotSpot is running with glibc 2.24, NPTL 2.24
:
[0.362s][info][startuptime ] Create VM, 0.3598174 secs
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+165)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+165, mixed mode)
[0.364s][info][os,thread ] JavaThread detaching (tid: 110366).
:
[0.371s][info][os,thread ] Thread finished (tid: 110367, pthread id:
140272699377408).
[0.371s][info][os,thread ] Thread finished (tid: 110376, pthread id:
140272177387264).
起動経過時間、
ログレベル、タグ
(デフォルト)+
タグ≒ログのカテゴリ+
ログ内容+カテゴリに沿ったログ内容+
- 27. Quiz #2!
• java -Xlog:disable -version を実行
した場合、バージョン表示は出る?
• 出ます。バージョン関係はJVMログ
とは別扱いのエラーメッセージです+
• ログではなく java コマンドの応答だ
と考えると解りやすい
前スライドで decorator が出てないのが解る
Copyright©2017 NTT corp. All Rights Reserved.+ 27!
ログ無効+
- 30. decorator!
• 各ログに追記される汎用情報+
– 未指定の場合: uptime, level, tags
• 起動時間(秒)、ログレベル、タグ
出力順は固定
Copyright©2017 NTT corp. All Rights Reserved.+ 30!
none,
time (t), utctime (utc), timemillis (tm), timenanos (tn),
uptime (u), uptimemillis (um), uptimenanos (un),
hostname (hn), pid (p), tid (ti), level (l), tags (tg)
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
何もなし+
- 31. decorator!
• 各ログに追記される汎用情報+
– 未指定の場合: uptime, level, tags
• 起動時間(秒)、ログレベル、タグ
出力順は固定
Copyright©2017 NTT corp. All Rights Reserved.+ 31!
none,
time (t), utctime (utc), timemillis (tm), timenanos (tn),
uptime (u), uptimemillis (um), uptimenanos (un),
hostname (hn), pid (p), tid (ti), level (l), tags (tg)
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
時刻+
起動時間+
何もなし+
- 32. decorator!
• 全部乗せ
– 「,」で区切れば複数指定できる+
指定の順番を変えても出力の順番はこの通り
Copyright©2017 NTT corp. All Rights Reserved.+ 32!
% java -Xlog:::t,utc,u,tm,um,tn,un,hn,p,ti,l,tg
[2017-05-12T07:38:12.016-0700]
[2017-05-12T14:38:12.016+0000]
[14.101s]
[1494599892016ms][14102ms]
[963128253785077ns][14101433214ns]
[localhost.localdomain][73398][115144]
[info][os,thread ]
Thread finished (tid: 115144, pthread id: 139879454586624).
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
※本来は一行表示+
- 33. decorator!
• 全部乗せ
– 「,」で区切れば複数指定できる+
pid はファイル名に付ければほぼ困らない
Copyright©2017 NTT corp. All Rights Reserved.+ 33!
% java -Xlog:::t,utc,u,tm,um,tn,un,hn,p,ti,l,tg
[2017-05-12T07:38:12.016-0700]
[2017-05-12T14:38:12.016+0000]
[14.101s]
[1494599892016ms][14102ms]
[963128253785077ns][14101433214ns]
[localhost.localdomain][73398][115144]
[info][os,thread ]
Thread finished (tid: 115144, pthread id: 139879454586624).
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
process id と thread
id は見分けにくい+
※本来は一行表示+
- 35. output, output-option!
• output: 出力先 (未指定時:stdout)
– stdout / stderr / file=<filename>
• %p: pid, %t: 開始時刻 (filenameで利用)
• output-option: ログローテート設定
– 「,」で区切って以下の二つを指定する
– filecount=n: 世代数 (未指定時:5)
– filesize=n: ファイルサイズ (未指定時:20M)
ローテート設定は指定して増やした方が無難
Copyright©2017 NTT corp. All Rights Reserved.+ 35!
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
- 37. what!
• Tag (未指定の場合:all)
悪夢再び?
Copyright©2017 NTT corp. All Rights Reserved.+ 37!
add, age, alloc, aot, annotation, arguments, attach, barrier, biasedlocking, blocks, bot,
breakpoint, census, class, classhisto, cleanup, compaction, constraints, constantpool, coops,
cpu, cset, data, defaultmethods, dump, ergo, exceptions, exit, fingerprint, freelist, gc,
hashtables, heap, humongous, ihop, iklass, init, itables, jni, jvmti, liveness, load, loader,
logging, mark, marking, methodcomparator, metadata, metaspace, mmu, modules,
monitorinflation, monitormismatch, nmethod, normalize, objecttagging, obsolete, oopmap, os,
pagesize, patch, path, phases, plab, promotion, preorder, protectiondomain, ref, redefine,
refine, region, remset, purge, resolve, safepoint, scavenge, scrub, stacktrace, stackwalk,
start, startuptime, state, stats, stringdedup, stringtable, stackmap, subclass, survivor,
sweep, task, thread, tlab, time, timer, update, unload, verification, verify, vmoperation,
vtables, workgang, jfr, system, parser, bytecode, setting, event
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
- 39. タグの設定方法!
タグは * + , を利用して柔軟に指定できる
Copyright©2017 NTT corp. All Rights Reserved.+ 39!
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
• -Xlog:T1
• -Xlog:T1*
• -Xlog:T1+T2
• -Xlog:T1+T2*
• -Xlog:T1*+T2*
• -Xlog:T1*,T2*
• -Xlog:T1*,T2*=off
[T1 ] XXX
[T2 ] XXX
[TX ] XXX
[T1,T2 ] XXX
[T1,TX ] XXX
[T2,TX ] XXX
[T1,T2,TX] XXX
TX+
T1+ T2+
all で
全部+
- 40. タグの設定方法!
Copyright©2017 NTT corp. All Rights Reserved.+ 40!
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
• -Xlog:T1
• -Xlog:T1*
• -Xlog:T1+T2
• -Xlog:T1+T2*
• -Xlog:T1*+T2*
• -Xlog:T1*,T2*
• -Xlog:T1*,T2*=off
[T1 ] XXX
[T2 ] XXX
[TX ] XXX
[T1,T2 ] XXX
[T1,TX ] XXX
[T2,TX ] XXX
[T1,T2,TX] XXX
T1+
T1だけ。1タグのログは主にサマリ確認用
T2+
TX+
- 41. タグの設定方法!
T1関係全て。gc* 等、その機能全体の監視時に
Copyright©2017 NTT corp. All Rights Reserved.+ 41!
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
• -Xlog:T1
• -Xlog:T1*
• -Xlog:T1+T2
• -Xlog:T1+T2*
• -Xlog:T1*+T2*
• -Xlog:T1*,T2*
• -Xlog:T1*,T2*=off
[T1 ] XXX
[T2 ] XXX
[TX ] XXX
[T1,T2 ] XXX
[T1,TX ] XXX
[T2,TX ] XXX
[T1,T2,TX] XXX
T1+
TX+
T2+
- 42. タグの設定方法!
この組合せのみ。別出力とか制限付けたい時に
Copyright©2017 NTT corp. All Rights Reserved.+ 42!
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
• -Xlog:T1
• -Xlog:T1*
• -Xlog:T1+T2
• -Xlog:T1+T2*
• -Xlog:T1*+T2*
• -Xlog:T1*,T2*
• -Xlog:T1*,T2*=off
[T1 ] XXX
[T2 ] XXX
[TX ] XXX
[T1,T2 ] XXX
[T1,TX ] XXX
[T2,TX ] XXX
[T1,T2,TX] XXX
TX+
T1+ T2+
- 43. タグの設定方法!
T1とT2が含まれる全てのログ。
Copyright©2017 NTT corp. All Rights Reserved.+ 43!
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
• -Xlog:T1
• -Xlog:T1*
• -Xlog:T1+T2
• -Xlog:T1+T2*
• -Xlog:T1*+T2*
• -Xlog:T1*,T2*
• -Xlog:T1*,T2*=off
[T1 ] XXX
[T2 ] XXX
[TX ] XXX
[T1,T2 ] XXX
[T1,TX ] XXX
[T2,TX ] XXX
[T1,T2,TX] XXX
TX+
T1+ T2+
- 44. タグの設定方法!
T1+T2* ≒ (T1+T2)*
Copyright©2017 NTT corp. All Rights Reserved.+ 44!
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
• -Xlog:T1
• -Xlog:T1*
• -Xlog:T1+T2
• -Xlog:T1+T2*
• -Xlog:T1*+T2*
• -Xlog:T1*,T2*
• -Xlog:T1*,T2*=off
[T1 ] XXX
[T2 ] XXX
[TX ] XXX
[T1,T2 ] XXX
[T1,TX ] XXX
[T2,TX ] XXX
[T1,T2,TX] XXX
TX+
T1+ T2+
これは
NG+
- 45. タグの設定方法!
T1とT2に関連するもの全部。大分類二つとか
Copyright©2017 NTT corp. All Rights Reserved.+ 45!
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
• -Xlog:T1
• -Xlog:T1*
• -Xlog:T1+T2
• -Xlog:T1+T2*
• -Xlog:T1*+T2*
• -Xlog:T1*,T2*
• -Xlog:T1*,T2*=off
[T1 ] XXX
[T2 ] XXX
[TX ] XXX
[T1,T2 ] XXX
[T1,TX ] XXX
[T2,TX ] XXX
[T1,T2,TX] XXX
T1+ T2+
TX+
これは
NG+
- 46. T1+
タグの設定方法!
T1関連は出しつつ、T2関連は秘密にする
Copyright©2017 NTT corp. All Rights Reserved.+ 46!
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
• -Xlog:T1
• -Xlog:T1*
• -Xlog:T1+T2
• -Xlog:T1+T2*
• -Xlog:T1*+T2*
• -Xlog:T1*,T2*
• -Xlog:T1*,T2*=off
[T1 ] XXX
[T2 ] XXX
[TX ] XXX
[T1,T2 ] XXX
[T1,TX ] XXX
[T2,TX ] XXX
[T1,T2,TX] XXX
TX+
T2+
これは
NG+
- 47. タグの設定方法!
これはどうなるか?
Copyright©2017 NTT corp. All Rights Reserved.+ 47!
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
• -Xlog:
T1*=debug,T1+T2=off
[T1 ] XXX
[T2 ] XXX
[TX ] XXX
[T1,T2 ] XXX
[T1,TX ] XXX
[T2,TX ] XXX
[T1,T2,TX] XXX
T2+T1+
TX+
- 48. タグの設定方法!
T1 関連ログを全てdebugログ出力
Copyright©2017 NTT corp. All Rights Reserved.+ 48!
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
• -Xlog:
T1*=debug,T1+T2=off
[T1 ] XXX
[T2 ] XXX
[TX ] XXX
[T1,T2 ] XXX
[T1,TX ] XXX
[T2,TX ] XXX
[T1,T2,TX] XXX
T1+T1+
TX+
T2+
- 49. T1+
タグの設定方法!
T1とT2の組合せに限ったログ
Copyright©2017 NTT corp. All Rights Reserved.+ 49!
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
• -Xlog:
T1*=debug,T1+T2=off
[T1 ] XXX
[T2 ] XXX
[TX ] XXX
[T1,T2 ] XXX
[T1,TX ] XXX
[T2,TX ] XXX
[T1,T2,TX] XXX
T1+T1+
TX+
T1+ T2+
- 50. T1+
タグの設定方法!
は、出力しない
Copyright©2017 NTT corp. All Rights Reserved.+ 50!
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
• -Xlog:
T1*=debug,T1+T2=off
[T1 ] XXX
[T2 ] XXX
[TX ] XXX
[T1,T2 ] XXX
[T1,TX ] XXX
[T2,TX ] XXX
[T1,T2,TX] XXX
T1+T1+
TX+
T1+ T2+
- 51. T1+
タグの設定方法!
最終的に橙色部分が debug レベルで出力
Copyright©2017 NTT corp. All Rights Reserved.+ 51!
-Xlog[:[what][:[output][:[decorators][:output-options]]]]
• -Xlog:
T1*=debug,T1+T2=off
T1+T1+
TX+
T1+
[T1 ] XXX
[T2 ] XXX
[TX ] XXX
[T1,T2 ] XXX
[T1,TX ] XXX
[T2,TX ] XXX
[T1,T2,TX] XXX
T2+
- 54. Quiz #3!
• java -Xlog:disable –Xlog:gc* とした
場合はどうなるか?
• 前から順番に全て評価する。全部無
効にした後に、GC関係のinfoログを
有効にするので –Xlog:gc* と同義+
• 順番に評価されるので、最後の設定
のみ有効になるわけではない
別々のファイルに出力したい時などで使えます
Copyright©2017 NTT corp. All Rights Reserved.+ 54!
- 56. Java 8からのGCログ移行!
• Java 8
• Java 9
以前より詳細になるが後でフィルタすれば良い
Copyright©2017 NTT corp. All Rights Reserved.+ 56!
-Xloggc:/path/to/gc_%p_%t.log #出力先
-XX:+PrintGCDetails #詳細出力
-XX:+PrintGCDateStamps #タイムスタンプ
-XX:+UseGCLogFileRotation #ログローテート
-XX:GCLogFileSize=100m #(〃)サイズ数
-XX:NumberOfGCLogFiles=7 #(〃)世代数
-Xlog:gc*=debug:/path/to/gc_%p_%t.log:time,
level,tags:filesize=100m, filecount=7
※ログサイズ等は適当です(普通は足りない)+
- 58. 起動後もログ設定が可能!
• jcmd で起動後から変えられる
無効化は jcmd VM.log disable を実行
Copyright©2017 NTT corp. All Rights Reserved.+ 58!
$ jcmd <pid> VM.log output="file=/path/to/gc_%p_%t.log"
output_options="filecount=7,filesize=200m"
what="gc*=debug" decorators="time,level,tags"
<pid>:
Command executed successfully
$ jcmd <pid> VM.log list
<pid>:
:
Log output configuration:
#0: stdout all=warning uptime,level,tags
#1: stderr all=off uptime,level,tags
#2: file=/path/to/gc_%p_%t.log gc*=debug time,level,tags+
-Xlog の設定
方法と一緒+
output=#2 を指定
すると上書き可能+
- 66. GCの要確認ログの移行状況!
• Full GC 起因となるイベント
– Evacuation Failure (G1 GC)
– promotion failed (CMS GC)
– Concurrent mode failure (CMS GC)
CMS GC は JDK 9 から非推奨化
Copyright©2017 NTT corp. All Rights Reserved.+ 66!
[info][gc] GC(N) To-space exhausted
[info][gc, promotion] GC(N) Promotion failed
[debug][gc] GC(N) Concurrent mode failure
ナンバリング(発生回数)+
- 67. GCの要確認ログの移行状況!
• Stop The World を伴う GC 処理
Pause が付く
Copyright©2017 NTT corp. All Rights Reserved.+ 67!
[info][gc] GC(N) Pause <種別> (<GC Cause>)
[info][gc] GC(1) Pause Young (Allocation Failure)
[info][gc] GC(2) Pause Full (Allocation Failure)
# G1 GC
[info][gc] GC(3) Pause Initial Mark (G1 Evacuation Pause)
[info][gc] GC(3) Pause Remark
[info][gc] GC(3) Pause Cleanup
# CMS GC
[info][gc] GC(4) Pause Initial Mark
[info][gc] GC(4) Pause Remark
- 68. STW の確認方法!
-Xlog:gc*=debug,vmoperation=debug
Copyright©2017 NTT corp. All Rights Reserved.+ 68!
[debug][vmoperation] begin VM_Operation (0x0000700001c2e1c8):
G1IncCollectionPause, mode: safepoint, requested by thread
0x00007fb6818df800
[info ][gc,start ] GC(6) Pause Initial Mark (G1 Evacuation Pause)
:(Initial Mark の処理)
[info ][gc ] GC(6) Pause Initial Mark (G1 Evacuation Pause)
114M->82M(256M) 2.598ms
[info ][gc,cpu ] GC(6) User=0.00s Sys=0.00s Real=0.01s
[debug][vmoperation] end VM_Operation (0x0000700001c2e1c8):
G1IncCollectionPause, mode: safepoint, requested by thread
0x00007fb6818df800
G1 GC の Initial Mark フェーズの例 (抜粋)+
STW 時間+ CPU
時間+
- 69. GC 以外の STW 確認方法!
• VM_Operation で実行される
– タイムスタンプの差分(今回は0.02sec)
でSTW時間が解る
タイムスタンプの分解能以上は不可なので注意
Copyright©2017 NTT corp. All Rights Reserved.+ 69!
[2017-05-17T23:38:35.277-0900][debug][vmoperation]
begin VM_Operation (0x0000700001c2e1c8): Deoptmize, mode: safepoint,
requested by thread 0x00007fb6818df800
:STW を伴う処理
[2017-05-12T23:38:35.279-0900][debug][vmoperation]
end VM_Operation (0x0000700001c2e1c8): Deoptmize, mode: safepoint,
requested by thread 0x00007fb6818df800
対応している+
- 70. ヒープ状況の確認!
• ヒープ全体の使用量と容量
– 各 GC 方式で共通の表示
• Pause 処理終了時にヒープ全体量出力
領域ごとは出ないが概要は掴める
Copyright©2017 NTT corp. All Rights Reserved.+ 70!
[info ][gc] GC(6) Pause Initial Mark (G1
Evacuation Pause) 114M->82M(256M) 2.598ms
処理前の
使用量+
処理後の
使用量+
容量+
- 72. ヒープ状況の確認(G1)!
• 各領域のヒープ状況(info)
水:Eden 橙:Survivor 緑:Old 紫:Humongous 藍:未使用
info ログは単位がリージョン数で出力される
Copyright©2017 NTT corp. All Rights Reserved.+ 72!
[info][gc,heap ] Heap region size: 1M
------------------------------------------------------------------------------------------------------------------
:GC処理
[info][gc,heap ] GC(8) Eden regions: 1->0(68)
[info][gc,heap ] GC(8) Survivor regions: 3->4(9)
[info][gc,heap ] GC(8) Old regions: 8->8
[info][gc,heap ] GC(8) Humongous regions: 106->94
[info][gc,metaspace] GC(8) Metaspace: 6823K->6823K(1056768K)
:debug ログ
[info][gc ] GC(8) Pause Initial Mark (G1 Evacuation
Pause) 116M->105M(308M) 3.401ms
リージョンサ
イズが異なる+
掛算してサイズ計算+
Humongousはここから引き算して概算+
- 73. ヒープ状況の確認(G1)!
• 各領域のヒープ状況(debug)+
水:Eden 橙:Survivor 緑:Old 紫:Humongous 藍:未使用+
Humongous は?
Copyright©2017 NTT corp. All Rights Reserved.+ 73!
[debug][gc,heap ] GC(8) Heap after GC invocations=13 (full 0):
[debug][gc,heap ] GC(8) garbage-first heap total 315392K, used
107536K [0x00000006c0000000, 0x00000006c01009a0, 0x00000007c0000000)
[debug][gc,heap ] GC(8) region size 1024K, 4 young (4096K), 4
survivors (4096K)
[debug][gc,heap ] GC(8) Metaspace used 6823K, capacity 6906K,
committed 7040K, reserved 1056768K
[debug][gc,heap ] GC(8) class space used 612K, capacity 637K,
committed 640K, reserved 1048576K
リージョン数+ Eden+Survivor+
サイズ+
- 74. ヒープ状況の確認(G1)!
• 各領域のヒープ状況(debug)+
水:Eden 橙:Survivor 緑:Old 紫:Humongous 藍:未使用+
Live なものを心を籠めて全部足し算
Copyright©2017 NTT corp. All Rights Reserved.+ 74!
[debug][gc,humongous] GC(8) Live humongous region 0 object size
1228816 start 0x00000006c0000000 with remset 1 code roots 0 is
marked 0 reclaim candidate 1 type array 1
:
[debug][gc,humongous] GC(8) Live humongous region 106 object size
1884176 start 0x00000006c6a00000 with remset 0 code roots 0 is
marked 0 reclaim candidate 0 type array 1
[debug][gc,humongous] GC(8) Live humongous region 112 object size
860176 start 0x00000006c7000000 with remset 1 code roots 0 is
marked 0 reclaim candidate 1 type array 1