SlideShare a Scribd company logo
末永恭正@YaSuenag
はじめに 
 私はJavaFX(Javaも?)素人です 
 我流でやってきた内容をお話しします 
 マサカリ禁止 
×
自己紹介 
 末永恭正(すえながやすまさ)@YaSuenag 
 SIerでJavaやってるサンデープログラマー 
 OpenJDK Author(jdk9) 
 IcedTea Committer 
 HeapStats作ってます 
http://icedtea.classpath.org/wiki/HeapStats/jp
HeapStats 
 Javaの障害解析支援&監視ツール 
 とにかくエージェントの性能に腐心 
 より軽く・より速く 
Javaアプリケーション実行マシン 
Javaアプリケーション 
(Java製アプリケーションサーバも含む) 
JRE (JVM) JVM監視エージェント 
JVMにアタッチ 
Java関連情報 
• ヒープスナップショット 
• OSリソース 
• etc… 
アナライザ 
解析
置き去りにされたアナライザ… 
 Java SE 6ベース 
 Swing 
 コードが冗長 
 やっぱり今風にしておきたい 
 見た目重要
HeapStats 
× 
JavaFX
HeapStatsFXAnalyzer 
https://github.com/YaSuenag/HeapStatsFXAnalyzer
Heap statsfx analyzer
HeapStatsFXAnalyzer 
 HeapStats Analyzer ♥ JavaFX8 
 Java8のコード 
 Lambda、StreamAPIバリバリ使いたい 
 プラガブル 
 アナライザへの機能追加を誰でもできる 
 コミュニティドリブンな開発 
 GitHub 
 developブランチ見てください 
 将来的には本家(IcedTea)へマージ予定
なぜJavaFX8? 
 SwingNodeが使いたかったから
使っている主な(?)機能 
 FXML 
 Chart 
 PieChart 
 StackedAreaChart 
 AreaChart 
 LineChart 
 Task 
 ProgressIndicatorとbind 
 国際化(と言えるか?) 
 とりあえず日本語と英語
構成 
 HeapStats 1.0相当のアナライザを実装 
 プラグインで機能拡張 
HeapStatsFXAnalyzer 
コア機能 
スナップ 
ショット 
パーサー 
ログ 
パーサーGUI部品 
プラグイン 
プラグイン 
管理 
組み込みプラグイン 
スナップ 
ショット 
リソース 
ログ 
参照ツリー 
表示 
CSV出力 
JVM 
死活監視…
HeapStatsのプラグイン 
 FXMLを含むJAR形式 
 コントローラはHeapStatsFXAnalyzerに含まれ 
るPluginControllerを継承する必要あり 
 Java8/JavaFX8可 
 プラグインにはTabが1枚与えられる 
 FXMLの含まれるパッケージ名を設定して 
libにJARと関連ライブラリを入れておけば 
OK 
heapstats.properties: 
plugins=jp.co.ntt.oss.heapstats.plugin.builtin.log ;  
jp.co.ntt.oss.heapstats.plugin.builtin.snapshot ;  
jp.dip.ysfactory.heapstats.plugin.jvmlive
jp.co.ntt.oss.heapstats.WindowController#loadPlugin() 
プラグインが呼ばれるまで1 
PluginClassLoader 
設定 
 クラスローダの設定 
 PluginClassLoader 
FXMLLoader 
 HeapStatsFXAnalyzerのlibを向くクラスローダ 
 lib配下のJARをすべてロード 
 FXMLLoader#setDefaultClassLoader()にセット
jp.co.ntt.oss.heapstats.WindowController#addPlugin() 
プラグインが呼ばれるまで2 
プラグインリスト 
ロード 
 各プラグインのロード 
 heapstats.propertiesのpluginsに指定されたもの 
 FXMLLoaderインスタンスはResourceBundleを 
指定して作成 
 日本語or英語 
 普通にFXMLLoader#load() 
 staticなload()は使わない 
FXMLLoader
jp.co.ntt.oss.heapstats.WindowController#addPlugin() 
プラグインが呼ばれるまで3 
 コントローラインスタンスの取得 
 FXMLLoader#getController() 
 HeapStatsのPluginControllerにキャスト 
 プラグインの初期設定 
 オーナーWindow、ProcessIndicator関連 
 タブ選択イベントの設定 
 Tab#setOnSelectionChanged() 
 タブへの画面追加 
セットアップ画面タブ表示 
FXMLLoader 
取得 
コントローラ
jp.co.ntt.oss.heapstats.plugin.PluginController 
PluginController 
 FXMLコントローラのabstractクラス 
 プラグインは必ず継承する必要あり 
 最小限の機能とインターフェースを提供 
 Taskのbind 
 ProcessIndicator、画面のグレーアウト 
 イベントのキック 
 タブ選択 
 ウィンドウのリサイズ 
 プラグインのライセンス情報の提供 
 オーナーウィンドウのインスタンス取得
<RefTreePlugin> 
jp.co.ntt.oss.heapstats.plugin.reftree.RefTreeController#initialize() 
プラグイン間のデータ受け渡し 
 各プラグインのコントローラに 
直接アクセス 
 コントローラのインスタンスは 
親ウィンドウのコントローラから取得 
 ロード済みプラグインのリストを持っている 
他にいい案が思い浮かばなかった…
今あるプラグイン
参照ツリー表示には… 
RefTreePlugin 
https://github.com/YaSuenag/RefTreePlugin
RefTreePlugin 
 HeapStatsFXAnalyzerにオブジェクト参照 
ツリー表示機能を追加 
 SwingNodeで実装 
 要JGraphX 
 http://www.jgraph.com/jgraphdownload.html
Heap statsfx analyzer
HeapStatsでネットワーク上のJVMを 
すべてルックアップ&死活監視! 
JVMLive 
https://github.com/YaSuenag/JVMLive
JVMLive 
 JDP(Java Discovery Protocol)を使って 
ネットワーク上のJVMを自動ルックアップ 
 見つけたJVMで動いているメインクラスや稼働時間 
などを確認可能 
 JDPパケットの定期受信ができないJVMをハイライト 
表示 
 JVMのクラッシュ検知機能 
 OracleJDK限定 
 -XX:+TransmitErrorReportと-XX:ErrorReportServerが 
指定されていればJVMLiveでクラッシュを検知& 
hs_errログを自動回収
Heap statsfx analyzer
JavaFXで困ったこと
Jp/co/ntt/oss/heapstats/utils/infoDialog.fxml 
困ったことその1 
 ダイアログがない 
 自作しました 
 Accordionで詳細メッセージが見れるようにし 
ました 
8u40 
までの命
困ったことその2 
 複数Chartの合成に対応していない 
 JIRAに要望は上がっているみたいです 
 RT-12710: chart API -- multiple chart types on the 
same axis 
 https://javafx-jira.kenai.com/browse/RT-1271 
※要ログイン 
 StackPaneと透過を使って複数Chartを組み合わ 
せてた時期もあり 
 結局、複数枚のChartに分割で落ち着く
jp.co.ntt.oss.heapstats.plugin.builtin.log.LogController#onChartMouseMoved() 
困ったことその3 
 ChartのTooltipが重い 
 描画要素数に応じてとても重くなる 
 Tooltipもどきを自作 
 マウスポインタ周辺にPopupを表示 
 描画タイミングはonMouseMoved/onMouseExitedの 
組み合わせ 
 マウスのX座標のみに注目 
 Yの値はXがわかればChartのデータから取れる 
 XAxisのgetLayoutX/getStartMargin/getValueForDisplay
困ったことその4 
 animated=trueなAreaChartで多要素の描画 
をさせるとシンボルが表示されない 
 アニメーションやめた(PieChart以外) 
今のところ 
アニメーションによる 
悪影響なし
JavaFXで困ってること
困ってることその1 
 SwingNodeが絡むと一部JavaFX 
コントロールがブラックアウトする 
<RefTreePlugin> 
 ウィンドウをリサイズすると全部真っ黒に… 
 黒い部分の上をマウスでグルグルすると表示 
される 
JavaFXコントロール 
SwingNode
困ってることその2 
 ChartのSeriesを含むFXMLがSceneBuilderで 
ロードできない 
 UI作るのにかなり致命的 
 OpenJFXからビルドしたものだときちんと 
ロードできた 
ココ
困ってることその3 
 WindowsとLinuxでウィンドウサイズ関連 
プロパティの動きが違う 
 Windowクラスのwidth/heightにセットする 
ChangeListener 
 Fedora20だとwidth/heightプロパティの変化が 
ワンテンポ遅い 
黒い縦線(障害発生ポイント)をChangeListenerで描画 
Win7(期待通り) Fedora20(ズレる)
困ってることその4 
<RefTreePlugin> 
 SwingNodeのDrag and Dropイベントが 
おかしい 
 java.awt.dnd.InvalidDnDOperationException 
 セルをドラッグする際のJGraphX内部の処理で 
例外発生
お願い
お願いします! 
 まずはFork 
 次にPull Request 
 できればプラグイン作成 
 「いいね!」
ご意見もお願いいます!
あったらいいな… プラグイン 
 vmstat 
 sar 
 iostat 
 etc…
Heap statsfx analyzer

More Related Content

PPTX
Java 9で進化する診断ツール
PDF
Javaトラブルに備えよう #jjug_ccc #ccc_h2
PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
PPTX
HeapStats(Java解析ツールバトル)
PDF
HeapStats @ Seasar Conference 2015 LT
PPTX
jcmd をさわってみよう
PPTX
Java トラブル解析支援ツール HeapStats のご紹介
PPTX
HeapStatsのデモ (Java The Night)
Java 9で進化する診断ツール
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaはどのように動くのか~スライドでわかるJVMの仕組み
HeapStats(Java解析ツールバトル)
HeapStats @ Seasar Conference 2015 LT
jcmd をさわってみよう
Java トラブル解析支援ツール HeapStats のご紹介
HeapStatsのデモ (Java The Night)

What's hot (19)

PDF
10のJava9で変わるJava8の嫌なとこ!
ODP
スレッドダンプの読み方
PDF
HeapStats: Introduction and Technical Preview
PDF
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
PDF
Introduction to JShell #JavaDayTokyo #jdt_jshell
PPTX
Panamaを先取り!? JVMCIでJITと遊ぶ
PPT
Java9新機能概要
PDF
Head toward Java 16 (Night Seminar Edition)
PDF
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
PPTX
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
PDF
Java SE 9の紹介: モジュール・システムを中心に
PPTX
Java EE8 Report
PDF
Javaアプリケーションサーバ 構築・運用の勘所
PDF
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
PPTX
Java EE パフォーマンスTips #glassfish_jp
PDF
OpenJDK トラブルシューティング #javacasual
PDF
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
PDF
Java 10でぼくたちの生活はどう変わるの?
PDF
Migration Guide from Java 8 to Java 11 #jjug
10のJava9で変わるJava8の嫌なとこ!
スレッドダンプの読み方
HeapStats: Introduction and Technical Preview
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell #JavaDayTokyo #jdt_jshell
Panamaを先取り!? JVMCIでJITと遊ぶ
Java9新機能概要
Head toward Java 16 (Night Seminar Edition)
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
Java SE 9の紹介: モジュール・システムを中心に
Java EE8 Report
Javaアプリケーションサーバ 構築・運用の勘所
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Java EE パフォーマンスTips #glassfish_jp
OpenJDK トラブルシューティング #javacasual
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java 10でぼくたちの生活はどう変わるの?
Migration Guide from Java 8 to Java 11 #jjug
Ad

Similar to Heap statsfx analyzer (20)

PPTX
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
PPTX
JMeterをWebでしか設定できないサーバの設定自動化に使う
PPTX
Java fx勉強会lt 第8回
PDF
SDLoader SeasarCon 2009 Whire
PDF
WebSocket+Akka(Remote)+Play 2.1 Java
PPTX
Zealup - React
PDF
アドテク×Scala×パフォーマンスチューニング
PDF
jjugccc2018 app review postmortem
PPT
Windows® API Code Pack for Microsoft® .NET Framework
PDF
R5 3 type annotation
PDF
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
PDF
統合監視ソフトウェア Zabbix新バージョン2.0の紹介
PDF
Chrome Developer Toolsを使いこなそう!
PDF
Windows PowerShell 2.0 の基礎知識
PDF
Javaで1から10まで書いた話(sanitized)
PDF
運用の現場での監視運用ツールの活用
PDF
System Center Operations Managerによる仮想環境の高度な管理
PDF
Devtools.next
PDF
PPTX
Cve 2013-0422
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
JMeterをWebでしか設定できないサーバの設定自動化に使う
Java fx勉強会lt 第8回
SDLoader SeasarCon 2009 Whire
WebSocket+Akka(Remote)+Play 2.1 Java
Zealup - React
アドテク×Scala×パフォーマンスチューニング
jjugccc2018 app review postmortem
Windows® API Code Pack for Microsoft® .NET Framework
R5 3 type annotation
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
統合監視ソフトウェア Zabbix新バージョン2.0の紹介
Chrome Developer Toolsを使いこなそう!
Windows PowerShell 2.0 の基礎知識
Javaで1から10まで書いた話(sanitized)
運用の現場での監視運用ツールの活用
System Center Operations Managerによる仮想環境の高度な管理
Devtools.next
Cve 2013-0422
Ad

Heap statsfx analyzer