缩减 pod 时 HIkari 池耗尽

问题描述 投票:0回答:1
我有一个在 K8s 集群中运行的 Spring 应用程序。每个 Pod 在 Hikari 池中配置有 3 个连接,并且它们大多数时候使用 1 或 2 个活动连接,偶尔使用所有 3 个连接(最大池大小),与此配置完美配合。然而,当 Pod 缩小时,一切都会改变。其余 pod 开始遭受 Hikari 池耗尽的困扰,导致尝试获取连接时出现多次超时,并且每个 pod 最终有 6 到 8 个待处理连接。这种情况持续5到12分钟,之后一切又恢复稳定。

PS:我的缩减规模配置为按时间只减少一个 Pod。

您知道解决此问题的方法吗?

我考虑过但放弃的事情:

    我不认为增加 Hikari 池大小是解决方案,因为我的应用程序可以在当前设置下正常运行。该问题仅发生在缩小间隔期间。
  • 我检查了这些场景下的CPU和内存使用情况,它们并没有失控;它们低于阈值。 预先感谢。
kubernetes jvm hikaricp hpa
1个回答
0
投票
一旦活动连接数达到maximumPoolSize,池就会耗尽,无法再满足应用程序对连接的需求。要配置

Hikari 连接池,您可以使用 application.properties 文件

spring.datasource.hikari.connectionTimeout=30000(30秒) spring.datasource.hikari.idleTimeout=500000(50秒) spring.datasource.hikari.maxLifetime=1200000(2分钟)

如你所需要

spring.datasource.hikari.connectionTimeout 通过使用此属性,我们可以更改连接池的行为。

此属性控制您等待池中连接的最大毫秒数。如果超过此时间而没有可用连接,则会抛出 SQLException。可接受的最低连接超时为 250 毫秒。默认值:30000(30 秒)。应用于 getConnection() 的 connectionTimeout 与新连接的创建分离,并且会阻塞。

idleTimeout 有助于在更高的需求负载后减小池大小。

maxLifetime 确保定期回收连接以避免原始连接,both(idleTimeout,maxLifetime) 将关闭连接,池最终将返回连接。

注意:Pgpool-II 将自动处理连接池。您可以在 pgpool.conf 文件中调整池大小和其他参数。另请参阅类似的 github 问题。

© www.soinside.com 2019 - 2024. All rights reserved.