【发布时间】:2020-02-07 15:56:42
【问题描述】:
上下文
我在 Cloud Run 上运行 SpringBoot 应用程序,该应用程序使用 Hikari 连接池连接到 postgres11 CloudSQL 数据库。我正在使用最小的 PSQL 实例(1vcpu/614mb/25connection 限制)。对于设置,我遵循了以下资源:
Connecting to Cloud SQL from Cloud Run
问题
部署第三个修订版后,我收到以下错误:
FATAL: remaining connection slots are reserved for non-replication superuser connections
我发现了什么
默认连接池大小为 10,因此它在第三次部署时失败 (30 > 25)。
删除旧版本时,Cloud SQL 管理面板中显示的活动连接数减少 10,下一次部署成功。
问题
看来,旧的 Cloud Run 修订版被保持在“冷”状态,维护它们的连接池。有没有办法在不删除修订的情况下关闭这些连接?
在best practices 部分它说:
...我们建议您使用支持自动重新连接断开的客户端连接的连接池的客户端库。”
在 Cloud Run 中管理连接池的推荐方法是什么,因为旧版本似乎设法以某种方式维持它们的连接?
谢谢!
【问题讨论】:
-
您是如何在代码中处理这些连接的?如果它们不被使用或它们始终处于活动状态,你会正确关闭它们吗?
-
您好,连接池由 Hikari (github.com/brettwooldridge/HikariCP) 管理。目前,除了在启动时运行的迁移(flyway)之外,我没有从代码访问数据库。 AFAIK Hikari 尝试维护配置的连接数(默认 = 10),即使应用程序未使用它们。因此,为了回答您的问题,我假设他们仍然活跃。
-
Cloud Run 不会做任何事情来通知您的应用程序,因此,软件关闭挂钩将不起作用。对于云运行,打开连接和关闭连接。不要期望连接池等按预期工作。恕我直言,文档不应该推荐 Cloud Run 的连接池,除非是长时间运行的应用程序,即使这样,您也应该能够编写遵循打开然后关闭原则的代码。
标签: postgresql google-cloud-platform google-cloud-sql hikaricp google-cloud-run