onk*_*roh 10 spring threadpool spring-boot spring-boot-actuator
是否可以像health在“主”应用程序的单独线程池中那样处理执行器请求?
我为什么要问?我有一个应用程序,有时可能会用完所有可用线程,并且 Kubernetes 运行状况检查由于线程不可用来计算运行状况端点请求而失败。
我想确保无论应用程序承受多少负载,都会处理每个运行状况请求。
我正在考虑为执行器定义一个单独的线程池来操作,但我不知道如何做到这一点。
在 Kubernetes 中运行时,我们的一些应用程序也遇到了类似的问题。我们研究了创建多个 tomcat 连接器和更改 spring 管理端口以获得所需效果的不同方法,但从未完全理解。
最后,我们解决了问题的根源,即 Pod 内的资源匮乏。我们发现遇到健康检查超时的应用程序有很多用于各种 3rd 方线程池的额外线程。在某些情况下,我们有接近 500 个线程的应用程序,因此即使在我们认为中等负载的情况下,tomcat 池也会饿死并且无法处理新请求。
FWIW,我们发现的最大罪魁祸首是CPU 请求对 pod 和 JDK 的影响。当我们没有设置任何请求时,JDK 会在查询处理器数量时看到节点上的每个 CPU 。我们发现在 Java 生态系统中有很多地方使用处理器数量来初始化不同的线程池。
在我们的例子中,每个节点有 36 个处理器,我们发现大约 10-12 个线程池使用这个数字来确定大小……不难看出应用程序如何快速增长到 500 个线程。
| 归档时间: |
|
| 查看次数: |
1802 次 |
| 最近记录: |