heapstats @ seasar conference 2015 lt
TRANSCRIPT
HeapStats: JVM レイヤからみつめる OSS 障害
解析支援ツール
KUBOTA Yuji @sugarlife
Copyright©2015 NTT corp. All Rights Reserved.
Seasar Conference 2015 LT
Copyright©2015 NTT corp. All Rights Reserved. 2
目的
OpenJDK (Java) の トラブル解決チーム
↓ ノウハウを OSS 化
Copyright©2015 NTT corp. All Rights Reserved. 3
どんな OSS ?
Copyright©2015 NTT corp. All Rights Reserved. 4
襲いかかるトラブル
Copyright©2015 NTT corp. All Rights Reserved. 5
Caused by: java.sql.SQLException: プロトコル違反です。 at xxx.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at xxx.jdbc.driver.Statement.executeForDescribe(Statement.java:804) at xxx.jdbc.driver. Statement.doExecuteWithTimeout(Statement.java:1154) at xxx.jdbc.driver.Statement.executeQuery(Statement.java:1313) at com.xxx.query.QueryDataSet.<init>(QueryDataSet.java:80) at org.xxx.database.util.BaseSQL.executeQuery(BaseSQL.java:930) ... 26 more
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)
よくある困ったパターン
6
• ログがない • 手作業ミスで(ログが)消し飛んだ • サービス環境で重い処理(≒ログ
収集・解析) が禁止されている • 個人情報関係で重要ログが来ない
Copyright©2015 NTT corp. All Rights Reserved.
いいから
7
• ログがない • 手作業ミスで(ログが)消し飛んだ • サービス環境で重い処理(≒ログ
収集・解析) が禁止されている • 個人情報関係で重要ログが来ない
Copyright©2015 NTT corp. All Rights Reserved.
ログを取る
作った
Copyright©2015 NTT corp. All Rights Reserved. 8
ServerApplication
Agent Local Machine
AnalyzerJVM に
アタッチ
別環境で解析
Agent
Copyright©2015 NTT corp. All Rights Reserved.
ServerApplication
Agent
JVM にアタッチ
Local Machine
Analyzer
別環境で解析
Agent
Copyright©2015 NTT corp. All Rights Reserved.
ServerApplication
Agent
JVM にアタッチ
Local Machine
Analyzer
別環境で解析
アセンブラ/C++製 Agent
• インストール rpm -ivh heapstats*rpm
• 実行 java -agentlib:heapstats \ <Your Application>
• 常時収集+故障時は詳細に • 動作中でもオンオフ可能 • 低オーバーヘッド
282.68 269.92
0 50
100 150 200 250 300
Without HeapStats With HeapStats
(ops/m)SPECjvm2008 Composite Result
• ベンチマークツール: SPECjvm2008 1.01• マシン: DELL PowerEdge R810(Xeon X7542、メモリ32GB)• OS: Red Hat Enterprise Linux Server release 6.3 x86_64• Java: java-1.7.0-openjdk-1.7.0.25-2.3.10.4.el6_4.x86_64• java起動オプション: -Xms4500m -Xmx4500m -XX:+UseG1GC -agentpath:<エージェントライブラリ>
オーバヘッド
Copyright©2015 NTT corp. All Rights Reserved. 11
※ 測定環境
4.51%
Analyzer
Copyright©2015 NTT corp. All Rights Reserved. 12
ServerApplication
Agent Local Machine
AnalyzerJVM に
アタッチ
別環境で解析
Analyzer
Copyright©2015 NTT corp. All Rights Reserved. 13
ServerApplication
Agent Local Machine
AnalyzerJVM に
アタッチ
別環境で解析
Swing 製 GUI Viewer
• インストール JARファイルを置くだけ
• 実行 java -jar heapstats.jar • 時系列情報を一覧で表示 • CSV 出力機能もあるよ!
プロセスリソース(OS/JVM)
Copyright©2015 NTT corp. All Rights Reserved. 14
GC時間, ヒープ, メタスペース
Copyright©2015 NTT corp. All Rights Reserved. 15
クラスヒストグラム
Copyright©2015 NTT corp. All Rights Reserved. 16
[B byte[]
オブジェクト参照関係
Copyright©2015 NTT corp. All Rights Reserved. 17
[B byte[]
3rd パーティ製品なら連絡
障害発生時の詳細情報
Copyright©2015 NTT corp. All Rights Reserved. 18
Pros / Cons
Copyright©2015 NTT corp. All Rights Reserved. 19
Pros • 確実な初期行動がとれる • メモリ絡みの問題はほぼ撃墜できる • オーバーヘッドはかなり低い • 次バージョンからはスレッドの時系
列情報も取得できる
Cons • プロファイリング情報は取れない• Agent は Linux (x86/AMD64)限定
Thank You !
Copyright©2015 NTT corp. All Rights Reserved. 20
http://icedtea.classpath.org/wiki/HeapStats/jp
質問は @sugarlife か #heapstats へ!