Bas*_*ein 5 postgresql google-cloud-sql google-cloud-platform hikaricp google-cloud-run
语境
我正在 Cloud Run 上运行 SpringBoot 应用程序,该应用程序使用 Hikari 连接池连接到 postgres11 CloudSQL 数据库。我使用的是最小的 PSQL 实例(1vcpu/614mb/25 连接限制)。对于设置,我遵循了以下资源:
问题
部署第三个修订版后,出现以下错误:
FATAL: remaining connection slots are reserved for non-replication superuser connections
我发现了什么
默认连接池大小为 10,这就是为什么它在第三次部署时失败 (30 > 25)。
删除旧版本时,Cloud SQL 管理面板中显示的活动连接数会减少 10,并且下一次部署会成功。
问题
看来,旧的 Cloud Run 修订版一直处于“冷”状态,以维护其连接池。有没有办法关闭这些连接而不删除修订?
在最佳实践部分,它说:
...我们建议您使用支持连接池的客户端库,该连接池可以自动重新连接断开的客户端连接。”
鉴于旧版本似乎以某种方式设法维护其连接,在 Cloud Run 中管理连接池的推荐方法是什么?
谢谢!
目前,Cloud Run 不保证启动后能保持多长时间。不使用时,实例会因不一定关闭而受到严重限制。因此,即使没有定向流量,您也有一些修改会阻止连接。
即使在这种情况下,我也不同意您应该避免使用连接池的想法。连接池可以降低延迟、提高稳定性,并有助于限制打开连接的数量。或者,您可以使用以下一些配置选项来帮助控制池:
minimumIdle
- 此属性控制 HikariCP 尝试在池中维护的最小空闲连接数。如果空闲连接低于此值并且池中的总连接数小于 MaximumPoolSize,HikariCP 将尽最大努力快速有效地添加其他连接。
maximumPoolSize
- 此属性控制池允许达到的最大大小,包括空闲连接和正在使用的连接。
idleTimeout
- 此属性控制允许连接在池中空闲的最长时间。此设置仅适用于minimumIdle 定义为小于maximumPoolSize 的情况。一旦池达到最小空闲连接数,空闲连接就不会被终止。
如果设置minimumIdle
为 0,您的应用程序仍然可以maximumPoolSize
同时使用最多连接。但是,一旦连接在池中空闲了几idleTimeout
秒钟,它就会被关闭。如果你设置idleTimeout
为较小的值(例如 1 分钟),则池中正在使用的连接数将在不使用时缩减至 0。
希望这可以帮助!
归档时间: |
|
查看次数: |
1348 次 |
最近记录: |