heapstats @ seasar conference 2015 lt

Post on 15-Apr-2017

2.661 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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 へ!

top related