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

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

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