spring 启动 2:actuator/health 端点需要更多时间
spring boot 2: actuator/health endpoint is taking more time
我的一项服务 /actuator/health 端点花费了更多时间(大约 9 秒)。我正在使用以下依赖项,如何调试它?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Spring 使用的引导版本: 2.0.3.RELEASE
谢谢,
哈里
基本上 health
端点的实现方式是它包含实现接口 HealthIndicator
.
的所有 Spring bean 的列表
每个健康指标负责提供关于一个子系统的健康信息(此类子系统的示例are:disk、postgres、mongo等),spring boot 带有一些预定义的 HealthIndicators。
因此,当调用 health
端点时,它会遍历此列表并获取有关每个子系统的信息,然后构造答案。
因此您可以在相关的健康指标中放置一个断点(假设您知道检查了哪些子系统)并查看会发生什么。
如果您正在寻找 HTTP 入口点 - 当您调用 http://<host-port>/health
时调用的代码(可能因您的设置而异,但您明白了)`,可以找到 here
想到的另一种方法是禁用“可疑的”健康检查并通过消除找到慢的。
例如,如果您有 elastricsearch 并想禁用它,请在 application.properties
:
中使用
management.health.elasticsearch.enabled = false
在 Mark 的回答之上,在你的 application.properties / application.yml
中设置这个 属性
management.endpoint.health.show-details=always
将有助于确定健康检查的组成部分,
因为 GET /actuator/health 将产生更多详细信息
在之上:
作为在调用 /health
端点时同步 运行 进行所有健康检查的替代方法(随着您添加更多健康检查,这只会导致执行时间越来越长),您可以使用库 spring-boot-async-health-indicator (for Spring Boot >= 2.2) 异步地使用 HealthIndicator
s 运行 注释它们 @AsyncHealth
.
除了使 /health
端点 return 立即生效(因为 returning health
s 在单独的线程上计算),它还包括每个的执行时间异步 health()
方法执行作为一个额外的细节,它极大地帮助确定哪个底层服务在生产系统上响应缓慢。
免责声明:我编写这个库是为了帮助解决现有 HealthIndicator
系统的多个限制,包括这个
我的一项服务 /actuator/health 端点花费了更多时间(大约 9 秒)。我正在使用以下依赖项,如何调试它?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Spring 使用的引导版本: 2.0.3.RELEASE
谢谢, 哈里
基本上 health
端点的实现方式是它包含实现接口 HealthIndicator
.
每个健康指标负责提供关于一个子系统的健康信息(此类子系统的示例are:disk、postgres、mongo等),spring boot 带有一些预定义的 HealthIndicators。
因此,当调用 health
端点时,它会遍历此列表并获取有关每个子系统的信息,然后构造答案。
因此您可以在相关的健康指标中放置一个断点(假设您知道检查了哪些子系统)并查看会发生什么。
如果您正在寻找 HTTP 入口点 - 当您调用 http://<host-port>/health
时调用的代码(可能因您的设置而异,但您明白了)`,可以找到 here
想到的另一种方法是禁用“可疑的”健康检查并通过消除找到慢的。
例如,如果您有 elastricsearch 并想禁用它,请在 application.properties
:
management.health.elasticsearch.enabled = false
在 Mark 的回答之上,在你的 application.properties / application.yml
中设置这个 属性management.endpoint.health.show-details=always
将有助于确定健康检查的组成部分, 因为 GET /actuator/health 将产生更多详细信息
在
作为在调用 /health
端点时同步 运行 进行所有健康检查的替代方法(随着您添加更多健康检查,这只会导致执行时间越来越长),您可以使用库 spring-boot-async-health-indicator (for Spring Boot >= 2.2) 异步地使用 HealthIndicator
s 运行 注释它们 @AsyncHealth
.
除了使 /health
端点 return 立即生效(因为 returning health
s 在单独的线程上计算),它还包括每个的执行时间异步 health()
方法执行作为一个额外的细节,它极大地帮助确定哪个底层服务在生产系统上响应缓慢。
免责声明:我编写这个库是为了帮助解决现有 HealthIndicator
系统的多个限制,包括这个