linyimin520812
V2EX  ›  程序员

Spring 启动分析优化——自荐个项目

By linyimin520812 at 2023 年 7 月 28 日 · 3668 次点击
  • 项目地址: https://github.com/linyimin0812/spring-startup-analyzer

  • 项目描述:

    采集 Spring 应用启动过程数据——Spring Bean 初始化详情信息,支持初始化耗时/beanName 搜索、Spring Bean 初始化时序图、方法调用次数及耗时统计(支持自定义方法)、应用未加载的 jar 包(帮助 fatjar 瘦身)及应用启动过程线程 wall clock 火焰图,并生成交互式分析报告(HTML),用于分析 Spring 应用启动卡点,支持 Spring Bean 异步初始化,减少优化 Spring 应用启动时间。

  • 亮点:

    • 无侵入:以 javaagent 形式接入,无需修改应用代码
    • 类隔离:自定义类加载器,与应用完全隔离
    • 数据详细:应用启动数据整合成交互式报表,供开发人员分析
    • 支持自定义扩展
  • 截图:

    • Spring Bean 初始化详情 Spring Bean Initialization

    • Spring Bean 初始化时序图 Spring Bean Timeline

    • 方法调用次数、耗时统计(支持自定义方法) Details of Method Invoke

    • 应用未加载的 jar 包(帮助 fatjar 瘦身) Unused Jars

    • 应用启动过程线程 wall clock 火焰图(支持指定线程名称,不指定则采集全部线程) Flame Gragh

9 条回复  •  2023-08-02 16:07:46 +08:00
wxy1991
   1
wxy1991  
   2023 年 7 月 28 日
java 仔点赞
Kanavi
   2
Kanavi  
   2023 年 7 月 28 日
东西很不错,正好需要,支持一个,已 star
zjp
   3
zjp  
   2023 年 7 月 28 日 via Android   ❤️ 1
还没有仔细看,印象中可以在 agent 声明 bean ,监听 Spring 启动完成事件吧。这样可以省去 spring-startup-analyzer.app.health.check.endpoints 配置
watzds
   4
watzds  
   2023 年 7 月 28 日
不错,之前我是在项目里放个 InstantiationAwareBeanPostProcessor ,自己统计 bean 实例化和初始化时间,也支持 bean 嵌套依赖
lc5900
   5
lc5900  
   2023 年 7 月 28 日
试了下还不错,就是默认不支持 Arm 版 mac ,要更换 async-profiler 依赖,换了之后就可以了。
linyimin520812
   6
linyimin520812  
OP
   2023 年 7 月 29 日
@zjp 非常好的建议,我研究一下 Spring 启动完成事件
linyimin520812
   7
linyimin520812  
OP
   2023 年 7 月 29 日
@lc5900 感谢使用。目前确实不支持 Arm 版 mac ,async-profiler 是定制了一些功能然后自己在编译的,原 async-profiler 是支持 Arm 版 mac 的,但是自己编译后就不支持了,这个我再看一下
linyimin520812
   8
linyimin520812  
OP
   2023 年 8 月 1 日
@lc5900 v2.0.6 版本支持 ARM 版的 mac 啦
linyimin520812
   9
linyimin520812  
OP
   2023 年 8 月 2 日   ❤️ 1
@zjp 发现一种方式可以省去 spring-startup-analyzer.app.health.check.endpoints 配置,大多数情况下,spring boot 应用的入口都是在 main 方法中执行 SpringApplication.run,可以对 SpringApplication.run()插桩,方法执行完成则说明应用启动完成
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
© 2026 V2EX · 28ms · 3.9.8.5