V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
linyimin520812
V2EX  ›  程序员

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

  •  
  •   linyimin520812 · 2023-07-28 13:15:46 +08:00 · 2273 次点击
    这是一个创建于 469 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 项目地址: 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-07-28 14:21:48 +08:00
    java 仔点赞
    hexiaowu1993
        2
    hexiaowu1993  
       2023-07-28 14:22:03 +08:00
    东西很不错,正好需要,支持一个,已 star
    zjp
        3
    zjp  
       2023-07-28 15:00:34 +08:00 via Android   ❤️ 1
    还没有仔细看,印象中可以在 agent 声明 bean ,监听 Spring 启动完成事件吧。这样可以省去 spring-startup-analyzer.app.health.check.endpoints 配置
    watzds
        4
    watzds  
       2023-07-28 15:28:23 +08:00
    不错,之前我是在项目里放个 InstantiationAwareBeanPostProcessor ,自己统计 bean 实例化和初始化时间,也支持 bean 嵌套依赖
    lc5900
        5
    lc5900  
       2023-07-28 18:49:11 +08:00
    试了下还不错,就是默认不支持 Arm 版 mac ,要更换 async-profiler 依赖,换了之后就可以了。
    linyimin520812
        6
    linyimin520812  
    OP
       2023-07-29 11:09:20 +08:00
    @zjp 非常好的建议,我研究一下 Spring 启动完成事件
    linyimin520812
        7
    linyimin520812  
    OP
       2023-07-29 11:11:39 +08:00
    @lc5900 感谢使用。目前确实不支持 Arm 版 mac ,async-profiler 是定制了一些功能然后自己在编译的,原 async-profiler 是支持 Arm 版 mac 的,但是自己编译后就不支持了,这个我再看一下
    linyimin520812
        8
    linyimin520812  
    OP
       2023-08-01 10:44:42 +08:00
    @lc5900 v2.0.6 版本支持 ARM 版的 mac 啦
    linyimin520812
        9
    linyimin520812  
    OP
       2023-08-02 16:07:46 +08:00   ❤️ 1
    @zjp 发现一种方式可以省去 spring-startup-analyzer.app.health.check.endpoints 配置,大多数情况下,spring boot 应用的入口都是在 main 方法中执行 SpringApplication.run,可以对 SpringApplication.run()插桩,方法执行完成则说明应用启动完成
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1028 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:19 · PVG 03:19 · LAX 11:19 · JFK 14:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.