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) 异步地使用 HealthIndicators 运行 注释它们 @AsyncHealth.

除了使 /health 端点 return 立即生效(因为 returning healths 在单独的线程上计算),它还包括每个的执行时间异步 health() 方法执行作为一个额外的细节,它极大地帮助确定哪个底层服务在生产系统上响应缓慢。

免责声明:我编写这个库是为了帮助解决现有 HealthIndicator 系统的多个限制,包括这个