开发者社区> 问答> 正文

phoenix链接有大量CLOSE_WAIT

最近公司在大规模应用phoenix,在应用phoenix的过程中,发现客户端的链接有大量CLOSE_WAIT状态,无法释放导致服务器资源耗尽,影响应用程序。我采用简单的jdbc连接,并在finally中关闭该连接。查询相关资料,CLOSE_WAIT是服务端已关闭了链接,但客户端未关闭该连接。但看代码应该是已经关闭了链接,所以不知道为啥,链接一直保持在该状态。代码如下,希望可以得到大神的指点。

try { String pageQuerySql = "select * from TABLE1" Class.forName("org.apache.phoenix.queryserver.client.Driver"); log.info("phoenix query server 驱动加载成功! "); connection=DriverManager.getConnection("jdbc:phoenix:thin:url=http://8.99.5.188:8765;serialization=PROTOBUF"); log.info("phoenix query server 连接创建成功! "); statement = connection.createStatement(); resultSet= statement.executeQuery(pageQuerySql); connection.commit(); } } catch (Exception e) { log.error("execute sql=[{}] happen error=[{}]", pageQuerySql, e.getMessage()); throw new DataSourceException(String.format("sql=%s, error message=%s", pageQuerySql, e.getMessage())); } finally { if(StringUtils.equalsIgnoreCase(jdbcStrategyDto.getDbType(), StrategyConstants.Service.PHOENIX_NAME)){ try { if(resultSet != null){ resultSet.close(); } } catch (SQLException throwables) { throwables.printStackTrace(); log.error("phoenix resultSet关闭失败!{}",throwables.getMessage(),throwables); } try { if(statement != null){ statement.close(); } } catch (SQLException throwables) { throwables.printStackTrace(); log.error("phoenix statement关闭失败!{}",throwables.getMessage(),throwables); } try { if(connection != null){ connection.close(); } } catch (SQLException throwables) { throwables.printStackTrace(); log.error("phoenix connection关闭失败!{}",throwables.getMessage(),throwables); } log.info("phoenix连接关闭成功!"); }else{ HikariDataSourcePoolUtils.closeSession(connection, preparedStatement, resultSet); } }

展开
收起
bwvronx5gleim 2021-06-21 17:57:16 725 0
0 条回答
写回答
取消 提交回答
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载