Утечка соединения обнаружена HikariPool LeakDetectionThreshold - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть Hikari Connection Pool, и он настроен как показано ниже

    HikariConfig hikariConfig = new HikariConfig();
    hikariConfig.setJdbcUrl(dbProps.getUrl());
    hikariConfig.setUsername(dbProps.getUser());
    hikariConfig.setPassword(dbProps.getPass());
    hikariConfig.addDataSourceProperty("cachePrepStmts", "true");
    hikariConfig.addDataSourceProperty("prepStmtCacheSize", "250");
    hikariConfig.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
    hikariConfig.setMaximumPoolSize(Runtime.getRuntime().availableProcessors() * 5 + 2);
    hikariConfig.setIdleTimeout(36000);
    hikariConfig.setConnectionTestQuery("SELECT 1;");
    hikariConfig.setConnectionTimeout(20000);
    hikariConfig.setMaxLifetime(1440000);
    hikariConfig.setLeakDetectionThreshold(3000); // LEAK DETECTION THRESHOLD
    dataSource = new HikariDataSource(hikariConfig);

И некоторые сведения о БД извлекаются, как показано ниже:

public class SomeDBFetcher {

private DataSource dataSource;

public SomeDBFetcher(final DataSource dataSource) {
    this.dataSource = dataSource;
}

public void someMethod() {
    try (final var conn = dataSource.getConnection(); // CONNECTION LEAKS ?
        final var stmt = conn.prepareStatement("SOME QUERY")) {
        // SOME DB
    }
}

}

В журналах Я вижу утечки соединения. Почему происходит утечка соединения?

1 Ответ

2 голосов
/ 27 февраля 2020

LeakDetectionThreshold сообщает о потенциальных утечках, когда вы не закрываете соединение в течение определенного промежутка времени - в вашем случае это 3 с.

Здесь, вероятно, у вас есть запрос (или что-то внутри предложения try) это занимает более 3 секунд, и Hikari предупреждает вас о потенциальной утечке соединения.

Так что, если вы видите такое предупреждение, это не обязательно означает, что у вас действительно есть утечка.

Из документации :

leakDetectionThreshold
Это свойство контролирует время, в течение которого соединение может быть вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечки отключено. Наименьшее допустимое значение для включения обнаружения утечки составляет 2000 (2 секунды). По умолчанию: 0

https://github.com/brettwooldridge/HikariCP

...