Eclipse Jifaは、Javaアプリケーションのトラブルシュート作業のためのオープンソースプロジェクトだ。同種のソリューションの多くがクライアント上で動作するのに対して、スケーラブルなWebベースのソリューションを提供することによって、ローカルのメモリやリソースの問題を回避している。現時点では、Heap Dump AnalysisとGC Log Analysisがサポートされており、ターゲットのヒープの概要、リークの可能性、スレッド情報、GCルート分析といった機能を提供している。
フロントエンドとバックエンドには、それぞれVue 2.0とVert.xが使用されている。構成にはMaster-Workerパターンを採用しており、ひとつないし複数のマスタが、ブラウザからの要求を受信し、分析を実行するワーカのマネージドセットにルーティングする仕組みである。マスタは負荷に応じてワーカを追加スケジュールする。
Eclipse Jifaには複数のデプロイ方法がある。ワーカひとつのみ、ひとつのマスタと複数のワーカ、そしてKubernetesモデルだ。Kubernetesスケジューリングソリューションでは、Kubernetes Java Clientを使用して、リソースの使用状況に基づいて、オンデマンドで新たなポッドを生成する。
現在の分析エンジンは、Eclipse Memory Analyzer(MAT)をベースとするHeap Dump Analysisサービスと、G1、Parallel GC、Serial GC、CMS、ZGCといったガベージコレクションアルゴリズムをサポートするGC Log Analysisサービスという、2つのパーツを持っている。GC Log AnalysisサービスはJava 8から11までのログを処理可能だが、Java 17については現在開発中である。
オンラインのデモ環境を使ってEclipse Jifaを評価を評価できる他、Dockerイメージを使って簡単に実行することも可能だ。
docker run -p 8102:8102 jifadocker/jifa-worker:demo
http://localhost:8102
:をブラウズすると、スターティングページが表示される。
ここで"Add Heap Dump File"をクリックすると、ヒープダンプファイルを生成するためのさまざまなオプションが示されるので、いずれかを選択することによって、Javaアプリケーションのヒープダンプを格納した.hprof
ファイルを得ることができる。JDKで提供されるjcmd
コマンドは、ヒープダンプを生成するオプションのひとつだ。
jcmd [pid] GC.heap_dump [location to store the hprof file]
生成されたヒープダンプがページ上に表示されるので、"analyze"をクリックすれば分析が開始される。
分析が完了すると、結果の概要が表示される。リングの青い部分をクリックすることで、以下のような概要が表示される。
Eclipse Jifaには、ヒープダンプをさらに解析するための、さまざまな"View"が用意されている。"Dominator Tree"には、ヒープの大きな割合がひとつのThread
によるものであることが示されている。その中のSchool
オブジェクトをドリルダウンすれば、ArrayList
と多数の長いString
オブジェクトを確認することができる。これは、このヒープダンプが、School
オブジェクト内のArrayList
に、ランダムな長いString
オブジェクトを格納したデモアプリケーションから生成されたものであるためだ。
Eclipse Jifaのヒープダンプ分析は、Eclipse MATをベースとしており、ヒープダンプ分析に関する詳細なドキュメントを提供する。
Eclipse Jifaのふたつめの機能は、ガベージコレクションログの解析だ。"GC Log Analysis"に続いて"Add GC Log File"をクリックすると、ガベージコレクションログファイルに適用可能なさまざまなオプションが表示される。以下のコマンドは、ガベージコレクションログを生成するオプションの一例だ。
java -Xlog:gc*=debug:file=[log file location] -jar [jar location]
ログファイルを指定して分析が完了すると、概要が表示される。
それぞれのタブで、より詳細な情報が提供される。最初の"Graphs"タブでは、ガベージコレクション数、停止時間、ヒープサイズなどの統計情報が表示される。
"GC Cause And Pause"では、ガベージコレクションの原因と、一時停止期間に関するより詳細な情報が表示される。
最後の"GC Detail"タブでは、すべての詳細に加えて、次のような情報が各行に表示される。
Eclipse JifaにはAlibaba Cloud、Netflixなどのオープンソースコミュニティのメンバがコントリビューションしており、現時点ではインキュベーションフェーズとしてバージョン0.1がリリースされている。チームは現在、Matureフェーズへの移行を目指して開発を続けている。
Java ChampionでGreenTea JUGの共同リーダを務めるSanhong Li氏と、OpenJDKコミッタのDenghui Dong氏(ともにAlibaba Cloud)が、2022 jChampions Conferenceで、Eclipse Jifaプロジェクトについてさらに詳しく説明している。