为了账号安全,请及时绑定邮箱和手机立即绑定

RESOURCE_EXHAUSTED 池中没有可用的会话

RESOURCE_EXHAUSTED 池中没有可用的会话

慕姐8265434 2021-11-03 16:53:19
我正在使用 Java 的 Spanner 客户端库,并使用 Spring 配置客户端。过了一会儿,应用程序开始记录以下消息,但我不明白为什么。应用程序的并发性是最小的。似乎会话没有重用。有什么建议 ?RESOURCE_EXHAUSTED:池中没有可用的会话。可以通过调用 SessionPoolOptions#Builder#setMaxSessions 来覆盖池中的最大会话数。通过设置 SessionPoolOptions#Builder#setBlockIfPoolExhausted,可以使客户端阻塞而不是失败。@Configurationpublic class SpannerConfig {    @Value("${datasource.instanceId}")    private String instance;    @Value("${datasource.databaseId}")    private String database;    @Bean    public Spanner spannerService() throws IOException {        SessionPoolOptions sessionPoolOptions = SessionPoolOptions.newBuilder()                .setFailIfPoolExhausted()                .setMinSessions(5)                .setMaxSessions(100)                .build();        SpannerOptions options = SpannerOptions.newBuilder()                .setSessionPoolOption(sessionPoolOptions)                .build();        return options.getService();    }    @Bean    public DatabaseClient spannerClient(Spanner spannerService) {        DatabaseId databaseId = DatabaseId.of(spannerService.getOptions().getProjectId(), instance, database);        return spannerService.getDatabaseClient(databaseId);    }}
查看完整描述

2 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

听起来您有会话泄漏。确保您在任何 DatabaseClient.singleUse* 或 DatabaseClient.ReadOnlyTransaction 调用周围使用 try-with-resources 表达式,以确保事务或 ResultSet 关闭,从而允许将相应的会话返回到会话池。


查看完整回答
反对 回复 2021-11-03
?
长风秋雁

TA贡献1757条经验 获得超7个赞

您正在设置的设置.setMaxSessions(100)显然超出了预定义的限制。

原则上,当一个客户端已经分配了100,下一个客户端只能分配0

文件为会议内容如下:

注意:Cloud Spanner 客户端库自动管理会话。

...阅读源代码后,我确定错误消息仅在使用.setFailIfPoolExhausted(). 它报告一个耗尽的池,可能是一个错误,以防 StackDriver 监控告诉相反的情况。


查看完整回答
反对 回复 2021-11-03
  • 2 回答
  • 0 关注
  • 305 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信