当前位置: 首页 > 知识库问答 >
问题:

Spring启动 2:执行器/运行状况endpoint需要更多时间

方心思
2023-03-14

我的一个服务/执行器/健康endpoint花费了更多时间(大约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

谢谢,哈里

共有3个答案

谯和煦
2023-03-14

除了马克的精彩回答:

作为在调用 /health 终结点时同步运行所有运行状况检查的替代方法(这只会随着您添加更多运行状况检查而导致执行时间越来越长),您可以使用库Spring启动异步运行状况指示器(对于Spring启动)使 HealthIndicator异步运行

除了使 /health endpoint立即返回(如在单独的线程上计算的返回运行状况)之外,它还包括每个异步 health() 方法执行的执行时间作为附加详细信息,这极大地有助于确定哪个基础服务在生产系统上响应缓慢。

免责声明:我编写此库是为了帮助解决现有运行状况指示器系统的多个限制,包括此限制

高建本
2023-03-14

根据Mark的回答,在application . properties/application . yml中设置该属性

management.endpoint.health.show-details=always

将有助于确定哪些组件构成健康检查,因为GET /actuator/health将产生更多详细信息

卫劲
2023-03-14

基本上,运行状况终结点的实现方式是,它包含实现接口 HealthIndicator 的所有Spring Bean 的列表。

每个运行状况指示器负责提供有关一个子系统的运行状况信息(此类子系统的示例包括:磁盘、postgres、mongo 等),Spring启动附带一些预定义的运行状况指示器。

因此,当调用运行状况终结点时,它会循环访问此列表并获取有关每个子系统的信息,然后构造答案。

因此,您可以在相关的健康指标中放置一个断点(假设您知道检查了哪些子系统),看看会发生什么。

如果您正在寻找HTTP切入点-调用超文本传输协议时调用的代码://

我想到的另一种方法是禁用“可疑”的健康检查,并通过消除找到缓慢的检查。

例如,如果您有一个弹性搜索并希望禁用它,请在应用程序.properties 中使用:

management.health.elasticsearch.enabled = false

 类似资料:
  • 我正在我的项目中使用模块,该模块公开了要监视的RESTendpointURL 默认情况下,仅公开 和 终结点。 根据我的使用案例,我正在通过< code > application . properties 文件自定义endpoint。 我想了解,Spring启动究竟在哪里为和创建实际的endpoint,以及它如何通过HTTP公开它们?

  • 我试图在我的spring boot应用程序中公开/actuator/healthendpoint,但我的日志表明没有公开任何endpoint。我看过一些文档,其中指出健康endpoint是默认启用的唯一endpoint,但它为我返回404。 从应用程序启动的日志: 访问 /actuator 还显示未公开任何endpoint: 我看了其他几个类似的帖子,但是没有一个补丁对我有效。我在@RestCon

  • 我有一个带有Spring Security微服务的Spring Boot 2,我已使用米计/Spring Actuator配置了该微服务。当我在antMatcher("/驱动器/**")endpoint上permitAll()时,一切都很好。我能够通过正确配置的Prometheus yaml文件检索Prometheus指标。 但是,我的微服务不在防火墙后面,因此对世界开放。我只希望普罗米修斯能够访

  • 在我的Spring Boot应用程序(2.0.0.M7)中。我设置的属性 然而,当我击中 我得到404。 解决办法是什么?

  • 我有一个spring boot rest api项目--我无法使spring boot执行器/健康endpoint工作。当我尝试转到localhost:8080/health时,它就会出现一个“白标签错误页面”。我尝试向我的application.properties添加各种属性,但似乎都不起作用--我不需要任何自定义映射或对执行器endpoint的身份验证。下面是我的建筑。格拉德尔-有什么建议吗

  • 在我的项目中,我不想使用。我的application.java有、和注释。 我在pom.xml中添加了Spring Boot执行器依赖项。但是,当我尝试访问时,得到的是404。我相信我需要指定一些配置类作为导入注释的一部分。我需要帮助弄清楚配置是什么。