Movatterモバイル変換


[0]ホーム

URL:


Yasumasa Suenaga, profile picture
Uploaded byYasumasa Suenaga
PPTX, PDF5,014 views

Java 9で進化する診断ツール

Java Day Tokyo 2016講演資料

Embed presentation

Downloaded 30 times
末永 恭正 @YaSuenaghttps://www.flickr.com/photos/falcon_33/8988705269#jdt2016_4A
OracleとJavaは、Oracle Corporation及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。••••
•••••http://icedtea.classpath.org/wiki/HeapStats/jp
突然ですがjcmdjhsdb&
情報収集・設定変更プロセスハング解析コア解析jcmdjhsdb
•••• http://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr016.html#BABFCHDEIt is suggested to use the latest utility, jcmd instead of theprevious jstack utility for enhanced diagnostics and reducedperformance overhead.
http://docs.oracle.com/javase/jp/8/docs/technotes/tools/unix/jstack.html#BABBIIJD
http://docs.oracle.com/javase/jp/8/docs/technotes/tools/unix/s11-troubleshooting_tools.html#sthref327
コマンド 内容VM.log ログ出力設定とローテーションの実行VM.print_touched_methods 実行されたメソッドの一覧表示VM.classloader_stats クラスローダに関する情報の表示VM.stringtable StringTable(String#intern()した文字列や解決したクラス名が入っているテーブル)の概要表示、ダンプVM.symboltable SymbolTable(メソッド名等)の概要表示、ダンプVM.class_hierarchy Javaヒープ中のクラス階層構造の表示VM.info javaプロセスの詳細情報、およびマシン情報の表示VM.dynlibs ロードされている共有ライブラリの出力VM.set_flag フラグ(-XXオプション)の変更VMドメイン
コマンド 内容Compiler.directives_clear JITコンパイラへの指示をすべてクリアCompiler.directives_remove 一番最後のJITコンパイラへの指示を削除Compiler.directives_add JITコンパイラへの指示をJSON形式での指定Compiler.directives_print JITコンパイラへの現在の指示内容の表示Compiler.codecache コードキャッシュの概要の表示Compiler.codelist コードキャッシュの内容表示Compiler.queue JITコンパイラのコンパイル待ちキューにあるメソッドの表示Compilerドメイン
コマンド 内容ManagementAgent.status JMXエージェントの状態表示JVMTI.agent_load JVMTIエージェントのロードJVMTI.data_dump JVMTIのデータダンプ要求(DataDumpRequest)発行GC.finalizer_info ファイナライザ実行待ちキューに入っているクラス情報の表示GC.heap_info Javaヒープの概要表示その他
ログの出力設定忘れちゃった!!
•• http://openjdk.java.net/jeps/158••
$ jcmd 1234 VM.log output="file=gc.log" output_options="filecount=5,filesize=10m" what="gc=debug" decorators="time,level"オプション名 内容output 出力先”#<数字>”を指定すると既存のoutputに対する変更を意味するoutput_options 出力オプションwhat タグやログレベルの設定decorators ログデコレーションの設定
•1.2.••$ jcmd 1234 VM.log rotate
$ jcmd 1234 VM.log list1234:Available log levels: off, trace, debug, info, warning, errorAvailable log decorators: time (t), uptime (u), timemillis (tm), uptimemillis (um), timenanos (tn), uptimenanos(un), hostname (hn), pid (p), tid (ti), level (l), tags (tg)Available log tags: add, age, alloc, arguments, annotation, barrier, biasedlocking, bot, breakpoint, census,class, classhisto, cleanup, compaction, constraints, constantpool, coops, cpu, cset, data, defaultmethods, dump,ergo, exceptions, exit, freelist, gc, 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, path, phases, plab, promotion,preorder, protectiondomain, ref, redefine, refine, region, remset, purge, resolve, safepoint, scavenge, scrub,stacktrace, start, startuptime, state, stats, stringdedup, stringtable, stackmap, subclass, survivor, sweep, task,thread, tlab, time, timer, update, unload, verification, verify, vmoperation, vtables, workgangDescribed tag combinations:logging: Logging for the log framework itselfLog output configuration:#0: stdout all=warning uptime,level,tags#1: stderr all=off uptime,level,tags#2: gc.log gc=debug filecount=5,filesize=20M level,tagsJDK-8153074UL: Show output option in VM.log jcmd
障害解析に必要な情報を簡単に収集させたい
•••••
$ jcmd 1234 VM.info1234:## JRE version: Java(TM) SE Runtime Environment (9.0+119) (build 9-ea+119)# Java VM: Java HotSpot(TM) 64-Bit Server VM (9-ea+119, mixed mode, tiered, compressed oops, g1 gc, linux-amd64)--------------- S U M M A R Y ------------Command Line: LongSleepHost: Intel(R) Core(TM) i3-2367M CPU @ 1.40GHz, 2 cores, 1G, Fedora release 23 (Twenty Three)Time: Mon May 23 20:32:22 2016 JST elapsed time: 16 seconds (0d 0h 0m 16s)--------------- P R O C E S S ---------------Heap address: 0x00000000e0e00000, size: 498 MB, Compressed Oops mode: 32-bitNarrow klass base: 0x0000000000000000, Narrow klass shift: 3Compressed class space size: 1073741824 Address: 0x0000000100000000:
ヤバい!オプションつけ忘れた…
••$ jcmd 1234 VM.flags -all | grep -E 'manageable|product_rw'intx CMSAbortablePrecleanWaitMillis = 100 {manageable}intx CMSTriggerInterval = -1 {manageable}intx CMSWaitDuration = 2000 {manageable}bool HeapDumpAfterFullGC = false {manageable}bool HeapDumpBeforeFullGC = false {manageable}bool HeapDumpOnOutOfMemoryError = false {manageable}ccstr HeapDumpPath = {manageable}uintx MaxHeapFreeRatio = 70 {manageable}uintx MinHeapFreeRatio = 40 {manageable}bool PrintClassHistogram = false {manageable}bool PrintConcurrentLocks = false {manageable}
•$ jcmd 1234 VM.set_flag HeapDumpOnOutOfMemoryError true1234:Command executed successfully$ jcmd 1234 VM.flags1234:-XX:CICompilerCount=2 -XX:ConcGCThreads=1 -XX:G1HeapRegionSize=1048576-XX:+HeapDumpOnOutOfMemoryError -XX:InitialHeapSize=33554432 -XX:MarkStackSize=4194304-XX:MaxHeapSize=522190848 -XX:MaxNewSize=312475648 -XX:MinHeapDeltaBytes=1048576-XX:NonNMethodCodeHeapSize=5824844 -XX:NonProfiledCodeHeapSize=122916698-XX:ProfiledCodeHeapSize=122916698 -XX:ReservedCodeCacheSize=251658240-XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GCJDK-8155936Boolean value should be set 1/0 or true/false viaVM.set_flag jcmd
JITを細かく制御して問題発生を予防しましょうね
••••
•[{match: ["*String.hashCode"],c2: {Exclude: true}}]
$ jcmd 1234 Compiler.directives_add compiler-directive.json1234:1 compiler directives added
•$ jcmd 1234 Compiler.directives_print1234:Directive:matching: *String.hashCodec1 directives:inline: -Enable:false Exclude:false BreakAtExecute:false BreakAtCompile:false Log:false PrintAssembly:false PrintInlining:false PrintNMethods:falseBackgroundCompilation:true ReplayInline:false DumpReplay:false DumpInline:false CompilerDirectivesIgnoreCompileCommands:false DisableIntrinsic:BlockLayoutByFrequency:true PrintOptoAssembly:false PrintIntrinsics:false TraceOptoPipelining:false TraceOptoOutput:false TraceSpilling:falseVectorize:false VectorizeDebug:false CloneMapDebug:false DoReserveCopyInSuperWordDebug:false IGVPrintLevel:0 MaxNodeLimit:80000c2 directives:inline: -Enable:true Exclude:true BreakAtExecute:false BreakAtCompile:false Log:false PrintAssembly:false PrintInlining:false PrintNMethods:falseBackgroundCompilation:true ReplayInline:false DumpReplay:false DumpInline:false CompilerDirectivesIgnoreCompileCommands:false DisableIntrinsic:BlockLayoutByFrequency:true PrintOptoAssembly:false PrintIntrinsics:false TraceOptoPipelining:false TraceOptoOutput:false TraceSpilling:falseVectorize:false VectorizeDebug:false CloneMapDebug:false DoReserveCopyInSuperWordDebug:false IGVPrintLevel:0 MaxNodeLimit:80000Enable :ディレクティブの明示的設定Exclude :JIT除外設定
オレのアプリ、どれぐらいJITの恩恵受けてるんだ?
•$ jcmd 1234 Compiler.codelist1234:53 4 java.lang.String.hashCode()I [0x00007fd2cd776090, 0x00007fd2cd776200 - 0x00007fd2cd776398]コンパイルIDコンパイルレベル(Tiered Compilation)メソッド名nmethod開始アドレスコード開始アドレスコード終了アドレス
••• http://otndnld.oracle.co.jp/ondemand/javaday2014/pdf/C2-JavaDay-304328.pdf
さて、診断ツール仕込むか
•••••
••• http://docs.oracle.com/javase/8/docs/jdk/api/attach/spec/index.html
•
•0の意味:Agent_OnAttach()の戻り値http://docs.oracle.com/javase/jp/8/docs/platform/jvmti/jvmti.html#onattach
•
ヒープの状況をざっくり知りたい
•••••$ jcmd 1234 GC.heap_info1234:garbage-first heap total 32768K, used 1024K [0x00000000e0e00000, 0x00000000e0f00100, 0x0000000100000000)region size 1024K, 2 young (2048K), 0 survivors (0K)Metaspace used 3332K, capacity 4486K, committed 4864K, reserved 1056768Kclass space used 328K, capacity 386K, committed 512K, reserved 1048576K
•••
プロローグ(ファイルヘッダ) エントリ
•"Attach Listener" #12 daemon prio=9 os_prio=0 tid=0x00007f3224001000 nid=0xb8f7 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE
•• http://www.slideshare.net/YaSuenag/serviceability-tools
ターゲットプロセスがハングしたら動かない!※PerfCounter.print以外
••••
• S A•• Java 9からは各種ツールでSAが使えなくなりました!•• OpenJDKのdebuginfoパッケージ必須•••
http://docs.oracle.com/javase/8/docs/serviceabilityagent/index.html
ツール名 概要clhsdb コマンドライン版HotSpotデバッガhsdb GUI版HotSpotデバッガjstack SA版jstackjmap SA版jmapjinfo SA版jinfojsnap hsperfdataの読み取り
••••
••••
••••••JDK-8151815Could not parse core image with JSnap.
•(gdb) x/g ((G1CollectedHeap *)Universe::_collectedHeap)->_g1mm->_full_collection_counters->_time ->_valuep0x7f8c6884b960: 15535194例:Full GCの累計実行時間を出してみる(jstatのFGCT相当)15535194÷1000000000≒0.015 (sec)
GCアルゴリズムによってカウンタへのポインタまでの辿り方違うのかよ…OpenJDKのソースなんて読みたくねーよ…
•$ $JAVA_HOME/bin/jhsdb jsnap --exe $JAVA_HOME/bin/java --core core.6937 --all | grep -a -e sun.gc.collector.1.time -e sun.os.hrt.frequencysun.gc.collector.1.time=15535194 tick(s)sun.os.hrt.frequency=1000000000 Hz15535194÷1000000000≒0.015 (sec)この実現のためにJDK-8151815ガンバってます!
HotSpot(C++)の世界とJavaの世界を結びつけるのがタイヘン
•••••••
••
••••
•••
•••
•••
Project Kenaiからのダウンロードはやめましょう!
•••https://kenai.com/projects/base-hsdis/downloads
Project Kenaiのもの Fedora23でビルドしたものStubRoutines::updateBytesCRC32※OracleJDK 8u92 Linux x64で確認(-XX:+UnlockDiagnosticVMOptions -XX:+PrintStubCode)
Fedora23 x64の場合$ dnf download --source binutils$ rpm -ivh <binutils>$ cd ~/rpmbuild/SPECS$ rpmbuild -bp binutils.spec$ cd <OpenJDK src>/hotspot/src/share/tools/hsdis$ make BINUTILS=~/rpmbuild/BUILD/<binutils> ARCH=amd64$ ls build/linux-amd64/hsdis-amd64.sobuild/linux-amd64/hsdis-amd64.sobinutilsのSRPM取得SRPM展開hsdisのビルドhsdis本体
••••
•••• https://bugs.openjdk.java.net/••
最後にもう1度jcmdjhsdb&
Java 9で進化する診断ツール

Recommended

PPTX
Metaspace
PDF
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
PDF
Java EE から Quarkus による開発への移行について
PPTX
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
PDF
Unified JVM Logging
PDF
JVMのGCアルゴリズムとチューニング
PDF
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
PDF
OpenJDK トラブルシューティング #javacasual
PPTX
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
PPTX
iostat await svctm の 見かた、考え方
PDF
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
PDF
Java によるクラウドネイティブ の実現に向けて
PDF
コンテナ環境でJavaイメージを小さくする方法!
PDF
なかったらINSERTしたいし、あるならロック取りたいやん?
PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PPTX
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
PPTX
PDF
Native Memory Tracking
PDF
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PPTX
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
PDF
CPUから見たG1GC
PDF
ClassLoader Leak Patterns
 
PPTX
java.lang.OutOfMemoryError #渋谷java
PDF
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
PDF
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
PDF
ゼロからはじめるKVM超入門
PDF
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
PPTX
Java トラブル解析支援ツール HeapStats のご紹介
PDF
楽して JVM を学びたい #jjug

More Related Content

PPTX
Metaspace
PDF
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
PDF
Java EE から Quarkus による開発への移行について
PPTX
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
PDF
Unified JVM Logging
PDF
JVMのGCアルゴリズムとチューニング
PDF
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
PDF
OpenJDK トラブルシューティング #javacasual
Metaspace
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Java EE から Quarkus による開発への移行について
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
Unified JVM Logging
JVMのGCアルゴリズムとチューニング
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
OpenJDK トラブルシューティング #javacasual

What's hot

PPTX
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
PPTX
iostat await svctm の 見かた、考え方
PDF
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
PDF
Java によるクラウドネイティブ の実現に向けて
PDF
コンテナ環境でJavaイメージを小さくする方法!
PDF
なかったらINSERTしたいし、あるならロック取りたいやん?
PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PPTX
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
PPTX
PDF
Native Memory Tracking
PDF
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PPTX
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
PDF
CPUから見たG1GC
PDF
ClassLoader Leak Patterns
 
PPTX
java.lang.OutOfMemoryError #渋谷java
PDF
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
PDF
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
PDF
ゼロからはじめるKVM超入門
PDF
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
iostat await svctm の 見かた、考え方
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
Java によるクラウドネイティブ の実現に向けて
コンテナ環境でJavaイメージを小さくする方法!
なかったらINSERTしたいし、あるならロック取りたいやん?
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Native Memory Tracking
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
CPUから見たG1GC
ClassLoader Leak Patterns
 
java.lang.OutOfMemoryError #渋谷java
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
ゼロからはじめるKVM超入門
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)

Viewers also liked

PPTX
Java トラブル解析支援ツール HeapStats のご紹介
PDF
楽して JVM を学びたい #jjug
PDF
JVM のいろはにほ #javajo
PPTX
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
PDF
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
PPTX
第七回 渋谷Java - Apache Shiroを使ってみた
PPTX
HeapStats(Java解析ツールバトル)
Java トラブル解析支援ツール HeapStats のご紹介
楽して JVM を学びたい #jjug
JVM のいろはにほ #javajo
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
第七回 渋谷Java - Apache Shiroを使ってみた
HeapStats(Java解析ツールバトル)

Similar to Java 9で進化する診断ツール

PDF
JDKツール使ってますか
PPTX
jcmd をさわってみよう
PDF
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
PPTX
Introduction to JIT Compiler in JVM
PDF
OpenJDK HotSpot C1Compiler Overview
PDF
Adaptive optimization of JIT compiler
PDF
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
PDF
20130819 jjugnslt
PDF
Javaトラブルに備えよう #jjug_ccc #ccc_h2
PDF
HeapStats: Introduction and Technical Preview
ODP
Android デバッグ小ネタ
 
PDF
Debug Hacks at Security and Programming camp 2011
PDF
Programming camp 2010 debug hacks
KEY
関ジャバ JavaOne Tokyo 2012報告会
PPT
Android Hacks - Hack40
PDF
JavaOne 2015 JDK Update (Jigsaw) #j1jp
PDF
Let's play with Goldfish
PDF
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
PPTX
Jjug night seminar201208_lt_cxxからjvm起動
 
PDF
JavaOne 2016 Java SE Feedback #jjug #j1jp
JDKツール使ってますか
jcmd をさわってみよう
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
Introduction to JIT Compiler in JVM
OpenJDK HotSpot C1Compiler Overview
Adaptive optimization of JIT compiler
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
20130819 jjugnslt
Javaトラブルに備えよう #jjug_ccc #ccc_h2
HeapStats: Introduction and Technical Preview
Android デバッグ小ネタ
 
Debug Hacks at Security and Programming camp 2011
Programming camp 2010 debug hacks
関ジャバ JavaOne Tokyo 2012報告会
Android Hacks - Hack40
JavaOne 2015 JDK Update (Jigsaw) #j1jp
Let's play with Goldfish
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
Jjug night seminar201208_lt_cxxからjvm起動
 
JavaOne 2016 Java SE Feedback #jjug #j1jp

More from Yasumasa Suenaga

PDF
JDK付属ツールにパッチを出しまくったワケ
PPTX
Panamaを先取り!? JVMCIでJITと遊ぶ
PPTX
HotSpotコトハジメ
PPTX
Heap statsfx analyzer
PPTX
HeapStatsのデモ (Java The Night)
PPTX
Serviceability Toolsの裏側
PPTX
もしも… Javaでヘテロジニアスコアが使えたら…
JDK付属ツールにパッチを出しまくったワケ
Panamaを先取り!? JVMCIでJITと遊ぶ
HotSpotコトハジメ
Heap statsfx analyzer
HeapStatsのデモ (Java The Night)
Serviceability Toolsの裏側
もしも… Javaでヘテロジニアスコアが使えたら…

Java 9で進化する診断ツール


[8]ページ先頭

©2009-2026 Movatter.jp