前言
Java 作為一門主流的程式設計語言, 在業界擁有着豐富的工具幫助開發者排查與定位研發過程中遇到的各類疑難問題。早在多年前, 阿裡巴巴就研發了一款 Java 應用的線上問題診斷平台 -- ZProfiler, 緻力于幫助研發同學快速定位生産環境中頻繁遇到的 Java 問題, 例如 OOM 異常。
在内部, ZProfiler 平台被研發同學廣泛使用, 協助他們解決了大量的生産問題。 如今, 為了讓這款産品能夠幫助到更多的 Java 開發者, 同時讓這個項目能夠得到更好的發展, 我們決定将其開源。
在今年年初, 阿裡巴巴正式加入了 Eclipse 基金會, 并在社群中建立了 Eclipse Jifa 項目, 目前項目處在孵化階段。
項目介紹
作為 ZProfiler 的開源版本, Eclipse Jifa 使用 Vue 和 Vert.x 作為其主要的前後端開發架構, 是一個典型的 web 應用程式。
在架構設計上, 我們将 Eclipse Jifa 劃分為 Master / Worker 兩塊子產品, 其中 Worker 負責具體的任務分析工作, 而 Master 則充當管理的角色, 讓整套系統具備一定的水準擴充能力。我們也會支援 Worker 單獨部署的能力以适用于簡單場景。

使用者可以很友善地将 Eclipse Jifa 部署在自己的應用環境中, 通過 Eclise Jifa 提供的檔案傳輸能力将相關檔案上傳到平台中, 并使用浏覽器進行相關的問題分析工作。
目前 Eclipse Jifa 基于 Eclipse MAT 實作了一系列常用的 Heap Dump 的分析服務, 如:
- 支配樹分析
支配樹是圖論中的一個重要概念, 被應用與多個領域, 比如編譯器中。而在記憶體分析中, 支配樹可以用來說明回> 收關系, 舉一個例子: 當對象 A 能夠被 GC 回收時, 對象 B 也一定能被回收, 則可以得出對象 A 支配對象 B 的> 結論。
注意 A 和 B 不一定有直接的引用關系。
通過支配樹視圖, 在某些情況下可以快速定位到一些"熱"對象, 比如用于緩存的一些資料結構等。
- 類加載器視圖
類加載器視圖會列出應用目前使用到的所有類加載, 以及每個類加載器加載類的情況: 加載了哪些類, 這些類有多少執行個體等資訊。通常用于排查 Metaspace 使用過多的問題,根據經驗,當 Groovy 類加載器以及反射類加載器數量較多時,Metaspace 碎片化成會比較嚴重, 不過堆分析暫時沒有辦法給出具體的碎片資料, 但是使用者可以通過數量來做一定的輔助分析。
- OQL
OQL (Object Query Language) 是 Eclipse MAT 内置的對象查詢語言, 使用者可以通過它實作各類查詢操作
結語
相信有許多技術公司在自己内部環境也需要這樣一個平台, 來支撐研發同學的問題排查工作, 提高生産環境效率。在此之前, Netfix 向我們表達了對該項目的興趣, 他們内部也曾做過類似的工作, 雙方做了一次深入的項目分享, 目前也在 Eclipse Jifa 項目上進行一些合作嘗試。我們歡迎廣大開發者們參與到這個項目中來, 幫助這個項目順利孵化。
最後, 我們會持續地将更豐富的特性加入到 Eclipse Jifa 中, 比如線程分析等線上環境必備的 Java 應用分析功能, 同時會在擴充性和維護性上做一系列優化工作, 友善使用者進行快速定制。
更多内容 (如何使用、貢獻等) 可以參考:
https://github.com/eclipse/jifa