首页/新闻资讯/正文详情

springboot启动耗时分析

发布时间:2026/11/6 8:58:18 来源:云帆数科 栏目:资讯中心
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 看了下代码会重新扫描项目下包找到配置了对应注解的类。缓存到内存中。时间几乎花在重新扫描上。可以的话这个地方能优化下。

相关推荐

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:18

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

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

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:18

基于CDC的MySQL实时数据同步方案实践
基于CDC的MySQL实时数据同步方案实践

1. 项目背景与核心价值 在数据驱动的业务场景中,数据库表间数据同步是个高频需求。我最近在电商订单系统中就遇到了这个问题:订单主表数据变更后,需要实时同步到统计分析表和风控表。传统的手动同步或定时任务方式存在延迟高、易出错的问题&a… · 2026/11/6 14:00:34

JSP农贸交易系统开发与智能撮合算法实践
JSP农贸交易系统开发与智能撮合算法实践

## 1. 项目概述与核心价值农贸产品交易系统是连接农产品生产端与消费端的重要数字化桥梁。这个基于JSP技术的交易平台(项目编号g3608)完整包含了程序源码、数据库设计、部署指南和开发环境配置,是一套开箱即用的农产品B2B解决方案。我在参与某… · 2026/11/6 14:00:34

2025年3D建模工具选型实战指南:按工作流断点匹配生产力
2025年3D建模工具选型实战指南:按工作流断点匹配生产力

1. 这不是选软件,是选你未来三年的“数字手”——为什么2025年建模工具选择比以往任何时候都更关键 2025年做3D建模,你面对的早已不是“用哪个软件画个模型”这么简单的事。它直接决定你能不能接单、能不能按时交付、能不能把想法一秒变现实、甚至决定你… · 2026/11/6 14:00:34

Qt飞机大战源码解析:QGraphicsView游戏循环与碰撞检测实战
Qt飞机大战源码解析:QGraphicsView游戏循环与碰撞检测实战

简介:这份资源是面向Qt初学者与游戏开发入门者的「飞机大战」完整项目源码包,围绕Qt框架在经典空战游戏中的实际应用展开,可用于课程设计、自学练手或二次开发参考。压缩包共223个文件,约6.21MB,以105个C头文件与32个c… · 2026/11/6 14:00:34

老旧CMS的XSS与getshell风险防护及应急治理
老旧CMS的XSS与getshell风险防护及应急治理

项目中遇到过不少次类似的场面:群里忽然冒出一条消息,标题写得耸人听闻,核心关键词是 XSS 、 0day 、 通杀所有版本 ,还带着一个"可 getshell"的尾巴,配图往往是半个命令行窗口。消息传得飞快&#xf… · 2026/11/6 13:56:30

BOM多视图与版本基线:NX装配映射、大树性能及状态权限实践
BOM多视图与版本基线:NX装配映射、大树性能及状态权限实践

BOM 这两个字,在研发产品设计管理平台这个圈子里出现频率极高,但真正把它做扎实的项目并不多。我参与过的这套基于 NX 的平台,第一版已经把设计 BOM 从三维装配里抽了出来,能按树展开、能导出表格、能看图号,当时团队觉… · 2026/11/6 13:56:30

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* 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 10:29:23

三菱PLC数据采集到数据库的时序设计:Python+MC协议实战
三菱PLC数据采集到数据库的时序设计:Python+MC协议实战

/* 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 1:02:11

ASIC主模式RTL设计:状态机与三态驱动的流片级实现
ASIC主模式RTL设计:状态机与三态驱动的流片级实现

/* 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 1:02:11

STM32嵌入式C++开发:GDB调试与Renode仿真实战指南
STM32嵌入式C++开发:GDB调试与Renode仿真实战指南

/* 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 1:02:11

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* 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 10:29:23

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码