末永 恭正 @YaSuenag
•
•
•
•
•
http://icedtea.classpath.org/wiki/HeapStats/jp
•
•
•
•
[Full GC (System.gc())
[PSYoungGen: 320K->0K(38400K)]
[ParOldGen: 8K->258K(87552K)] 328K->258K(125952K),
[Metaspace: 2485K->2485K(1056768K)],
0.0201510 secs]
※ログは見やすく改行しています
System::gc?
jcmdでGC.run?
どっちだ!?
[9.693s][info][gc]
GC(0) Pause Full (Diagnostic Command)
1M->0M(8M) 7.314ms
※ログは見やすく改行しています
[9.693s][info][gc]
GC(0) Pause Full (System.gc())
1M->0M(8M) 7.314ms
一目瞭然!
JDK-8068589: GCCause should distinguish jcmd GC.run from System.gc()
•
• JDK-8072693:
[BACKOUT] GCCause should distinguish jcmd GC.run from System.gc()
ログ出力メッセージの変化を
テストケースに反映するの忘れてた…
• JDK-8072913:
[REDO] GCCause should distinguish jcmd GC.run from System.gc()
•
•
http://openjdk.java.net/jeps/248
•
•
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 0.00 0.29 51.11 52.08 7 0.030 7 0.052 0.081
• ホントのFull GC
• G1のSTWフェーズ(Remark / Cleanup) どっち!?
http://mail.openjdk.java.net/pipermail/hotspot-gc-dev/2016-March/016774.html
それだけでは終わらなかった…
https://bugs.openjdk.java.net/browse/JDK-8153302
Backouted
JDK-8153333: [REDO] STW phases at Concurrent GC should count in PerfCounter
※2年がかり
ネガティブな出来事
•
•
ポジティブな出来事
•
• Submit Repo
•
• JEP 296
• https://hg.openjdk.java.net/jdk/submit/
•
http://mail.openjdk.java.net/pipermail/jdk-dev/2018-March/000897.html
“We do no longer require an Oracle sponsor
to push changes to HotSpot.”
•
•
•
https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html#JDK-8153333
•
• コンカレントGCの
• コンカレントGCの
•
• JDK-8207756: ZGC: jstat should show CGC STW phases
S0 S1 E O M CCS YGC YGCT FGC FGCT CGC CGCT GCT
0.00 0.00 0.00 48.87 96.28 87.33 28 0.204 1 0.110 6 0.014 0.327
•
•
•
https://www.slideshare.net/YaSuenag/java-9-62345544/16
PerfCounterで
GCのSTWを見分けたかった
•
•
https://www.slideshare.net/YaSuenag/serviceability-tools/14
•
•
•
• ???
•
•
•
•
• https://github.com/YaSuenag/garakuta/tree/master/NativeStackOverflow
https://www.slideshare.net/YaSuenag/java-9-62345544/55 ※少し加工しています
※Java Day Tokyo 2016でお話しさせてもらいました
$ jhsdb jsnap
•
•
Java Day Tokyo 2016でも
お話させてもらいました
https://www.slideshare.net/YaSuenag/java-9-62345544/57
•
•
hs_err
GC回数とメモリ量
jsnap
詳細な挙動を保持
tickはfreqで割れば秒に!
hs_errログのGCイベント jsnap
40回のGC(うち6回はFull GC) 43回のGC(32+6+5)
•
•
hs_errログのGCイベントの場合(GC開発MLで教えてもらいました)
コアイメージを
もらうところから始まる!
クラッシュした~
コアちょうだい
それ、どこよ??
•
•
•
•
•
Hackergarten
@
JavaOne
•
•
•
•
https://community.oracle.com/docs/DOC-1026550
•
•
•
http://mail.openjdk.java.net/pipermail/hotspot-dev/2014-October/015459.html
“I'm in Hackergarten @ JavaOne :-)”
• JDK-8059586:
hs_err report should treat redirected core pattern.
•
thisオブジェクト、何?
Thread 77506: (state = IN_NATIVE)
- NativeSEGV.doSEGV() @bci=0 (Interpreted frame)
- NativeCaller.callNative() @bci=0, line=26 (Interpreted frame)
- NativeSEGV.main(java.lang.String[]) @bci=11, line=12 (Interpreted frame)
このインスタンスの状態は?
OOPアドレスが見える!
JDK-8144965: Show oop pointer in call frame at HSDB.
O O P
•
•
•
•
•
関連するオブジェクトの
状態を確認できる!
•
•
•
• https://github.com/YaSuenag/garakuta/tree/master/oop
S A
•
•
• http://hg.openjdk.java.net/zgc/zgc/rev/8609ea491452
Class Unloading
https://bugs.openjdk.java.net/browse/JDK-8214897
https://bugs.openjdk.java.net/browse/JDK-8207843
SAのクラスヒストグラム
•
•
ZGCのクラスアンロード
•
•
&
生 生 死 生 死 死 生 生 生 死
クラスがアンロードされていると
オブジェクトサイズがわからない!
とあるZPage内の
オブジェクト
連続空間にしにくい
http://cr.openjdk.java.net/~ysuenaga/JDK-8207843/webrev.00/
※アンロードを考慮してない、拒否られたパッチ
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java
•
•
•
•
•
•
•
•
• jcmdも応答しない完全ハング状態でも大丈夫!
• クラッシュしても大丈夫!
JDK付属ツールにパッチを出しまくったワケ

JDK付属ツールにパッチを出しまくったワケ