labs/arthas-jfr-backend/README.md
基于 Spring Boot 3.5.3 的现代化 JFR (Java Flight Recorder) 文件分析后端服务,提供 RESTful API 支持多维度性能分析和火焰图数据生成。
org.openjdk.jmc:flightrecorder - JFR 文件解析org.openjdk.jmc:common - JMC 通用组件org.openjdk.jmc:flightrecorder.rules - JFR 规则引擎org.springframework.boot:spring-boot-starter-web - Web 服务org.springframework.boot:spring-boot-starter-data-jpa - 数据访问arthas-jfr-backend/
├── src/main/java/org/example/jfranalyzerbackend/
│ ├── config/ # 配置类
│ │ ├── ArthasConfig.java # Arthas 集成配置
│ │ ├── CorsConfig.java # 跨域配置
│ │ └── Result.java # 统一响应结果
│ ├── controller/ # REST 控制器
│ │ ├── FileController.java # 文件管理 API
│ │ └── JFRAnalysisController.java # JFR 分析 API
│ ├── service/ # 业务服务层
│ │ ├── FileService.java # 文件服务接口
│ │ ├── JFRAnalysisService.java # JFR 分析服务接口
│ │ ├── JFRAnalyzer.java # JFR 分析器接口
│ │ └── impl/ # 服务实现
│ ├── extractor/ # JFR 数据提取器
│ │ ├── Extractor.java # 提取器基类
│ │ ├── EventVisitor.java # 事件访问器
│ │ ├── JFRAnalysisContext.java # 分析上下文
│ │ ├── *Extractor.java # 各种性能维度提取器
│ │ └── PerfDimensionFactory.java # 性能维度工厂
│ ├── entity/ # 实体类
│ │ ├── shared/ # 共享实体
│ │ ├── FileEntity.java # 文件实体
│ │ └── ProfileDimension.java # 性能维度实体
│ ├── model/ # 数据模型
│ │ ├── AnalysisResult.java # 分析结果模型
│ │ ├── FlameGraph.java # 火焰图数据模型
│ │ ├── jfr/ # JFR 相关模型
│ │ └── symbol/ # 符号表模型
│ ├── repository/ # 数据访问层
│ ├── enums/ # 枚举类
│ ├── exception/ # 异常处理
│ ├── request/ # 请求对象
│ ├── vo/ # 视图对象
│ ├── util/ # 工具类
│ └── JfrAnalyzerBackendApplication.java # 启动类
└── src/main/resources/
└── application.yml # 应用配置文件
默认使用 H2 内存数据库,生产环境可配置 MySQL:
# application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/arthas_jfr
username: your_username
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
properties:
hibernate.dialect: org.hibernate.dialect.MySQLDialect
# 开发模式
mvn spring-boot:run
# 或者打包后运行
mvn clean package
java -jar target/arthas-jfr-backend-4.0.5.jar
http://localhost:8200http://localhost:8200/h2-consolehttp://localhost:8200/api/files (文件列表)# 关键配置项
arthas:
jfr-storage-path: ${user.home}/arthas-jfr-storage # JFR 文件存储路径
spring:
servlet:
multipart:
max-file-size: 1GB # 最大文件大小
max-request-size: 1GB # 最大请求大小
server:
port: 8200 # 服务端口
@Component
public class CustomExtractor extends Extractor {
@Override
public String getDimensionName() {
return "CUSTOM_DIMENSION";
}
@Override
public void extract(RecordedEvent event, JFRAnalysisContext context) {
// 实现提取逻辑
}
}
PerfDimensionFactory 中注册:public static PerfDimension createCustomDimension() {
return new PerfDimension("CUSTOM_DIMENSION", "自定义维度", "ms");
}
默认使用 H2 内存数据库,生产环境可配置 MySQL:
spring:
datasource:
url: jdbc:mysql://localhost:3306/arthas_jfr
username: your_username
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
本项目参考了以下优秀的开源项目: