【问题标题】:Why is Hikari Datasource leaking in this situation?为什么 Hikari 数据源会在这种情况下泄漏?
【发布时间】:2023-01-16 18:39:43
【问题描述】:

我使用 Spring 框架(带有 JPA)。解析 URL 中的 id 以动态创建和使用数据源。 Datasource使用了caffeine来缓存,但是过期了也没有从内存中释放。这导致了内存泄漏。过期时间后,从缓存中移除,但不从内存中释放。即使删除缓存以允许使用一次数据源,也会发生内存泄漏。有没有办法缓存数据源?

下面是部分代码。

    private HikariDataSource getDataSourceRdsLocation(RdsLocationEntity rdsLocationEntity){
        HikariConfig config = new HikariConfig();
        config.setAllowPoolSuspension(true);
        config.setJdbcUrl("jdbc:mysql://"+rdsLocationEntity.getServerReadOnly()+"/"+rdsLocationEntity.getDatabaseName());
        config.setUsername("");
        config.setPassword("");

        config.setPoolName(rdsLocationEntity.getName());
        config.setMaximumPoolSize(10);
        config.setMinimumIdle(1);
        config.setIdleTimeout(3600000);
        config.setMaxLifetime(7200000);
        config.setConnectionTimeout(500);

        return new HikariDataSource(config);
    }
new CaffeineCache(cache.getCacheName(), Caffeine.newBuilder().recordStats()
                                .removalListener((key, value, cause) -> {
                                    if (cause.wasEvicted() && value instanceof HikariDataSource ds) {
                                        ds.close();
                                    }
                                })
                                .expireAfterWrite(cache.getExpiredAfter(), cache.getTimeUnit())
                                .maximumSize(cache.getMaximumSize())
                                .build()

【问题讨论】:

  • 你能在github上分享一个复制器吗?
  • 与@ozkanpakdil 一样,我也建议共享 Github 存储库以重现问题。另外,您做了哪些测量/观察来得出内存泄漏的结论?
  • 即使调用了 HikariDataSource 的 close,该对象仍然保留在线程本地。我通过使用 jprofiler 进行堆转储的结果找到了它。这个本地线程似乎是为了管理 HikariDataSource 而创建的,但我一直无法找到直接访问它或从中释放对象的方法。

标签: spring-boot jpa hikaricp


【解决方案1】:

我在 {1..1000} 中;执行 jmap -histo:live pid > out3.log ; grep org.apache.http.impl.conn.PoolingHttpClientConnectionManage out3.log;日期;/bin/sleep 5;完成 >log5.txt | tail -f log5.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 2011-09-22
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多