spring-boot 启动耗时分析

https://github.com/linyimin0812/spring-startup-analyzer/blob/main/README_ZH.md

### 分析和优化 Spring Boot 应用的启动耗时 #### 使用内置工具分析启动时间 Spring Boot 提供了多种方式来诊断应用启动期间的行为。通过启用 `spring-boot:actuator` 并配置 `management.endpoint.metrics.enabled=true` 可以获取详细的度量数据,这有助于识别哪些组件消耗了大量的初始化时间[^1]。 对于更细粒度的时间剖析,可以利用 `-Ddebug` 或者 `-Dtrace` 参数运行程序;前者会打印出更多的调试信息到控制台日志中,后者则记录下每次HTTP请求处理链路内的执行路径详情。另外,借助于JVM自带的命令行工具如 jstat, jstack 来监控垃圾回收活动以及线程状态也是不错的选择[^2]。 #### 减少依赖扫描范围 默认情况下,Spring Boot 的自动配置机制会对classpath下的所有jar进行扫描并尝试加载相应的bean定义。如果项目中有许多不必要的第三方库被引入进来,则可能导致类加载器花费过多资源去解析这些无用的信息。为了改善这一点,建议开发者仔细审查项目的pom.xml文件(Maven)或是build.gradle (Gradle),移除那些不必要或者已经废弃不用的依赖项,并考虑采用懒加载模式延迟实例化非核心业务逻辑相关的beans直到真正需要用到它们的时候再创建出来。 #### 调整配置属性 合理设置一些特定的关键参数同样能够有效缩短冷启动所需耗费的时间长度: - **server.port=0**: 让内嵌Tomcat随机分配端口号而非固定指定一个值; - **spring.main.lazy-initialization=true**: 开启全局级别的懒加载开关使得大部分服务对象仅当第一次访问对应接口API时才会按需构建起来而不是一开始就全部准备好等待调用; - **spring.devtools.restart.include/exclude**: 如果开启了热重载功能的话可以通过此选项精确控制哪些目录结构应该纳入/排除在重启监视范围内从而加快增量编译的速度. ```yaml # application.yml example server: port: 0 spring: main: lazy-initialization: true devtools: restart: include: /path/to/include/** exclude: /path/to/exclude/** ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值