我使用Spring框架(使用JPA)。URL中的ID被解析为动态创建和使用数据源。数据源使用咖啡因进行缓存,但即使在过期时间之后也没有从内存中释放。这导致内存泄漏。过期时间之后,数据源将从缓存中删除,但没有从内存中释放。即使删除缓存以允许使用一次数据源,也会发生内存泄漏。是否有任何方法可以缓存数据源?
下面是部分代码。
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()
1条答案
按热度按时间hyrbngr71#
对于{1..1000}中的i;做jmap -历史记录:实时pid〉out3.log ;组织。apache。http。实现。连接。池化HttpClient连接管理out3.log;日期;/bin/睡眠5;完成〉log5.txt|尾部-f log5.txt