Рубрики
Без рубрики

HikariPool-1 – Соединение недоступно, время ожидания запроса истекло через 30002 мс.

– HikariPool-1 – Соединение недоступно, время ожидания запроса истекло через 30002 мс.

После некоторых SQL-запросов система не может получить какое-либо соединение от HikariPool и выводит следующее сообщение об ошибке

HikariPool-1 - Connection is not available, request timed out after 30002ms.

Протестировано с

  • ХикариКП 3.3.1
  • mysql-соединитель-java 5.1.47
  • Java 8

1. Решение

1.1 Включите журналы отладки для com.zaxxer.hikari , он распечатает много полезной информации.

	
	
        
    
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - HikariPool-1 - configuration:
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - allowPoolSuspension.............false
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - autoCommit......................true
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - catalog.........................none
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - connectionInitSql...............none
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - connectionTestQuery.............none
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - connectionTimeout...............30000
//...
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - jdbcUrl.........................jdbc:mysql://192.168.1.4:3306/wordpress
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - leakDetectionThreshold..........0
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - maxLifetime.....................1800000
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - maximumPoolSize.................1
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - metricRegistry..................none
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - metricsTrackerFactory...........none
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - minimumIdle.....................1
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - password........................
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - poolName........................"HikariPool-1"
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - readOnly........................false
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - registerMbeans..................false
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - scheduledExecutor...............none
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - schema..........................none
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - threadFactory...................internal
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - transactionIsolation............default
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - username........................"mkyong"
2019-03-20 13:46:23 [main] DEBUG com.zaxxer.hikari.HikariConfig - validationTimeout...............5000

2019-03-20 13:47:25 [main] DEBUG com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Timeout failure stats (total=10, active=10, idle=0, waiting=0)
2019-03-20 13:47:25 [main] ERROR c.mkyong.calculator.StartApplication - [Exception] : HikariPool-1 - Connection is not available, request timed out after 30001ms.

1.2 По умолчанию/|время ожидания соединения равно 30 секунды.

HikariPool-1 - Connection is not available, request timed out after 30001ms.

1.3 Это означает, что пул Хикари достиг максимального количества подключений всего=10,

HikariPool-1 - Timeout failure stats (total=10, active=10, idle=0, waiting=0)

1.4 В основном это утечка соединения, обычно это вызвано тем, что соединение не закрыто после заимствования из пула.

Например, в приведенном ниже коде getConnection() не закрыт, и это приведет к утечке соединения.

	@Override
    public void update(int postId, String metaValue) throws SQLException {

        try (PreparedStatement ps = 
				dataSource.getConnection().prepareStatement(SQL_UPDATE_POST_META)) {

            ps.setString(1, metaValue);
            ps.setInt(2, postId);
            ps.setString(3, GlobalUtils.META_KEY);

            ps.executeUpdate();

        } catch (SQLException e) {
            logger.error("[UPDATE] [POST_ID] : {}, [META_VALUE] : {}", postId, metaValue);
            throw e;
        }

    }

Чтобы исправить это, просто закройте соединение.

	@Override
    public void update(int postId, String metaValue) throws SQLException {

        try (Connection connection = dataSource.getConnection();
             PreparedStatement ps = connection.prepareStatement(SQL_UPDATE_POST_META)) {
			 
            ps.setString(1, metaValue);
            ps.setInt(2, postId);
            ps.setString(3, GlobalUtils.META_KEY);

            ps.executeUpdate();

        } catch (SQLException e) {
            logger.error("[UPDATE] [POST_ID] : {}, [META_VALUE] : {}", postId, metaValue);
            throw e;
        }

    }

Рекомендации

Оригинал: “https://mkyong.com/jdbc/hikaripool-1-connection-is-not-available-request-timed-out-after-30002ms/”