SlideShare a Scribd company logo
Submit Search
Upload
Unified JVM Logging
Report
Share
Yuji Kubota
Engineer at NTT
Follow
•
17 likes
•
12,909 views
1
of
77
Unified JVM Logging
•
17 likes
•
12,909 views
Report
Share
Download Now
Download to read offline
Technology
This slide introduces about Unified JVM Logging.
Read more
Yuji Kubota
Engineer at NTT
Follow
Recommended
分散システムについて語らせてくれ by
分散システムについて語らせてくれ
Kumazaki Hiroki
119.5K views
•
45 slides
実運用して分かったRabbit MQの良いところ・気をつけること #jjug by
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
24.3K views
•
49 slides
本当は恐ろしい分散システムの話 by
本当は恐ろしい分散システムの話
Kumazaki Hiroki
686.3K views
•
70 slides
JVMのGCアルゴリズムとチューニング by
JVMのGCアルゴリズムとチューニング
佑哉 廣岡
21.7K views
•
96 slides
トランザクションをSerializableにする4つの方法 by
トランザクションをSerializableにする4つの方法
Kumazaki Hiroki
21.9K views
•
47 slides
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料) by
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
NTT DATA Technology & Innovation
802 views
•
64 slides
More Related Content
What's hot
Mavenの真実とウソ by
Mavenの真実とウソ
Yoshitaka Kawashima
13K views
•
67 slides
Java でつくる低レイテンシ実装の技巧 by
Java でつくる低レイテンシ実装の技巧
Ryosuke Yamazaki
10.8K views
•
98 slides
例外設計における大罪 by
例外設計における大罪
Takuto Wada
68.6K views
•
37 slides
コンテナにおけるパフォーマンス調査でハマった話 by
コンテナにおけるパフォーマンス調査でハマった話
Yuta Shimada
2.2K views
•
25 slides
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O... by
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
2.2K views
•
64 slides
Metaspace by
Metaspace
Yasumasa Suenaga
24.9K views
•
56 slides
What's hot
(20)
Mavenの真実とウソ by Yoshitaka Kawashima
Mavenの真実とウソ
Yoshitaka Kawashima
•
13K views
Java でつくる低レイテンシ実装の技巧 by Ryosuke Yamazaki
Java でつくる低レイテンシ実装の技巧
Ryosuke Yamazaki
•
10.8K views
例外設計における大罪 by Takuto Wada
例外設計における大罪
Takuto Wada
•
68.6K views
コンテナにおけるパフォーマンス調査でハマった話 by Yuta Shimada
コンテナにおけるパフォーマンス調査でハマった話
Yuta Shimada
•
2.2K views
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O... by NTT DATA Technology & Innovation
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
•
2.2K views
Metaspace by Yasumasa Suenaga
Metaspace
Yasumasa Suenaga
•
24.9K views
PostgreSQL 15の新機能を徹底解説 by Masahiko Sawada
PostgreSQL 15の新機能を徹底解説
Masahiko Sawada
•
1.5K views
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料) by NTT DATA Technology & Innovation
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
NTT DATA Technology & Innovation
•
11.9K views
それはYAGNIか? それとも思考停止か? by Yoshitaka Kawashima
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
•
29.3K views
Javaはどのように動くのか~スライドでわかるJVMの仕組み by Chihiro Ito
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
•
67.2K views
そんなトランザクションマネージャで大丈夫か? by takezoe
そんなトランザクションマネージャで大丈夫か?
takezoe
•
24.6K views
containerdの概要と最近の機能 by Kohei Tokunaga
containerdの概要と最近の機能
Kohei Tokunaga
•
3K views
jcmd をさわってみよう by Tsunenaga Hanyuda
jcmd をさわってみよう
Tsunenaga Hanyuda
•
8.3K views
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料) by NTT DATA Technology & Innovation
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
NTT DATA Technology & Innovation
•
808 views
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料) by NTT DATA Technology & Innovation
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
•
2.2K views
Linux女子部 systemd徹底入門 by Etsuji Nakai
Linux女子部 systemd徹底入門
Etsuji Nakai
•
137.9K views
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ by Y Watanabe
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
•
17.1K views
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料) by NTT DATA Technology & Innovation
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
NTT DATA Technology & Innovation
•
2.6K views
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~ by NTT DATA OSS Professional Services
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
•
26K views
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 - by onozaty
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
•
3.2K views
Similar to Unified JVM Logging
HeapStats: Introduction and Technical Preview by
HeapStats: Introduction and Technical Preview
Yuji Kubota
2.7K views
•
48 slides
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」 by
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
Takakiyo Tanaka
2.3K views
•
17 slides
Prepare for Java 9 #jjug by
Prepare for Java 9 #jjug
Yuji Kubota
19.4K views
•
84 slides
ななめ45°から見たJavaOne by
ななめ45°から見たJavaOne
AdvancedTechNight
2.1K views
•
28 slides
Introduction to GraalVM and Native Image by
Introduction to GraalVM and Native Image
Koichi Sakata
936 views
•
78 slides
OpenJDK コミュニティに参加してみよう #jjug by
OpenJDK コミュニティに参加してみよう #jjug
Yuji Kubota
8.1K views
•
31 slides
Similar to Unified JVM Logging
(20)
HeapStats: Introduction and Technical Preview by Yuji Kubota
HeapStats: Introduction and Technical Preview
Yuji Kubota
•
2.7K views
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」 by Takakiyo Tanaka
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
Takakiyo Tanaka
•
2.3K views
Prepare for Java 9 #jjug by Yuji Kubota
Prepare for Java 9 #jjug
Yuji Kubota
•
19.4K views
ななめ45°から見たJavaOne by AdvancedTechNight
ななめ45°から見たJavaOne
AdvancedTechNight
•
2.1K views
Introduction to GraalVM and Native Image by Koichi Sakata
Introduction to GraalVM and Native Image
Koichi Sakata
•
936 views
OpenJDK コミュニティに参加してみよう #jjug by Yuji Kubota
OpenJDK コミュニティに参加してみよう #jjug
Yuji Kubota
•
8.1K views
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~ by Shinji Takao
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
Shinji Takao
•
416 views
Javaで1から10まで書いた話(sanitized) by Tokuhiro Matsuno
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
•
12.4K views
PlayFramework1.x基礎編 by Asami Abe
PlayFramework1.x基礎編
Asami Abe
•
1.5K views
2015 0228 OpenStack swift; GMO Internet Services by Naoto Gohko
2015 0228 OpenStack swift; GMO Internet Services
Naoto Gohko
•
3.3K views
JavaScript.Next Returns by dynamis
JavaScript.Next Returns
dynamis
•
7K views
Play jjug2012spring by Takafumi Ikeda
Play jjug2012spring
Takafumi Ikeda
•
4.7K views
ココが違うよEC2 ~オンプレミスVMとの徹底⽐比較~ by Ryuta Otaki
ココが違うよEC2 ~オンプレミスVMとの徹底⽐比較~
Ryuta Otaki
•
5.3K views
Cell/B.E. プログラミング事始め by You&I
Cell/B.E. プログラミング事始め
You&I
•
574 views
明日から試せる!ソフトウエアベースストレージ「ScaleIO」のご紹介 - OpenStack最新情報セミナー 2015年9月 by VirtualTech Japan Inc.
明日から試せる!ソフトウエアベースストレージ「ScaleIO」のご紹介 - OpenStack最新情報セミナー 2015年9月
VirtualTech Japan Inc.
•
5.1K views
OSSで作るOpenStack監視システム by satsuki fukazu
OSSで作るOpenStack監視システム
satsuki fukazu
•
2.7K views
RapidMinerのインストール【Ubuntu 14.04 LTS】 by Satoshi Kitajima
RapidMinerのインストール【Ubuntu 14.04 LTS】
Satoshi Kitajima
•
7.4K views
JBoss AS7 rev2 by nekop
JBoss AS7 rev2
nekop
•
984 views
JBoss AS7 rev3 by nekop
JBoss AS7 rev3
nekop
•
1.3K views
JavaScript.Next by dynamis
JavaScript.Next
dynamis
•
28.8K views
More from Yuji Kubota
Head toward Java 16 (Night Seminar Edition) by
Head toward Java 16 (Night Seminar Edition)
Yuji Kubota
537 views
•
32 slides
Head toward Java 15 and Java 16 by
Head toward Java 15 and Java 16
Yuji Kubota
465 views
•
46 slides
Head toward Java 14 and Java 15 #LINE_DM by
Head toward Java 14 and Java 15 #LINE_DM
Yuji Kubota
102.8K views
•
38 slides
Head toward Java 14 and Java 15 by
Head toward Java 14 and Java 15
Yuji Kubota
674 views
•
35 slides
オンライン会議と音声認識 by
オンライン会議と音声認識
Yuji Kubota
863 views
•
17 slides
Head toward Java 13 and Java 14 #jjug by
Head toward Java 13 and Java 14 #jjug
Yuji Kubota
11.6K views
•
53 slides
More from Yuji Kubota
(20)
Head toward Java 16 (Night Seminar Edition) by Yuji Kubota
Head toward Java 16 (Night Seminar Edition)
Yuji Kubota
•
537 views
Head toward Java 15 and Java 16 by Yuji Kubota
Head toward Java 15 and Java 16
Yuji Kubota
•
465 views
Head toward Java 14 and Java 15 #LINE_DM by Yuji Kubota
Head toward Java 14 and Java 15 #LINE_DM
Yuji Kubota
•
102.8K views
Head toward Java 14 and Java 15 by Yuji Kubota
Head toward Java 14 and Java 15
Yuji Kubota
•
674 views
オンライン会議と音声認識 by Yuji Kubota
オンライン会議と音声認識
Yuji Kubota
•
863 views
Head toward Java 13 and Java 14 #jjug by Yuji Kubota
Head toward Java 13 and Java 14 #jjug
Yuji Kubota
•
11.6K views
Catch up Java 12 and Java 13 by Yuji Kubota
Catch up Java 12 and Java 13
Yuji Kubota
•
9.9K views
Migration Guide from Java 8 to Java 11 #jjug by Yuji Kubota
Migration Guide from Java 8 to Java 11 #jjug
Yuji Kubota
•
13.2K views
Introduction to Java 11: Support and JVM Features #jjug by Yuji Kubota
Introduction to Java 11: Support and JVM Features #jjug
Yuji Kubota
•
18.2K views
Java 10でぼくたちの生活はどう変わるの? by Yuji Kubota
Java 10でぼくたちの生活はどう変わるの?
Yuji Kubota
•
11.3K views
Project Jigsaw #kanjava by Yuji Kubota
Project Jigsaw #kanjava
Yuji Kubota
•
3.4K views
Java 9 and Future #jjug by Yuji Kubota
Java 9 and Future #jjug
Yuji Kubota
•
5.1K views
Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO... by Yuji Kubota
Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO...
Yuji Kubota
•
661 views
jcmd #javacasual by Yuji Kubota
jcmd #javacasual
Yuji Kubota
•
16.9K views
JavaOne 2016 Java SE Feedback #jjug #j1jp by Yuji Kubota
JavaOne 2016 Java SE Feedback #jjug #j1jp
Yuji Kubota
•
5.1K views
JavaOne 2015 JDK Update (Jigsaw) #j1jp by Yuji Kubota
JavaOne 2015 JDK Update (Jigsaw) #j1jp
Yuji Kubota
•
15.9K views
OpenJDK トラブルシューティング #javacasual by Yuji Kubota
OpenJDK トラブルシューティング #javacasual
Yuji Kubota
•
6.4K views
HeapStats @ Seasar Conference 2015 LT by Yuji Kubota
HeapStats @ Seasar Conference 2015 LT
Yuji Kubota
•
3.9K views
JDK9 新機能 (日本語&ショートバージョン) #jjug by Yuji Kubota
JDK9 新機能 (日本語&ショートバージョン) #jjug
Yuji Kubota
•
26.6K views
JDK9 Features (Summary, 31/Jul/2015) #JJUG by Yuji Kubota
JDK9 Features (Summary, 31/Jul/2015) #JJUG
Yuji Kubota
•
14.2K views
Recently uploaded
光コラボは契約してはいけない by
光コラボは契約してはいけない
Takuya Matsunaga
30 views
•
17 slides
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可 by
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
Hitachi, Ltd. OSS Solution Center.
13 views
•
22 slides
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PC Cluster Consortium
29 views
•
36 slides
IPsec VPNとSSL-VPNの違い by
IPsec VPNとSSL-VPNの違い
富士通クラウドテクノロジーズ株式会社
610 views
•
8 slides
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Hitachi, Ltd. OSS Solution Center.
110 views
•
26 slides
定例会スライド_キャチs 公開用.pdf by
定例会スライド_キャチs 公開用.pdf
Keio Robotics Association
154 views
•
64 slides
Recently uploaded
(7)
光コラボは契約してはいけない by Takuya Matsunaga
光コラボは契約してはいけない
Takuya Matsunaga
•
30 views
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可 by Hitachi, Ltd. OSS Solution Center.
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
Hitachi, Ltd. OSS Solution Center.
•
13 views
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by PC Cluster Consortium
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PC Cluster Consortium
•
29 views
IPsec VPNとSSL-VPNの違い by 富士通クラウドテクノロジーズ株式会社
IPsec VPNとSSL-VPNの違い
富士通クラウドテクノロジーズ株式会社
•
610 views
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by Hitachi, Ltd. OSS Solution Center.
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Hitachi, Ltd. OSS Solution Center.
•
110 views
定例会スライド_キャチs 公開用.pdf by Keio Robotics Association
定例会スライド_キャチs 公開用.pdf
Keio Robotics Association
•
154 views
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by PC Cluster Consortium
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PC Cluster Consortium
•
68 views
Unified JVM Logging
1.
Unified JVM Logging! KUBOTA
Yuji @sugarlife+ NTT OSSセンタ+ Copyright©2017 NTT corp. All Rights Reserved.+ 2017/05+
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)+
4.
「楽してJVMを学びたい」シリーズを喋ってる人 Copyright©2017 NTT corp.
All Rights Reserved.+ 4! KUBOTA Yuji (@sugarlife) Java Technical Support Engineer @NTT OSS センタ OpenJDK author, IcedTea committer Speaker (JavaOne, JJUG, etc…) Who I am!
5.
Agenda! • そもそもなぜ変わるのか • 設定方法を把握する – 概要 – ログの設定方法 – Java 8 設定からの移行 • お役立ち(?)情報 設定の仕方を覚えて帰りましょう Copyright©2017
NTT corp. All Rights Reserved.+ 5!
6.
Next! • そもそもなぜ変わるのか • 設定方法を把握する – 概要 – ログの設定方法 – Java 8 設定からの移行 • お役立ち(?)情報 JDK
9 から変わる理由 Copyright©2017 NTT corp. All Rights Reserved.+ 6!
7.
歴史的経緯! • 元々は標準出力 • ファイルにも出力に対応 • タイムスタンプやより詳細な内 容を出力するように改修 • GCログ、JITコンパイルログな ど出力される内容(種類)も増加 バージョンを重ねるごとにアドホックに改善 Copyright©2017 NTT corp.
All Rights Reserved.+ 7!
8.
問題点! • 出力内容に一貫性がない – コンポーネントごとにまちまち – メッセージも半固定で柔軟に実装 できない (OpenJDK 開発での問題) • 設定が多種多様過ぎる • レベルやカテゴリ制御がない アドホック過ぎて一貫性が失われた Copyright©2017
NTT corp. All Rights Reserved.+ 8!
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)+
11.
問題点! • 出力内容に一貫性がない – コンポーネントごとにまちまち • 設定が多種多様過ぎる – 実行後は変更ができない • レベルやカテゴリ制御がない 多種多様性が便利なのはその通り Copyright©2017 NTT corp.
All Rights Reserved.+ 11!
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の設定+
14.
問題点! • 出力内容に一貫性がない – コンポーネントごとにまちまち • 設定が多種多様過ぎる – 実行後は変更ができない • レベルやカテゴリ管理がない – デバッグレベルはあるが別バイナリ デバッグ用バイナリは自分でビルドが必要 Copyright©2017 NTT corp.
All Rights Reserved.+ 14!
15.
カテゴリ管理がないと…! – 正確な理解には実装の確認が必要 – 複数種別のログが混ざると経験に 基づいて読み解く必要がある デバッグログはパーサーを書くのも大変 Copyright©2017 NTT corp.
All Rights Reserved.+ 15! [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] JDK7uのログ+ それぞれ何の値か判断可能か?+
16.
問題点! • 出力内容に一貫性がない – コンポーネントごとにまちまち • 設定が多種多様過ぎる – 実行後は変更ができない • レベルやカテゴリ管理がない – デバッグレベルはあるが別バイナリ アドホックに追加するのはもうやめよう Copyright©2017 NTT corp.
All Rights Reserved.+ 16!
17.
Unified JVM Logging! • フレームワークを導入して一貫 性を保つ
(JEP 158) – カテゴリ分け、ログレベルを導入 – 統一された実装・設定・出力 • 特に GC ログ周りを大幅に手入 れ (JEP 271) JEP 271 は Unified GC Logging Copyright©2017 NTT corp. All Rights Reserved.+ 17!
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! ドキュメントもほぼない
20.
Next! • そもそもなぜ変わるのか • 設定方法を把握する – 概要 – ログの設定方法 – Java 8 設定からの移行 • お役立ち(?)情報 統一された設定とやらを見せてもらおうか! Copyright©2017
NTT corp. All Rights Reserved.+ 20!
21.
設定方法! • シンプルな設定 – 全て -Xlog で設定する 「ログはこれ」と言えるのは大きい Copyright©2017
NTT corp. All Rights Reserved.+ 21! -Xlog [:[what] [:[output] [:[decorators] [:output-options]]]]
22.
基本的な設定方法! • -Xlog 全てのinfoログを標準出力 • -Xlog:help ヘルプメッセージ • -Xlog:disable
ログ無効化+ デフォルトは全 warning ログが標準出力される Copyright©2017 NTT corp. All Rights Reserved.+ 22! -Xlogを設定してない場合+
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). 起動経過時間、 ログレベル、タグ (デフォルト)+ タグ≒ログのカテゴリ+ ログ内容+カテゴリに沿ったログ内容+
26.
Quiz #2! • java -Xlog:disable -version
を実行 した場合、バージョン表示は出る? デフォルト(-Xlogの設定無し)は warning が有効 Copyright©2017 NTT corp. All Rights Reserved.+ 26! ログ無効+
27.
Quiz #2! • java -Xlog:disable -version
を実行 した場合、バージョン表示は出る? • 出ます。バージョン関係はJVMログ とは別扱いのエラーメッセージです+ • ログではなく java コマンドの応答だ と考えると解りやすい 前スライドで decorator が出てないのが解る Copyright©2017 NTT corp. All Rights Reserved.+ 27! ログ無効+
28.
Next! • そもそもなぜ変わるのか • 設定方法を把握する – 概要 – ログの設定方法 – Java 8 設定からの移行 • お役立ち(?)情報 設定方法のポリシーを学びましょう Copyright©2017
NTT corp. All Rights Reserved.+ 28!
29.
Syntax! – what:出力内容をタグとレベルで選択+ – output:出力先の指定+ – decorators:デコレータの指定+ – output-options:ログローテート設定 全て省略できる(未指定時用の値が設定される) Copyright©2017 NTT corp.
All Rights Reserved.+ 29! -Xlog[:[what][:[output][:[decorators][:output-options]]]] -Xlog[:[what][:[output][:[decorators][:output-options]]]]
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 は見分けにくい+ ※本来は一行表示+
34.
decorator! • お勧めの最低設定 – (utc)time,level,tags – 短命なプロセスや詳細解析の場合は uptime(millis|nanos)もあると便利 ローカル時刻か UTC かはお好み Copyright©2017
NTT corp. All Rights Reserved.+ 34! % java -Xlog:::t,utc,l,tg [2017-05-12T07:38:12.016-0700] [2017-05-12T14:38:12.016+0000] [info][os,thread ] Thread finished (tid: 115144, pthread id: 139879454586624). -Xlog[:[what][:[output][:[decorators][:output-options]]]] ※本来は一行表示+
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]]]]
36.
what! • 出力内容をタグとレベルで指定 – Tag=Level • -Xlog:all=info • -Xlog:gc*=debug • Level (未指定の場合:info) trace は
hotspot 内部実装を追ってる人向け Copyright©2017 NTT corp. All Rights Reserved.+ 36! off, trace, debug, info, warning, error -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]]]]
38.
Tags! • 大分類から小分類まで混在して おり、全部を覚える必要はない+ • 重要なタグの例+ – GC
関連:gc – エラー関連:exceptions – スレッド関連:os, thread – 動作解析関連:class, vmoperation 実質二つのログしかないタグもある Copyright©2017 NTT corp. All Rights Reserved.+ 38! -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+
52.
具体的な使い道の例! -Xlog:gc • GC結果の概要だけ確認 -Xlog:class+load=debug,class+unload=debug • クラスローディングとアンローディングの確認 -Xlog:gc*=debug,vmoperation=debug •
GC挙動全体の詳細とSTWに関わる処理の確認 -Xlog:gc*=debug,gc+humongous=off • 詳細確認したいがhumongousリージョン関連GCの場合、 本リージョンのメモリマップ情報が大量に出力されるの でオフにする (,で付け足して他もオフにできる) Copyright©2017 NTT corp. All Rights Reserved.+ 52! -Xlog[:[what][:[output][:[decorators][:output-options]]]] フラグを調べるより直感的 TraceClassLoaderDataは class+loader+data=debug+
53.
Quiz #3! • java -Xlog:disable –Xlog:gc*
とした 場合はどうなるか? 最初のみ有効 or 最後のみ有効 or それ以外? Copyright©2017 NTT corp. All Rights Reserved.+ 53!
54.
Quiz #3! • java -Xlog:disable –Xlog:gc*
とした 場合はどうなるか? • 前から順番に全て評価する。全部無 効にした後に、GC関係のinfoログを 有効にするので –Xlog:gc* と同義+ • 順番に評価されるので、最後の設定 のみ有効になるわけではない 別々のファイルに出力したい時などで使えます Copyright©2017 NTT corp. All Rights Reserved.+ 54!
55.
Next! • そもそもなぜ変わるのか • 設定方法を把握する – 概要 – ログの設定方法 – Java 8 設定からの移行 • お役立ち(?)情報 これまでの設定からこれからの設定へ Copyright©2017
NTT corp. All Rights Reserved.+ 55!
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 ※ログサイズ等は適当です(普通は足りない)+
57.
Next! • そもそもなぜ変わるのか • 設定方法を把握する – 概要 – ログの設定方法 – Java 8 設定からの移行+ • お役立ち(?)情報 今回の変更により便利になったところなど Copyright©2017
NTT corp. All Rights Reserved.+ 57!
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 を指定 すると上書き可能+
59.
強制ログローテート! • jcmd で手動ローテートが可能 – ファイル出力かつfilecount=1以上 が条件 – filesize=0 にして
cron 等で実行す れば定期的なローテートが可能 filecount=0 だと実行しても同じファイルに追記 Copyright©2017 NTT corp. All Rights Reserved.+ 59! $ jcmd <pid> VM.log rotate <pid>: Command executed successfully
60.
ログローテート! • -Xlog::test.log::filecount=n 先ずは指定したファイルに出力 Copyright©2017 NTT
corp. All Rights Reserved.+ 60! test.log+
61.
ログローテート! • -Xlog::test.log::filecount=n ローテート 1
回目 Copyright©2017 NTT corp. All Rights Reserved.+ 61! test.log+ test.log.0+ ←移動したら空ファイル+
62.
ログローテート! • -Xlog::test.log::filecount=n ローテート 2
回目 Copyright©2017 NTT corp. All Rights Reserved.+ 62! test.log+ test.log.0+ test.log.1+
63.
ログローテート! • -Xlog::test.log::filecount=n ローテート n
回目 Copyright©2017 NTT corp. All Rights Reserved.+ 63! test.log+ test.log.0+ test.log.1+ test.log.(n-1)+…+
64.
ログローテート! • -Xlog::test.log::filecount=n ローテート n+1
回目 Copyright©2017 NTT corp. All Rights Reserved.+ 64! test.log+ test.log.0+ test.log.1+ test.log.(n-1)+…+test.log.0 上書き+
65.
ログローテート! • -Xlog::test.log::filecount=n filecount は残したい世代分設定しましょう Copyright©2017
NTT corp. All Rights Reserved.+ 65! test.log+ test.log.0+ test.log.1+ test.log.(n-1)+…+test.log.0 上書き+ test.log.1 上書き+ test.log.(n-1) 上書き+
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 処理前の 使用量+ 処理後の 使用量+ 容量+
71.
ヒープ状況の確認(G1)! • 各領域のヒープ状況 – GC 方式ごとに異なる G1 GC
の各領域毎のメモリ状況 Copyright©2017 NTT corp. All Rights Reserved.+ 71! E+ O S+ O O S+ S+ E+ H O E+ O O E+ S+ O O O O H+ O E+ E+ O 水:Eden 橙:Survivor 緑:Old 紫:Humongous 藍:未使用+
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
75.
ULViewer! • 次世代 GC Viewer – https://github.com/YaSuenag/ulviewer タグでフィルタリング可、GC
以外も可視化 Copyright©2017 NTT corp. All Rights Reserved.+ 75!
76.
まとめ! • Java 9 からログが統一される 設定や出力が一新されて管理が楽に -Xlog:何を:どこに:装飾:ローテート • どの様に設定していくべきか? -Xlog:all=debug
から始めてフィル タリングしていくのがお勧め まずはログを読むのを楽しみましょう! Copyright©2017 NTT corp. All Rights Reserved.+ 76!
77.
Q! Copyright©2017 NTT corp.
All Rights Reserved.+ 77! おつかれさまでした