Recommended
ODP
PPTX
PDF
ClassLoader Leak Patterns
PDF
PDF
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
PPTX
PPTX
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
PPTX
java.lang.OutOfMemoryError #渋谷java
PDF
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
PDF
Java EE から Quarkus による開発への移行について
PDF
Apache Kuduは何がそんなに「速い」DBなのか? #dbts2017
PDF
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
PDF
PDF
Open Liberty: オープンソースになったWebSphere Liberty
PDF
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
PDF
PDF
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
PPTX
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
PDF
PPTX
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
PDF
PDF
PDF
PDF
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
PDF
PPTX
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
PDF
ブレソルでテラバイト級データのALTERを短時間で終わらせる
PDF
Head toward Java 16 (Night Seminar Edition)
PDF
Head toward Java 15 and Java 16
More Related Content
ODP
PPTX
PDF
ClassLoader Leak Patterns
PDF
PDF
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
PPTX
PPTX
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
PPTX
java.lang.OutOfMemoryError #渋谷java
What's hot
PDF
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
PDF
Java EE から Quarkus による開発への移行について
PDF
Apache Kuduは何がそんなに「速い」DBなのか? #dbts2017
PDF
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
PDF
PDF
Open Liberty: オープンソースになったWebSphere Liberty
PDF
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
PDF
PDF
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
PPTX
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
PDF
PPTX
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
PDF
PDF
PDF
PDF
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
PDF
PPTX
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
PDF
ブレソルでテラバイト級データのALTERを短時間で終わらせる
More from Yuji Kubota
PDF
Head toward Java 16 (Night Seminar Edition)
PDF
Head toward Java 15 and Java 16
PDF
Head toward Java 14 and Java 15 #LINE_DM
PDF
Head toward Java 14 and Java 15
PDF
PDF
Head toward Java 13 and Java 14 #jjug
PDF
Catch up Java 12 and Java 13
PDF
Migration Guide from Java 8 to Java 11 #jjug
PDF
Introduction to Java 11: Support and JVM Features #jjug
PDF
PPTX
PPTX
PPTX
Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO...
PDF
PDF
PDF
JavaOne 2016 Java SE Feedback #jjug #j1jp
PDF
OpenJDK コミュニティに参加してみよう #jjug
PDF
JavaOne 2015 JDK Update (Jigsaw) #j1jp
PDF
HeapStats @ Seasar Conference 2015 LT
PDF
JDK9 新機能 (日本語&ショートバージョン) #jjug
OpenJDK トラブルシューティング #javacasual 1. 2. @sugarlife
• 某グループで OpenJDK サポート
– コアダンプ等の JVM 障害解析、(レ
アケースな) GC チューニングとか
– たまにパッチ書いて闇に消投稿
• 解析支援ツール HeapStats 開発
– 低オーバーヘッド命
– あっちこっちで元気に稼働中 :)
3. 4. 5. 6. 7. 8. 9. 10. 11. ケース1. クラッシュ
• 必要なログ
– コアダンプ (core.<pid>)
• ulimit –c unlimited で吐けるようにする
– エラーレポート(hs_err_pid<pid>.log)
• -XX:ErrorFile=/path/to/hs_err_pid%p.log
• カジュアルトラシュー
– レポートの Stack: 項目のトレースを読む
– 祈りながら JDK Bug System で検索
– 2-3 割ぐらいは当たる (※個人的な体感)
– 不発時はコアダンプと一緒にサポートへ
11
12. ケース2. メモリ不足
12
Exception in thread "TP-Processor9" java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3221)
at java.lang.String.<init>(String.java:233)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at java.lang.Thread.run(Thread.java:619)
java.lang.OutOfMemoryError: <message>
message: 10 種類以上ある
http://www.slideshare.net/YujiKubota/javalangoutofmemoryerror-java
13. ケース2. メモリ不足
• 必要なログ (パターン1)
– ヒープダンプ
• jmap –dump:format=b,file=/path/to/file <pid>
– <pid> を /path/to/bin/java <core> にするとコアダ
ンプからも取れる
• OOME 時に自動収集 (ヒープダンプとコア)
– -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/path/to/
-XX:OnOutOfMemoryError=`/bin/kill –ABRT %p`
• カジュアルトラシュー
– ヒープダンプを Eclipse Memory Analyzer に
放り込んで被疑オブジェクトを絞り込む
13
14. ケース2. メモリ不足
• 必要なログ (パターン1)
– ヒープダンプ
• jmap –dump:format=b,file=/path/to/file <pid>
– <pid> を /path/to/bin/java <core> にするとコアダ
ンプからも取れる
• OOME 時に自動収集 (ヒープダンプとコア)
– -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/path/to/
-XX:OnOutOfMemoryError=`/bin/kill –ABRT %p`
• カジュアルトラシュー
– ヒープダンプを Eclipse Memory Analyzer に
放り込んで被疑オブジェクトを絞り込む
14
15. 脇道
• Java Agent という機能がある
– バイトコードを動的に操作可能な、プロ
ファイリング/デバッグのテクニック
• JVM TI という JVM のインターフェース
– JVM レベルで操作・把握可能
– コールバックを任意に設定可能
– プロファイラツールにはこれを利用した実
装もある
– ヒープにいるオブジェクト状況を継続的に
把握可能なツールも作れるのでは???
15
16. 作れた(ケース2. メモリ不足)
• 必要なログ (パターン2)
– HeapStats
• -agentlib:heapstats
– rpm インストールが必要
» wget http://goo.gl/AfgA2x
» rpm –ivh heapstats_agent-*.x86_64rpm
– heapstats_snapshot.dat を回収
• カジュアルトラシュー
– HeapStats Analyzer に放り込む
16
http://icedtea.classpath.org/wiki/HeapStats
17. 18. 19. ケース3. GC 長時間化
19
1085.695: [CMS-concurrent-sweep-start]
1086.736: [GC1086.736: [ParNew (promotion failed): 911243K-
>907358K(943744K), 0.1784670 secs] 3833880K->3894624K(4810368K),
0.2084860 secs] [Times: user=0.26 sys=0.00, real=0.20 secs]
GC locker: Trying a full collection because scavenge failed
1087.214: [Full GC1087.215: [CMS1103.749: [CMS-concurrent-sweep:
13.564/13.754 secs] [Times: user=15.84 sys=0.25, real=13.75 secs]
(concurrent mode failure): 2987266K->358385K(3866624K), 16.8898790 secs]
3894624K->358385K(4810368K), [CMS Perm : 129322K-
>129315K(262144K)], 20.8900340 secs] [Times: user=20.84 sys=0.00,
real=20.89 secs]
20. ケース3. GC 長時間化
• 必要なログ
– GCログ
• -Xloggc:/path/to/gc_%t_pid%p.log
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
• カジュアルトラシュー
– 基本戦略は GC ログを読んで時間が懸って
るフェーズやエラーに対して処置する
– 15分じゃ語り足りないので資料
• CMS: http://goo.gl/9WyL33 (JJUG CCC 2014 Fall)
• G1GC: JJUG CCC 2015 Fall 発表予定 20
21. ケース3. GC 長時間化
• 必要なログ
– GCログ
• -Xloggc:/path/to/gc_%t_pid%p.log
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
• カジュアルトラシュー
– 基本戦略は GC ログを読んで時間が懸って
るフェーズやエラーに対して処置する
– 15分じゃ語り足りないので資料
• CMS: http://goo.gl/9WyL33 (JJUG CCC 2014 Fall)
• G1GC: JJUG CCC 2015 Fall 発表予定 21
22. 23.