我正在使用lettuce连接到redis: spring-boot-starter-redis :2.0.6.RELEASE,当我启动应用程序时,它会显示以下错误:
[ERROR][main][ResourceLeakDetector][error] - LEAK:
HashedWheelTimer.release() was not called before it's garbage-
collected. See http://netty.io/wiki/reference-counted-objects.html for
more information.
Recent access records:
Created at:
io.netty.util.HashedWheelTimer.<init>(HashedWheelTimer.java:272)
io.netty.util.HashedWheelTimer.<init>(HashedWheelTimer.java:216)
io.lettuce.core.resource.DefaultClientResources.<init>(DefaultClientResources.java:163)
io.lettuce.core.resource.DefaultClientResources$Builder.build(DefaultClientResources.java:461)
io.lettuce.core.resource.DefaultClientResources.create(DefaultClientResources.java:229)
io.lettuce.core.AbstractRedisClient.<init>(AbstractRedisClient.java:96)
io.lettuce.core.RedisClient.<init>(RedisClient.java:86)
io.lettuce.core.RedisClient.create(RedisClient.java:123)
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.lambda$createClient$7(LettuceConnectionFactory.java:853)
java.util.Optional.orElseGet(Optional.java:267)
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.createClient(LettuceConnectionFactory.java:853)
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.afterPropertiesSet(LettuceConnectionFactory.java:232)redis配置文件:
public class RedisConfig {
@Bean
RedisConnectionFactory lettuceConnectionFactory(RedisProperties
redisProperties) {
//
}
@Bean
public RedisTemplate<String, Object>
redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
}
private RedisStandaloneConfiguration connection(RedisProperties
redisProperties) {
}
}配置yaml文件:
spring:
redis:
host:
lettuce:
pool:
max-active: 100有人来帮忙吗?
发布于 2018-12-18 00:21:05
在未共享ClientResources的情况下创建多个RedisClient实例时,通常会发生此类错误。
Spring Boot创建一个单例实例,因此任何其他实例都可能由您的代码或外部依赖项创建。如果没有进一步的上下文,就不可能说更多。
发布于 2019-04-03 21:47:53
如果您在应用程序中使用多个RedisClient实例,则需要在它们之间共享ClientResources对象。
创建RedisClient的典型方法是:
RedisClient.create("someUrl");但当您想创建多个实例时,不推荐使用这种方式创建对象。在RedisClient内部有一个带有重对象的字段:ClientResources当您创建许多RedisClient实例时,可能会在运行时产生错误
LEAK: You are creating too many HashedWheelTimer instances. HashedWheelTimer is a shared resource that must be reused across the JVM,so that only a few instances are created.您可以做的是在您的应用程序中创建一个共享的ClientResources。并将此对象传递给构造函数RedisClient。
例如:
ClientResources sharedResources = DefaultClientResources.create();
//and use this between many RedisClients i.e.:
RedisClient first = RedisClient.create(sharedResources, "someUrl");
RedisClient second = RedisClient.create(sharedResources, "someUrl_222");
RedisClient third = RedisClient.create(sharedResources, "someUrl_3333");欲了解更多详情,请访问HERE
https://stackoverflow.com/questions/53812667
复制相似问题