Skip to content
linyimin edited this page Dec 31, 2023 · 2 revisions

1. 分析能力

1.1 安装jar包

提供了手动安装和一键脚本安装两种安装方式 

  1. 手动安装

    • 点击realease下载最新版tar.gz包

    • 新建文件夹,并解压

  2. 脚本安装(linux/mac)

脚本默认安装路径:$HOME/spring-startup-analyzer

curl -sS https://raw.githubusercontent.com/linyimin0812/spring-startup-analyzer/main/bin/install.sh | sh

1.2 相关配置

本项目提供了以下几个配置项,不是必需配置项,可以直接使用默认配置。两种方式进行配置:

  1. 直接在配置文件中配置: 安装路径/spring-startup-analyzer/config/spring-startup-analyzer.properties
  2. 在启动参数中配置,如应用启动健康检查超时时间为30分钟:-Dspring-startup-analyzer.app.health.check.timeout=30

相关配置:

配置项 说明 默认值
spring-startup-analyzer.app.health.check.timeout 应用启动健康检查超时时间,单位为分钟 20
spring-startup-analyzer.app.health.check.endpoints 应用启动成功检查url,可配置多个,以","分隔 http://127.0.0.1:7002/actuator/health
spring-startup-analyzer.admin.http.server.port 管理端口 8065
spring-startup-analyzer.async.profiler.sample.thread.names async profiler采集的线程名称,支持配置多个,以","进行分隔 main
spring-startup-analyzer.async.profiler.interval.millis async profiler采集间隔时间(ms) 5
spring-startup-analyzer.linux.and.mac.profiler 指定linux/mac下火焰图采样器:async_profiler/jvm_profiler jvm_profiler
spring-startup-analyzer.invoke.count.methods 需要统计调用信息的方法 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(java.lang.String,org.springframework.beans.factory.support.RootBeanDefinition,java.lang.Object[])

需要注意的是,判断应用启动成功的逻辑是: 

  1. 对SpringApplication.run方法进行字节码增强,方法退出时则认为应用启动完成(仅对springboot应用生效)
  2. 轮询请求健康检查的url,返回200则认为启动完成(适用于所有spring应用)
  3. 以上两种方式均未成功时,超出应用启动健康检查超时时间则认为应用启动完成  如果是非springboot应用,需要通过spring-startup-analyzer.app.health.check.endpoints配置一下健康检查URL。

1.3 应用启动

此项目是以agent的方式启动的,所以在启动命令中添加参数-javaagent:安装路径/spring-startup-analyzer/lib/spring-profiler-agent.jar

  • 以java命令行的方式启动应用,则在命令行中添加参数,例如:
java -javaagent:/Users/runner/spring-startup-analyzer/lib/spring-profiler-agent.jar \ 
-Dproject.name=mac-demo \     
-Dspring-startup-analyzer.admin.http.server.port=8066 \     
-jar /Users/runner/spring-startup-analyzer/spring-boot-demo.jar
  • IDEA中启动,则需要在VM options选项中添加
-javaagent:/Users/runner/spring-startup-analyzer/lib/spring-profiler-agent.jar

日志文件路径:安装路径/spring-startup-analyzer/logs

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

应用启动完成后会在console和startup.log文件中输出======= spring-startup-analyzer finished, click http://localhost/:xxxx to visit details. ======,可以通过此输出来判断采集是否完成。

2. 启动优化

2.1 Spring Bean异步加载

  1. 添加pom依赖
<dependency>
    <groupId>io.github.linyimin0812</groupId>
    <artifactId>spring-async-bean-starter</artifactId>
    <version>${latest_version}</version>
</dependency>
  1. application.properties中配置异步加载信息
# 异步化的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

2.2 热加载

  1. release下载spring-startup-cli
  2. 在项目的工作目录(HOME)下执行此命令行工具
java -jar spring-startup-cli.jar
  1. 使用config命令配置相关信息
config set
  1. 编码完成后执行reload命令,即可完成热加载

Clone this wiki locally