尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
springboot启动耗时分析
一、 简介项目优化首先要定位慢在哪里。记录下几个方法。官方的ApplicationStartup的实现类BufferingApplicationStartupFlightRecorderApplicationStartup以及第三方利用ApplicationStartup的工具。对比下来直接用工具更加直观也更方便。二、官方实现的ApplicationStartup 接口Spring Boot 提供了BufferingApplicationStartup、FlightRecorderApplicationStartup两种实现也支持自定义实现该接口。2.1 BufferingApplicationStartup记录启动时各阶段的耗时。使用方法修改启动类publicstaticvoidmain(String[]args){SpringApplicationappnewSpringApplication(SpringbootApplication.class);// 核心设置缓冲区大小比如记录最近 4096 个步骤app.setApplicationStartup(newBufferingApplicationStartup(4096));app.run(args);}打印日志AutowiredprivateBufferingApplicationStartupstartup;GetMapping(/an)publicvoidgetAnalyzer(){AutowiredprivateBufferingApplicationStartupstartup;GetMapping(/an)publicvoidgetAnalyzer(){StartupTimelinetimelinestartup.getBufferedTimeline();// 2. 计算总耗时System.out.println(应用总启动耗时: timeline.getStartTime().toString());// 3. 遍历具体的启动步骤找出最耗时的步骤timeline.getEvents().forEach(event-{longdurationevent.getDuration().toMillis();StartupStepstartupStepevent.getStartupStep();// 只打印耗时超过 600ms 的步骤if(duration100){if(spring.beans.instantiate.equals(startupStep.getName())){for(StartupStep.Tagtag:startupStep.getTags()){if(beanName.equals(tag.getKey())){System.out.println(耗时步骤: startupStep.getName():tag.getValue() 耗时: duration ms);}}}else{System.out.println(耗时步骤: startupStep.getName() 耗时: duration ms);}}});}}日志如下从日志中可以看到关键步骤的耗时以及每个 bean 的创建时间。2.2 FlightRecorderApplicationStartup记录每个bean创建的细节使用方法1、修改启动类publicstaticvoidmain(String[]args){SpringApplicationappnewSpringApplication(SpringbootApplication.class);// 核心设置缓冲区大小比如记录最近 4096 个步骤app.setApplicationStartup(newFlightRecorderApplicationStartup());app.run(args);}2、添加jvm参数java -XX:StartFlightRecording:filenamerecording.jfr,duration60s -jar demo.jar3、启动项目启动成功会本地会生成文件 recording.jfr4、查看内容为什么没有内容我也不知道。试了几个不同方法都不行。谁知道的教教我。三、自定义ApplicationStartup无有这个功能。但是不需要会。已经有现成的工具了下面介绍四、外部工具目前只了解到spring-startup-analyzer后面收到再补充4.1 spring-startup-analyzer它的核心思路是在启动过程中挂载自定义ApplicationStartup实现收集所有StartupStep的耗时数据再在启动结束后汇总成可视化报告因此对业务代码基本无侵入。相比 Spring Boot 自带的ApplicationStartupspring-startup-analyzer 提供的信息更全面不仅能看单个 bean 的创建时间还能做数量统计、方法耗时统计和 jar 包加载统计适合排查「启动慢到底慢在哪」这类问题.使用方法下载最新版本的 jar 包或直接 clone 源码后本地打包。下载链接https://gitcode.com/gh_mirrors/sp/spring-startup-analyzer解压后有五个文件夹应用在liblog有启动日志在启动命令中通过-javaagent挂载该 agentjava-javaagent:/path/to/spring-startup-analyzer.jar\-jaryour-application.jaridel 中可在vm option中添加5. 应用启动完成后agent 会自动生成分析报告并在控制台打印报告文件的访问地址6. 打开报告页面即可查看各阶段耗时、bean 创建明细、方法调用统计和 jar 加载情况。页面说明1、指标数据总耗时总bean数总jar包引入未使用的包类加载器不知道干啥的2、bean耗时排序展示耗时最长的bean支持过滤。3、启动时序图3、调用方法统计方法名次数耗时占比展开详情一些其他配置-Dspring-startup-analyzer.app.health.check.endpointshttp://127.0.0.1:8081/actuator/health手动指定健康节点总结工具好用一点能找到最慢的几个类esbAppHeadResourceResolverbraveHttpServerHandler需要优化的话可以重点关注杂记esbAppHeadResourceResolver 看了下代码会重新扫描项目下包找到配置了对应注解的类。缓存到内存中。时间几乎花在重新扫描上。可以的话这个地方能优化下。
RELATED

相关推荐

2026东营消费品检测第三方公司排行榜TOP5:日用品质检+材质安全检测+电商入驻检测+产品质检报告 机构地址及联系方式推荐

2026东营消费品检测第三方公司排行榜TOP5:日用品质检+材质安全检测+电商入驻检测+产品质检报告 机构地址及联系方式推荐

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/6 8:58:48
栈的应用妙招:五道题秒解字符串难题

栈的应用妙招:五道题秒解字符串难题

栈是我们之前学过的一种容器,针对特定的题型,这种容器能让我们更快地解决问题 1.删除字符串中的所有相邻重复项 题目来源:1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode) 这道题有点像俄罗斯方块那个游戏&…

📅 2026/11/6 8:58:48
2026年WorkBuddy培训公司哪家靠谱?岗位顺序怎么排

2026年WorkBuddy培训公司哪家靠谱?岗位顺序怎么排

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/6 8:58:48
MORE NEWS

更多资讯

📰

Orange 安装避坑指南:Python 版本选择与依赖管理

简介:Orange 是一款面向数据挖掘与机器学习初学者及进阶用户的开源可视化分析套件,以组件化拖拽式编程降低建模门槛,适合需要快速完成数据预处理、可视化探索与模式评估的实践者。压缩包共约2000个文件,以1031个png界面截图、951个…

📰

众包最少答案数估算:一致性、置信度与预采样实践

简介:这份资源围绕众包系统中最少答案数量的估计问题展开,面向众包平台设计者、数据质量管理者以及学习Java统计建模的开发者,帮助判断在保证结果可靠性的前提下需要收集多少份回答。项目以Java实现核心算法,涵盖任务难度分类、工…

📰

主模式RTL设计:状态机与三态驱动的物理实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Powershell远程管理服务器客户端

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Java 开发日记高级~

Java.慈祥的开发日记 Java基础语法 SSM学习专栏 JDK8 新特性 Linux服务器开发使用 环境搭建🤖 Linux 基础入门学习 Docker K8S部署使用 Docker入门学习Docker网络 Git 和 Github 项目管理工具 分布式版本控制系统Git分布式版本控制系统Git 二:…

📰

ST-LINK Utility V2.37.26离线工具包深度解析

简介:本资源是STMicroelectronics官方发布的STLink固件更新工具STSW-LINK007 V2-37-26完整安装包,专为STM32/STM8嵌入式开发者设计,解决调试器固件过旧导致的IDE兼容性下降、新MCU型号不识别、编程失败或连接不稳定等实际问题。压缩包共18个文…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬