我对HikariCP很陌生,我遇到了一个问题。我有一个使用hikaridaTasource从数据库获取连接的方法:
public Connection getConnection() {
try {
return dataSource.getConnection();
}
catch (SQLException ex)
{
ex.printStackTrace();
return null;
}
}
但是,当我检查pgAdmin(这是一个PostgreSQL db btw)时,我看到它没有使用空闲连接,而是创建了一堆新连接。我怎么才能修好这个?
您可以看到,在第一个图像中有19个连接,其中18个是空闲的。但是,在查询之后,会有一堆新的连接,其中大多数是空闲的。我配置Hikari错了吗?下面是我的配置:
config.setJdbcUrl("jdbc:postgresql://localhost/Postgres 13/BGWW Bot");
config.setUsername();
config.setPassword();
config.addDataSourceProperty("max_connections", "120");
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
config.setDataSource(ds);
config.setMaximumPoolSize(120);
config.setMinimumIdle(15);
最后,这里是我的一个方法,它使用来自getConnection()的连接
public float[] getReqs()
{
try (Connection conn = getConnection())
{
String getReqs = "SELECT id, swstars, swwins, swkdr FROM reqs;";
PreparedStatement stmt = conn.prepareStatement(getReqs);
ResultSet rs = stmt.executeQuery();
while(rs.next())
{
if(rs.getInt(1) == 1)
{
float[] array = new float[]{rs.getInt(2), rs.getInt(3), rs.getFloat(4)};
conn.close();
return array;
}
}
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
return null;
}
return null;
}
您的配置说明池中的连接数应该在15
和120
之间。
使用此配置,您还可以观察到更多15
处于空闲状态的连接。
属性Idletimeout
控制连接空闲一段时间(默认值为10分钟)时的退出。
null 如果我理解正确的话,我们应该在启动时有1个空闲连接,根据负载从0到3,对吗? 正在发生的情况是:启动时1个连接,如果负载较低,最多3个空闲连接,高负载后超过3个空闲连接。然后这些连接不会立即关闭,我们不知道它们何时/是否会关闭(有时它们中的一些会关闭)。 所以问题是:这种行为正常吗? DAO子类的使用示例:
在OkHttp中,我找不到设置硬最大连接池大小的方法。从留档https://square.github.io/okhttp/3.x/okhttp/okhttp3/ConnectionPool.html很明显,您可以设置最大空闲连接,但不能设置整体最大值。这意味着在高负载下,它可以增长超过任何限制。 有没有办法最大化池?如果没有,为什么没有?
> 可能是我有这个确切的问题https://github.com/brettwooldridge/hikaricp/issues/109在我的例子中,活动连接随着每个事务的增加而增加。 HikariCP-连接不可用这也是一个相同的问题。但没有人对此提供明确的解决方案。顺便说一句,我使用了begging中的。
在配置DBCP2池时,根据文档,我注意到-有一个名为timebetweenvictionrunsmillis的配置,描述如下: 空闲对象逐出器线程运行之间的Hibernate毫秒数。如果为非正,则不会运行空闲对象逐出器线程。 其默认值为-1。 这是否意味着逐出器线程永远不会在默认配置下运行?那么配置参数maxIdle是如何强制的?如果空闲连接的计数大于maxIdle,池必须退出空闲连接。 默认配置
问题内容: 我看到许多连接处于打开状态,并且很长一段时间(例如5分钟)保持空闲状态。 有什么解决方案可以在不重新启动mysql服务的情况下从服务器终止/关闭它? 我正在维护旧的PHP系统,无法关闭为执行查询而建立的连接。 我应该将my.cnf文件中的超时值减少为默认的8小时吗? 问题答案: 手动清理: 您可以杀死该进程ID。 但: php应用程序可能会报告错误(或网络服务器,请检查错误日志) 不要