你的Spring应用启动很慢?不妨试试这个工具!

这篇具有很好参考价值的文章主要介绍了你的Spring应用启动很慢?不妨试试这个工具!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

睡不着闲逛,在GitHub上看到一个挺实用的开源项目:Spring Startup Analyzer

从项目名称中就大概能猜到,这是一个分析Spring应用启动过程的工具。Spring Startup Analyzer通过采集Spring应用启动过程的数据,进而生成一个交互式的分析报告,帮助用户发现Spring应用启动慢的位置。

同时,Spring Startup Analyzer还提供了Spring Bean异步初始化的工具,来帮助开发者加快Spring应用的启动时间。

下面一起来看看其提供的强大功能。

分析能力

我们可以先从该项目中给出HTML样例报告来看看它所提供的分析功能。感兴趣的可以通过下面链接访问:

  • https://linyimin-blog.oss-cn-beijing.aliyuncs.com/spring-satrtup-analyzer/hokage-20230618000928-192.168.0.101-analyzer.html

把报告内容的细节部分都收起来,可以看到如下图所示的内容:

你的Spring应用启动很慢?不妨试试这个工具!

主要有六个部分:

  • 启动的统计数据。其中包括:启动时间、Bean的数量、使用/总共的JAR包数量、未使用/总共的JAR包数量、ClassLoader数量

你的Spring应用启动很慢?不妨试试这个工具!

  • Spring Bean初始化数据。这里采集了每个Spring Bean的初始化时间及其细节内容

你的Spring应用启动很慢?不妨试试这个工具!

  • Bean初始化时间线。通过时间线的方式,清晰地展现了Spring应用启动时候,各个Bean的顺序关系以及时间消耗

你的Spring应用启动很慢?不妨试试这个工具!

  • 方法调用的详细信息。这里统计了每个方法的调用时间、总时间开销和每次调用的平均时间

你的Spring应用启动很慢?不妨试试这个工具!

点开之后,还能看到具体每次调用时候的时间开销和一些调用细节:

你的Spring应用启动很慢?不妨试试这个工具!

  • 启动后未使用的JAR。列出了所有Spring应用启动后没有使用的jar包,可以有效的帮助你清理不需要的依赖,为应用瘦身

你的Spring应用启动很慢?不妨试试这个工具!

  • 应用启动过程的线程火焰图

你的Spring应用启动很慢?不妨试试这个工具!

如何使用

通过上面的介绍,相信你已经了解该工具的强大之处了。接下来就可以通过下面的方法尝试分析一下自己的应用吧:

第一步:从里面的链接中下载最新的安装包

https://github.com/linyimin0812/spring-startup-analyzer/tags

第二步:解压下载的安装包,记住解压后的路径,下面一步要用

第三步:编辑Spring Boot的启动参数,包括:

  1. 该工具采用agent的方式启动,所以要添加参数-javaagent:$HOME/spring-startup-analyzer/lib/spring-profiler-agent.jar,这里$HOME代表以前的解压路径,记得根据上面解压后的路径编辑这个参数
  2. 配置分析工具的参数,这里根据自己需要添加即可,比如可以配置超时时间30分钟:-Dspring-startup-analyzer.app.health.check.timeout=30,其他可配置项如下表,你可以工具自己应用的情况去修改:

你的Spring应用启动很慢?不妨试试这个工具!

第四步:查看该工具的日志,可以通过$HOME/spring-startup-analyzer/logs路径,这里$HOME代表以前的解压路径,日志文件的类别为:

  • startup.log: 启动过程中的日志
  • transform.log: 被re-transform的类/方法信息

另外,该工具还支持自定义扩展,这里DD没试过,就不具体介绍了。感兴趣的童鞋可以根据文档去试试。

启动优化

这里提到了一个启动加速的优化思路,就是把一些耗时的Bean初始化改成异步就能实现。该项目提供了Bean的异步初始化工具,也非常好用,只需要下面几步就能完成。

第一步:引入依赖

<dependency>
    <groupId>io.github.linyimin0812</groupId>
    <artifactId>spring-async-bean-starter</artifactId>
    <version>2.0.2</version>
</dependency>

第二步:配置参数

# 异步化的Bean可能在Spring Bean初始化顺序的末尾,导致异步优化效果不佳,打开配置优先加载异步化的Bean
spring-startup-analyzer.boost.spring.async.bean-priority-load-enable=true
# 指定异步的Bean名称
spring-startup-analyzer.boost.spring.async.bean-names=testBean,testComponent
# 执行异步化Bean初始化方法线程池的核心线程数
spring-startup-analyzer.boost.spring.async.init-bean-thread-pool-core-size=8
# 执行异步化Bean初始化方法线程池的最大线程数
spring-startup-analyzer.boost.spring.async.init-bean-thread-pool-max-size=8

第三步:检查Bean是否异步初始化。查看日志$HOME/spring-startup-analyzer/logs/startup.log文件,对于异步执行初始化的方法,会按照以下格式写一条日志:

async-init-bean, beanName: ${beanName}, async init method: ${initMethodName}

但是,作者在文档中也提到了,异步并不是万能的,你还需要注意以下这几点:

  • 应该优先从代码层面优化初始化时间长的Bean,从根本上解决Bean初始化耗时长问题
  • 对于二方包/三方包中初始化耗时长的Bean(无法进行代码优化)再考虑Bean的异步化
  • 对于不被依赖的Bean可以放心进行异步化,可以通过各个Bean加载耗时中的Root Bean判断Bean是否被其他Bean依赖
  • 对于被依赖的Bean需要小心分析,在应用启动过程中不能其他Bean被调用,否则可能会存在问题

好了,今天的学习就到这里!如果您学习过程中如遇困难?可以加入我们超高质量的Spring技术交流群,参与交流与讨论,更好的学习与进步!更多Spring Boot教程可以点击直达!,欢迎收藏与转发支持!

最后,奉上项目地址:https://github.com/linyimin0812/spring-startup-analyzer

欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源文章来源地址https://www.toymoban.com/news/detail-599158.html

到了这里,关于你的Spring应用启动很慢?不妨试试这个工具!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一直使用PostMan接口测试?不妨试试IDEA内置插件Restful Fast Request

    小编在看一些Idea常用开发插件的时候,发现了一个神奇的插件,百度一搜还是咱们国人开发的,支持一波。今天安装了一下,是真的香啊!完全可以代替Postman来进行测试了,它就是Idea的插件 Restful Fast Request 。今天小编就带大家一起探索一下这个插件到底好不好使用!! R

    2024年02月12日
    浏览(36)
  • 如何优雅地在Spring Boot项目启动时初始化数据,让你的Web应用快人一步

    🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 大多数Java Web应用程序中,项目在启动时都需要加载一些初始化数据,例如配置文件、数据库连接信息等。在Spring Boot中,我们可以通过将数据缓存到内存中来提高Web应用程序的性能。本篇博客旨在通过一个实例来介绍如

    2024年02月02日
    浏览(53)
  • 有点恐怖,这个工具能让你在 20 秒内,克隆你的声音,并转成英语!

    公众号关注 “GitHubDaily” 设为 “星标”,每天带你逛 GitHub! 在上学那会,我便一直有个想法,要是能有一个英汉自动翻译机,能把我说的话,直接翻译成英语就好了。这样,我就不需要在凌晨早起背单词语法,在操场上训练口语。 当我在「流浪地球」电影中,看到刘培强

    2024年02月08日
    浏览(46)
  • 天天crud?试试这个低代码框架

    hi, 后端的小伙伴,你是不是常常因为找不到漂亮的后台模板而烦恼?好不容易找到了一款却发现很难拓展?或者只有前端代码,而没有后端代码?那么从此你再也不用烦恼了,因为JNPF工具,它来了,而且100% 源代码交付! JNPF开发平台是一款基于 springboot+vue.js 的低代码开发

    2024年01月19日
    浏览(36)
  • swaggerUI不好用,试试这个openapiUI?

    由于长期使用 swaggerUI 工具,它的轻量风格个人觉得还是不错的,但是它的整体使用体验确实不好,用过的可能都有体会,这里就不一一列举了(由于语言表达能力有限,手动🐶保命,毕竟我在说鼻祖,等下会不会被砍😭) 开源的openapi文档redoc,由于默认的服务器在国外,

    2024年02月02日
    浏览(51)
  • 推荐试试这个简单好用的手机技巧

    技巧一:一键锁屏 除了按住手机电源键进行锁屏外,还有其他一些快捷方法可以实现锁屏操作。 对于苹果手机用户,可以按照以下步骤进行设置: 1.打开手机的设置应用,通常可以在主屏幕或应用列表中找到该图标。 2.在设置应用中查找并选择\\\"控制中心\\\"选项。这个选项可能

    2024年02月09日
    浏览(49)
  • 这个酒店管理方法太酷了!赶紧试试吧

    安全是酒店管理中最重要的优先事项之一,酒店保障住客和员工的生命安全是不可妥协的责任。为了有效预防和应对潜在的火灾风险,引入烟感监控系统是一种普遍且高效的解决方案。 烟感监控系统通过及时检测烟雾和火源,及时发出警报和采取措施,从而能够在火灾发生前

    2024年02月14日
    浏览(36)
  • 找不到合适的管理软件?试试这个万精油型的管理系统!

    无论大中小型企业,无论是否上线了ERP、OA系统等等,总是有一些局部的或非主流的需求找不到合适的管理软件来管理,因而很多人都在使用Excel来将就应对。 但是Excel在网络共享访问和查询、权限管理等方面,具有天然的劣势,所以造成许多企业都只好请专门的软件公司来开

    2024年02月13日
    浏览(38)
  • Spring与Docker:如何容器化你的Spring应用

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页 ——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础

    2024年02月09日
    浏览(30)
  • 还在被机组组合问题困扰?快来试试这个用处极大的考虑安全约束机组组合模型!

    前言 所谓安全约束机组组合,即在满足电力系统安全性约束的条件下,以系统购电成本最低等为优化目标,制定多时段的机组开停机计划。 机组组合(Unit commitment, Uc)优化问题旨在电力系统运行时,安全给定以及调整发电机组的启/停与实时出力,使发电机组的总运行成本最小

    2024年03月27日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包