SlideShare a Scribd company logo
1 of 26
Java トラブル解析支援ツール
HeapStats のご紹介
2014.06.14
ShinyaTAKEBAYASHI
Open Source Conference 2014 Hokkaido
自己紹介
 竹林 信哉(+ShinyaTAKEBAYASHI)
 昨晩ガラナを飲んで眠れなくなったひと
 仕事
 社内の Java 駆け込み寺
 トラブル解析支援,技術支援
 Java 仮想マシン,Linux カーネル,
ネットワークパケットなどの解析
 趣味
 モノづくり(ソフトウェア(C/C++/x86ASM)電子工作)
 ロードバイク
 その他
 Linux よりWindows,Windows より BSD
Open Source Conference 2014 Hokkaido
こんなことありませんか?
商用機でトラブルが
発生しまして・・・
!!
いつまでの解決を・・
はい,なるはやで.
Open Source Conference 2014 Hokkaido
こんなことありませんか?
はいどうぞ
△△と××のログを
ください
これじゃないです
はいどうぞ
時刻違いますが?
いや実はトラブったときの
ログが残っていなくて.
再現します?
環境貸してもらえます?
再現するかわかりません.
環境もお客様と調整しないと.
このパラメタ仕込んでください.
再現したらログを送ってください.
でも時間かかる性能も
下がるでは困ります.
今すぐだと,不完全な情報から
推測した結果しか出せません.
あ,でもお客様に説明する
資料つくらないといけないんで
手伝ってください!
ダメです.
ちゃんとした解析結果ください!
Open Source Conference 2014 Hokkaido
HeapStats とは
 オープンソースの Java 故障解析支援ツール
 Out Of Memory Error でアプリケーションが落ちた!
 デッドロックを起こしてアプリケーションが止まった!
 想像以上にメモリを消費している・・・.
こんな時に
・システム全体の状態
・Java アプリケーションのメモリ使用状況
・メモリ使用量の推移
自動的に情報を収集し,
解析を支援するツール
Open Source Conference 2014 Hokkaido
利用シーン
Open Source Conference 2014 Hokkaido
利用シーン
開発中
• 長期安定試験の前にメモリリークを発見できる
• Java のヒープ領域サイズ,GC のチューニングや,
アプリケーションのオブジェクトライフサイクルの確認できる
商用運転中
• 定期的に情報を収集し,不穏な動きがないかをチェックできる
故障発生時
• AP 停止時に監視ツールに通知できる
• 解析に必要な情報を自動収集できる
• システムの復旧を最優先に実施できる
Open Source Conference 2014 Hokkaido
故障発生から解決までの時間を短縮します
ユーザ申告など
により故障発生
を感知
サーバ再起動な
どでとりあえず
復旧
情報収集のため
検証環境で再現
原因解析実施 AP 修正など
HeapStats 未導入
1. 故障発生 2. 復旧
3. 解析
4. 解決
監視センタにて
即座に故障発生
を感知
解析に必要な情報
を自動的に収集
サーバを復旧し
サービス再開
収集された情報
をもとに解析に
も並行して着手
AP 修正など
HeapStats 導入後
本格対処完了までの時間を
短縮できる!
自動で情報収集
1. 故障発生 2. 復旧 3. 再現検証 4. 解析 5. 解決
Open Source Conference 2014 Hokkaido
HeapStats を使うと,こうなります
はいどうぞ
○○をください
××を実施して,とりあえず
業務を回復してください.
OK!
原因は AP の不具合の可能性大.
クラス△△のあたりの実装を
見なおしてみてください.
メモリ使いすぎです.
おおっ,そうでしたか.
見なおしてみます!
作り込みがイケてませんでした.
直してから再発していません!
Open Source Conference 2014 Hokkaido
もっと HeapStats
Open Source Conference 2014 Hokkaido
HeapStats の構成
 Agent と Analyzer で構成
① Agent・・・・ サーバにインストールし,各種情報を収集する.
② Analyzer ・・Agent が収集した情報を可視化する.
Agent Analyzer
Log / Snapshot
Storage or Network
① Agent で収集して ② Analyzer で解析する
Open Source Conference 2014 Hokkaido
HeapStats Agent
 サーバに常駐し,情報を収集しアラートを出力する
 ヒープ統計情報,デッドロック情報,CPU/メモリ使用率を
統合的に収集
 Out Of Memory Error,デッドロック発生時,Java ヒープメモリが閾
値を超過した際に,SNMPTrap を送出する機能もある
Application
JBoss /Tomcat / etc..
OpenJDK / Oracle JDK
Linux (x86 / x86_64)
Application
Application
Server
JavaVM
OS
JavaVM に常駐
・定期的な情報収集
・故障発生時の通知
SNMP TRAP
Open Source Conference 2014 Hokkaido
HeapStatsAgent
収集する情報(通常時)
Java ヒープ関連
クラスヒストグラム
クラス名
インスタンス数
総サイズ
参照関係
GC
発生日時
発生原因
処理時間
世代別の Java ヒープ使用量
Permanent/Metaspace 使用量
クラスローダ情報
Java ランタイム情報
ネイティブメモリ使用量(RSS/VSZ)
ライブスレッド数
モニタ(ロック)競合回数
完全停止(STW)時間
CPU 使用率
Java プロセス内部での内訳
システム全体での使用率
Open Source Conference 2014 Hokkaido
HeapStatsAgent
収集する情報(異常時)
一般的な情報
故障発生日時
故障内容
スレッドダンプ
各種バージョン
Java
JVM
OS カーネル
OS ディストリビューション
libc
Java 関連情報
JVM 名
クラスパス
Java ホームディレクトリ
JVM 起動引数(フラグ等)
実行中の Java プログラム名と引数
実行時間(故障発生までの間隔)
プロセス情報
プロセスステータス (proc/[PID]/status)
ネイティブメモリ情報 (/proc/[PID]/smaps)
リソース制限 (/proc/[PID]/limits)
ソケットエンドポイント (netstat 相当)
ログ類
syslog
標準出力/標準エラー出力
GC ログ
Open Source Conference 2014 Hokkaido
HeapStatsAgent
性能への影響は・・・?
測定環境:
DELL PowerEdge R810
Red Hat Enterprise Linux 6.3 x86_64
java-1.7.0-openjdk-1.7.0.51-2.4.4.1.el6_5
JVM オプション
-Xmn768m -Xms4500m -Xmx4500m -XX:MaxTenuringThreshold=15
-XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=80 -XX:+CMSClassUnloadingEnabled
 HeapStats の導入による性能への影響は,ほとんどない
259.19 255.38
0
50
100
150
200
250
300
HeapStats なし 1.1.1
SPECjvm2008 Composite Result
Open Source Conference 2014 Hokkaido
HeapStats Analyzer
 Agent が蓄積したログなどを解析するツール
 メモリの情報をグラフィカルに表示・分析
ヒープ使用量の経過 任意の時点でのクラスごとのメモリ使用量
参照オブジェクトツリー(1.1 以降)
Open Source Conference 2014 Hokkaido
動作環境
Agent Analyzer
CPU アーキテクチャ x86 または x86_64※1 不問
OS
Linux※2 不問
【動作確認済み】
Red Hat Enterprise Linux 6
CentOS 6
Fedora 20
【動作確認済み】
左記に加えて
Windows 7/8/8.1
Windows Server 2008/2012
OS X 10.9 Mavericks
Java バージョン
OpenJDK 6+
Oracle Java 6+
OpenJDK 7+
Oracle Java 7+
GUI 不要 必要
※1 SSE4 または AVX に対応している CPU では,より低負荷での動作が可能
※2 Red Hat Enterprise Linux,CentOS,Fedora 用 RPM パッケージ配布中
商用機とは別の場所・環境で,解析作業を実施できる!
Open Source Conference 2014 Hokkaido
インストール方法
 ダウンロード!
 http://icedtea.classpath.org/wiki/HeapStats/jp
 Agent のインストールは,とても簡単
 Red Hat Enterprise Linux / Fedora の場合は,RPM ファイルで
インストール
 AP サーバ等の起動スクリプトの,Java 起動オプションに
「-agentlib:heapstats」を追加する
 Analyzer は,ほぼゼロインストール
 zip ファイルを展開,外部ライブラリ※を入れて jar ファイルを
起動する
※ 別途 JGraphX,JFreeChart,JCommon が必要
% java -agentlib:heapstats Test
% java -jar heapstats.jar
Open Source Conference 2014 Hokkaido
Demonstration
Open Source Conference 2014 Hokkaido
まとめ
 HeapStats は,Java アプリケーションの
メモリ問題に起因する故障解析を支援するツールです.
 解析に必要な情報を常にもれなく取得しているため,
故障の再現検証が不要になる可能性を高めます.
 性能への影響は,ほぼありません.
 故障発生時の現場担当者の負担を軽減できます.
 事実に基づいた正確な分析を,迅速に実施できます.
 使用にあたり費用は発生しません.
Open Source Conference 2014 Hokkaido
ユーザ申告など
により故障発生
を感知
サーバ再起動な
どでとりあえず
復旧
情報収集のため
検証環境で再現
原因解析実施 AP 修正など
HeapStats 未導入
1. 故障発生 2. 復旧
3. 解析
4. 解決
監視センタにて
即座に故障発生
を感知
解析に必要な情報
を自動的に収集
サーバを復旧し
サービス再開
収集された情報
をもとに解析に
も並行して着手
AP 修正など
HeapStats 導入後
本格対処完了までの時間を
短縮できる!
自動で情報収集
1. 故障発生 2. 復旧 3. 再現検証 4. 解析 5. 解決
こんなに良いことが
Open Source Conference 2014 Hokkaido
こんなに良いことが(Cont’d)
はいどうぞ
○○をください
××を実施して,とりあえず
業務を回復してください.
OK!
原因は AP の不具合の可能性大.
クラス△△のあたりの実装を
見なおしてみてください.
メモリ使いすぎです.
おおっ,そうでしたか.
見なおしてみます!
作り込みがイケてませんでした.
直してから再発していません!
Open Source Conference 2014 Hokkaido
是非お試しください!
Open Source Conference 2014 Hokkaido
HeapStats FX Analyzer
 Analyzer Java FX 版を開発中
Open Source Conference 2014 Hokkaido
リンク集
 HeapStats Wiki
 http://icedtea.classpath.org/wiki/HeapStats/jp
 HeapStats Mailing List
 http://icedtea.classpath.org/mailman/listinfo/heapstats
 HeapStats FX Analyzer
 https://github.com/YaSuenag/HeapStatsFXAnalyzer
Open Source Conference 2014 Hokkaido
ご清聴ありがとうございました
Oracle と Java は,Oracle Corporation 及びその子会社,関連会社の米国及びその他の国における登録商標です.
その他文中の社名,商品名等は各社の商標または登録商標である場合があります.

More Related Content

What's hot

HeapStatsのデモ (Java The Night)
HeapStatsのデモ (Java The Night)HeapStatsのデモ (Java The Night)
HeapStatsのデモ (Java The Night)
Yasumasa Suenaga
 

What's hot (20)

Java9新機能概要
Java9新機能概要Java9新機能概要
Java9新機能概要
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
HeapStatsのデモ (Java The Night)
HeapStatsのデモ (Java The Night)HeapStatsのデモ (Java The Night)
HeapStatsのデモ (Java The Night)
 
jcmd をさわってみよう
jcmd をさわってみようjcmd をさわってみよう
jcmd をさわってみよう
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
Panamaを先取り!? JVMCIでJITと遊ぶ
Panamaを先取り!? JVMCIでJITと遊ぶPanamaを先取り!? JVMCIでJITと遊ぶ
Panamaを先取り!? JVMCIでJITと遊ぶ
 
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方
 
OpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasualOpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasual
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
 
楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug
 
CPUから見たG1GC
CPUから見たG1GCCPUから見たG1GC
CPUから見たG1GC
 
JDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjugJDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjug
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
 
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpJavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jp
 
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_cccConcurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
 
Introduction to JShell #JavaDayTokyo #jdt_jshell
Introduction to JShell #JavaDayTokyo #jdt_jshellIntroduction to JShell #JavaDayTokyo #jdt_jshell
Introduction to JShell #JavaDayTokyo #jdt_jshell
 
HeapStats(Java解析ツールバトル)
HeapStats(Java解析ツールバトル)HeapStats(Java解析ツールバトル)
HeapStats(Java解析ツールバトル)
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
 
JVM のいろはにほ #javajo
JVM のいろはにほ #javajoJVM のいろはにほ #javajo
JVM のいろはにほ #javajo
 

Viewers also liked

マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
Toshiaki Maki
 

Viewers also liked (6)

Spring Cloud Netflixを使おう #jsug
Spring Cloud Netflixを使おう #jsugSpring Cloud Netflixを使おう #jsug
Spring Cloud Netflixを使おう #jsug
 
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
 
形式手法で捗る!インフラ構成の設計と検証
形式手法で捗る!インフラ構成の設計と検証形式手法で捗る!インフラ構成の設計と検証
形式手法で捗る!インフラ構成の設計と検証
 
Event Driven Microservices with Spring Cloud Stream #jjug_ccc #ccc_ab3
Event Driven Microservices with Spring Cloud Stream #jjug_ccc #ccc_ab3Event Driven Microservices with Spring Cloud Stream #jjug_ccc #ccc_ab3
Event Driven Microservices with Spring Cloud Stream #jjug_ccc #ccc_ab3
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 

Similar to Java トラブル解析支援ツール HeapStats のご紹介

[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
de:code 2017
 
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみたOpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
徹 上野山
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
MITSUNARI Shigeo
 

Similar to Java トラブル解析支援ツール HeapStats のご紹介 (20)

WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみた
 
2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services
 
Bambooによる継続的デリバリー
Bambooによる継続的デリバリーBambooによる継続的デリバリー
Bambooによる継続的デリバリー
 
Openstack ceph 20171115 vtj
Openstack ceph 20171115 vtjOpenstack ceph 20171115 vtj
Openstack ceph 20171115 vtj
 
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
 
Nginx
NginxNginx
Nginx
 
JAMstackは眠らない
JAMstackは眠らないJAMstackは眠らない
JAMstackは眠らない
 
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
TotalViewを使ったFOCUSスパコンでのデバッグ体験 2016
TotalViewを使ったFOCUSスパコンでのデバッグ体験 2016TotalViewを使ったFOCUSスパコンでのデバッグ体験 2016
TotalViewを使ったFOCUSスパコンでのデバッグ体験 2016
 
Zynga
ZyngaZynga
Zynga
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみたOpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
 
Introduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 SpringIntroduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 Spring
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
 
マイクロソフトが考えるAI活用のロードマップ
マイクロソフトが考えるAI活用のロードマップマイクロソフトが考えるAI活用のロードマップ
マイクロソフトが考えるAI活用のロードマップ
 
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
 
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
 
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティSaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
 

Java トラブル解析支援ツール HeapStats のご紹介

  • 2. Open Source Conference 2014 Hokkaido 自己紹介  竹林 信哉(+ShinyaTAKEBAYASHI)  昨晩ガラナを飲んで眠れなくなったひと  仕事  社内の Java 駆け込み寺  トラブル解析支援,技術支援  Java 仮想マシン,Linux カーネル, ネットワークパケットなどの解析  趣味  モノづくり(ソフトウェア(C/C++/x86ASM)電子工作)  ロードバイク  その他  Linux よりWindows,Windows より BSD
  • 3. Open Source Conference 2014 Hokkaido こんなことありませんか? 商用機でトラブルが 発生しまして・・・ !! いつまでの解決を・・ はい,なるはやで.
  • 4. Open Source Conference 2014 Hokkaido こんなことありませんか? はいどうぞ △△と××のログを ください これじゃないです はいどうぞ 時刻違いますが? いや実はトラブったときの ログが残っていなくて. 再現します? 環境貸してもらえます? 再現するかわかりません. 環境もお客様と調整しないと. このパラメタ仕込んでください. 再現したらログを送ってください. でも時間かかる性能も 下がるでは困ります. 今すぐだと,不完全な情報から 推測した結果しか出せません. あ,でもお客様に説明する 資料つくらないといけないんで 手伝ってください! ダメです. ちゃんとした解析結果ください!
  • 5. Open Source Conference 2014 Hokkaido HeapStats とは  オープンソースの Java 故障解析支援ツール  Out Of Memory Error でアプリケーションが落ちた!  デッドロックを起こしてアプリケーションが止まった!  想像以上にメモリを消費している・・・. こんな時に ・システム全体の状態 ・Java アプリケーションのメモリ使用状況 ・メモリ使用量の推移 自動的に情報を収集し, 解析を支援するツール
  • 6. Open Source Conference 2014 Hokkaido 利用シーン
  • 7. Open Source Conference 2014 Hokkaido 利用シーン 開発中 • 長期安定試験の前にメモリリークを発見できる • Java のヒープ領域サイズ,GC のチューニングや, アプリケーションのオブジェクトライフサイクルの確認できる 商用運転中 • 定期的に情報を収集し,不穏な動きがないかをチェックできる 故障発生時 • AP 停止時に監視ツールに通知できる • 解析に必要な情報を自動収集できる • システムの復旧を最優先に実施できる
  • 8. Open Source Conference 2014 Hokkaido 故障発生から解決までの時間を短縮します ユーザ申告など により故障発生 を感知 サーバ再起動な どでとりあえず 復旧 情報収集のため 検証環境で再現 原因解析実施 AP 修正など HeapStats 未導入 1. 故障発生 2. 復旧 3. 解析 4. 解決 監視センタにて 即座に故障発生 を感知 解析に必要な情報 を自動的に収集 サーバを復旧し サービス再開 収集された情報 をもとに解析に も並行して着手 AP 修正など HeapStats 導入後 本格対処完了までの時間を 短縮できる! 自動で情報収集 1. 故障発生 2. 復旧 3. 再現検証 4. 解析 5. 解決
  • 9. Open Source Conference 2014 Hokkaido HeapStats を使うと,こうなります はいどうぞ ○○をください ××を実施して,とりあえず 業務を回復してください. OK! 原因は AP の不具合の可能性大. クラス△△のあたりの実装を 見なおしてみてください. メモリ使いすぎです. おおっ,そうでしたか. 見なおしてみます! 作り込みがイケてませんでした. 直してから再発していません!
  • 10. Open Source Conference 2014 Hokkaido もっと HeapStats
  • 11. Open Source Conference 2014 Hokkaido HeapStats の構成  Agent と Analyzer で構成 ① Agent・・・・ サーバにインストールし,各種情報を収集する. ② Analyzer ・・Agent が収集した情報を可視化する. Agent Analyzer Log / Snapshot Storage or Network ① Agent で収集して ② Analyzer で解析する
  • 12. Open Source Conference 2014 Hokkaido HeapStats Agent  サーバに常駐し,情報を収集しアラートを出力する  ヒープ統計情報,デッドロック情報,CPU/メモリ使用率を 統合的に収集  Out Of Memory Error,デッドロック発生時,Java ヒープメモリが閾 値を超過した際に,SNMPTrap を送出する機能もある Application JBoss /Tomcat / etc.. OpenJDK / Oracle JDK Linux (x86 / x86_64) Application Application Server JavaVM OS JavaVM に常駐 ・定期的な情報収集 ・故障発生時の通知 SNMP TRAP
  • 13. Open Source Conference 2014 Hokkaido HeapStatsAgent 収集する情報(通常時) Java ヒープ関連 クラスヒストグラム クラス名 インスタンス数 総サイズ 参照関係 GC 発生日時 発生原因 処理時間 世代別の Java ヒープ使用量 Permanent/Metaspace 使用量 クラスローダ情報 Java ランタイム情報 ネイティブメモリ使用量(RSS/VSZ) ライブスレッド数 モニタ(ロック)競合回数 完全停止(STW)時間 CPU 使用率 Java プロセス内部での内訳 システム全体での使用率
  • 14. Open Source Conference 2014 Hokkaido HeapStatsAgent 収集する情報(異常時) 一般的な情報 故障発生日時 故障内容 スレッドダンプ 各種バージョン Java JVM OS カーネル OS ディストリビューション libc Java 関連情報 JVM 名 クラスパス Java ホームディレクトリ JVM 起動引数(フラグ等) 実行中の Java プログラム名と引数 実行時間(故障発生までの間隔) プロセス情報 プロセスステータス (proc/[PID]/status) ネイティブメモリ情報 (/proc/[PID]/smaps) リソース制限 (/proc/[PID]/limits) ソケットエンドポイント (netstat 相当) ログ類 syslog 標準出力/標準エラー出力 GC ログ
  • 15. Open Source Conference 2014 Hokkaido HeapStatsAgent 性能への影響は・・・? 測定環境: DELL PowerEdge R810 Red Hat Enterprise Linux 6.3 x86_64 java-1.7.0-openjdk-1.7.0.51-2.4.4.1.el6_5 JVM オプション -Xmn768m -Xms4500m -Xmx4500m -XX:MaxTenuringThreshold=15 -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80 -XX:+CMSClassUnloadingEnabled  HeapStats の導入による性能への影響は,ほとんどない 259.19 255.38 0 50 100 150 200 250 300 HeapStats なし 1.1.1 SPECjvm2008 Composite Result
  • 16. Open Source Conference 2014 Hokkaido HeapStats Analyzer  Agent が蓄積したログなどを解析するツール  メモリの情報をグラフィカルに表示・分析 ヒープ使用量の経過 任意の時点でのクラスごとのメモリ使用量 参照オブジェクトツリー(1.1 以降)
  • 17. Open Source Conference 2014 Hokkaido 動作環境 Agent Analyzer CPU アーキテクチャ x86 または x86_64※1 不問 OS Linux※2 不問 【動作確認済み】 Red Hat Enterprise Linux 6 CentOS 6 Fedora 20 【動作確認済み】 左記に加えて Windows 7/8/8.1 Windows Server 2008/2012 OS X 10.9 Mavericks Java バージョン OpenJDK 6+ Oracle Java 6+ OpenJDK 7+ Oracle Java 7+ GUI 不要 必要 ※1 SSE4 または AVX に対応している CPU では,より低負荷での動作が可能 ※2 Red Hat Enterprise Linux,CentOS,Fedora 用 RPM パッケージ配布中 商用機とは別の場所・環境で,解析作業を実施できる!
  • 18. Open Source Conference 2014 Hokkaido インストール方法  ダウンロード!  http://icedtea.classpath.org/wiki/HeapStats/jp  Agent のインストールは,とても簡単  Red Hat Enterprise Linux / Fedora の場合は,RPM ファイルで インストール  AP サーバ等の起動スクリプトの,Java 起動オプションに 「-agentlib:heapstats」を追加する  Analyzer は,ほぼゼロインストール  zip ファイルを展開,外部ライブラリ※を入れて jar ファイルを 起動する ※ 別途 JGraphX,JFreeChart,JCommon が必要 % java -agentlib:heapstats Test % java -jar heapstats.jar
  • 19. Open Source Conference 2014 Hokkaido Demonstration
  • 20. Open Source Conference 2014 Hokkaido まとめ  HeapStats は,Java アプリケーションの メモリ問題に起因する故障解析を支援するツールです.  解析に必要な情報を常にもれなく取得しているため, 故障の再現検証が不要になる可能性を高めます.  性能への影響は,ほぼありません.  故障発生時の現場担当者の負担を軽減できます.  事実に基づいた正確な分析を,迅速に実施できます.  使用にあたり費用は発生しません.
  • 21. Open Source Conference 2014 Hokkaido ユーザ申告など により故障発生 を感知 サーバ再起動な どでとりあえず 復旧 情報収集のため 検証環境で再現 原因解析実施 AP 修正など HeapStats 未導入 1. 故障発生 2. 復旧 3. 解析 4. 解決 監視センタにて 即座に故障発生 を感知 解析に必要な情報 を自動的に収集 サーバを復旧し サービス再開 収集された情報 をもとに解析に も並行して着手 AP 修正など HeapStats 導入後 本格対処完了までの時間を 短縮できる! 自動で情報収集 1. 故障発生 2. 復旧 3. 再現検証 4. 解析 5. 解決 こんなに良いことが
  • 22. Open Source Conference 2014 Hokkaido こんなに良いことが(Cont’d) はいどうぞ ○○をください ××を実施して,とりあえず 業務を回復してください. OK! 原因は AP の不具合の可能性大. クラス△△のあたりの実装を 見なおしてみてください. メモリ使いすぎです. おおっ,そうでしたか. 見なおしてみます! 作り込みがイケてませんでした. 直してから再発していません!
  • 23. Open Source Conference 2014 Hokkaido 是非お試しください!
  • 24. Open Source Conference 2014 Hokkaido HeapStats FX Analyzer  Analyzer Java FX 版を開発中
  • 25. Open Source Conference 2014 Hokkaido リンク集  HeapStats Wiki  http://icedtea.classpath.org/wiki/HeapStats/jp  HeapStats Mailing List  http://icedtea.classpath.org/mailman/listinfo/heapstats  HeapStats FX Analyzer  https://github.com/YaSuenag/HeapStatsFXAnalyzer
  • 26. Open Source Conference 2014 Hokkaido ご清聴ありがとうございました Oracle と Java は,Oracle Corporation 及びその子会社,関連会社の米国及びその他の国における登録商標です. その他文中の社名,商品名等は各社の商標または登録商標である場合があります.

Editor's Notes

  1. こんなことになるのが嫌だ,という動機で作り始めたツール. 自動的に必要な情報が手に入ったら皆が不幸にならなくて済むように.
  2. 実際に作ってみると,こんなところにも使えるということが分かった.
  3. さきほど試験工程でも使えると話したが,アナライザでグラフを出すことができるので,報告書作成にも使える? グラフのデータ間違えたりということもない.
  4. 商用でよく使われる Red Hat Linux 用の RPM ファイルがある.インストールとても簡単.
  5. Tomcat では catalina.sh などに JAVA_OPTS を設定する場所があるので,そこに書く.