gpt4 book ai didi

spring-boot - Spring Boot : Thread pool for serving requests on Management port

转载 作者:行者123 更新时间:2023-12-04 08:51:40 26 4
gpt4 key购买 nike

在 Kubernetes 集群中运行时,我们使用 Spring Boot 执行器来公开事件和就绪端点。默认情况下,spring-boot 执行器在默认标准 HTTP 服务器端口上公开端点,其中请求由 Tomcat/Jetty 服务器接受器和工作线程池提供服务。我们最近在压力测试期间遇到了一个问题,即工作池中的所有线程都很忙,新请求正在排队。这导致 Pod 在 Kubernetes 集群中崩溃,因为活性探针开始失败。
我正在考虑在管理端口上暴露执行器。我想检查以下内容
a) 管理端口上的请求是否为单独的工作线程池提供服务(与标准服务器端口的请求不同)?
b) 如果 a) 的答案是否定的,有没有办法可以配置 spring boot 以使用单独的线程池作为管理端口(我们在不同的微服务中使用 tomcat/jetty 和响应式(Reactive) netty 服务器)

最佳答案

是的,如果您指定不同的管理端口,Spring/Tomcat 将使用单独的线程池来为该端口上的请求提供服务。
例如。如果你指定这样的东西是你的配置:

server.port=8080
management.server.port=8081
server.tomcat.threads.max=10
端口 8080 上的常规请求将由来自标准线程池的线程提供服务,该池总共有 10 个线程 ( server.tomcat.threads.max )。您将在日志中看到线程名称,如下所示:
... nio-8080-exec-<number from 1 to 10>..
管理/健康检查线程将由来自不同线程池的线程提供服务,线程池的总大小也为 10。您将在日志文件中看到这些线程,如下所示:
... nio-8081-exec-<number from 1 to 10>..
注意:这样做可能会解决您的健康检查失败导致 pod 重新启动的问题,但是它可能无法解决您在流量激增时占用所有工作线程的根本原因。也许您需要研究诸如速率限制之类的东西来处理这种情况,因此您的服务不会获得超出其处理能力的流量。

关于spring-boot - Spring Boot : Thread pool for serving requests on Management port,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64069593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com