前言
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