Redis一个异常的解决办法,异常描述:Could not get a resource from the pool
2015-01-13 09:58
726 查看
异常描述:
[java] view
plaincopy
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
at redis.clients.util.Pool.getResource(Pool.java:22)
at com.derbysoft.jredis.longkeytest.BorrowObject.run(BorrowObject.java:22)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1134)
at redis.clients.util.Pool.getResource(Pool.java:20)
... 2 more
1、产生原因:客户端去redis服务器拿连接(代码描述的是租用对象borrowObject)的时候,池中无可用连接,即池中所有连接被占用,且在等待时候设定的超时时间后还没拿到时,报出此异常。
2、解决办法:调整JedisPoolConfig中maxActive为适合自己系统的阀值。
<bean id="dataJedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxActive"
value="300"/>
<property name="maxIdle" value="100"/>
<property name="maxWait" value="10000"/>
<property name="testOnBorrow" value="true"/>
</bean>
3、重现:
[java] view
plaincopy
public class BorrowObject implements Runnable {
private ShardedJedisPool jedisPool;
public BorrowObject(ShardedJedisPool jedisPool) {
this.jedisPool = jedisPool;
}
@Override
public void run() {
ShardedJedis shardedJedis = null;
try {
shardedJedis = jedisPool.getResource();
String value = shardedJedis.hget("LONG_KEY_TEST:AA059E03E0AB7D806E6C351F87404B06C1190", "Roc El Pinar Aparthotel");
System.out.println(value);
} catch (Exception e) {
//logger.error(e);
e.printStackTrace();
} finally {
jedisPool.returnResource(shardedJedis);
}
}
}
[java] view
plaincopy
public class BorrowObjectTest {
private ShardedJedisPool jedisPool = null;
public BorrowObjectTest() {
List<JedisShardInfo> jedisShardInfos = new ArrayList<JedisShardInfo>();
JedisShardInfo jedisShardInfo = new JedisShardInfo("192.168.1.112");
jedisShardInfo.setTimeout(1000000);
jedisShardInfos.add(jedisShardInfo);
jedisPool = new ShardedJedisPool(createJedisConfig(), jedisShardInfos);
}
private JedisPoolConfig createJedisConfig() {
JedisPoolConfig jedisConfig = new JedisPoolConfig();
jedisConfig.setMaxActive(2);
jedisConfig.setMaxIdle(2);
jedisConfig.setMaxWait(5);
jedisConfig.setTestOnBorrow(true);
return jedisConfig;
}
public static void main(String[] args) {
BorrowObjectTest borrowObjectTest = new BorrowObjectTest();
for (int i = 0; i < 300; i++) {
new Thread(new BorrowObject(borrowObjectTest.jedisPool)).start();
}
}
}
[java] view
plaincopy
转载自:<a href="http://www.iteye.com/topic/1122212">http://www.iteye.com/topic/1122212</a>
[java] view
plaincopy
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
at redis.clients.util.Pool.getResource(Pool.java:22)
at com.derbysoft.jredis.longkeytest.BorrowObject.run(BorrowObject.java:22)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1134)
at redis.clients.util.Pool.getResource(Pool.java:20)
... 2 more
1、产生原因:客户端去redis服务器拿连接(代码描述的是租用对象borrowObject)的时候,池中无可用连接,即池中所有连接被占用,且在等待时候设定的超时时间后还没拿到时,报出此异常。
2、解决办法:调整JedisPoolConfig中maxActive为适合自己系统的阀值。
<bean id="dataJedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxActive"
value="300"/>
<property name="maxIdle" value="100"/>
<property name="maxWait" value="10000"/>
<property name="testOnBorrow" value="true"/>
</bean>
3、重现:
[java] view
plaincopy
public class BorrowObject implements Runnable {
private ShardedJedisPool jedisPool;
public BorrowObject(ShardedJedisPool jedisPool) {
this.jedisPool = jedisPool;
}
@Override
public void run() {
ShardedJedis shardedJedis = null;
try {
shardedJedis = jedisPool.getResource();
String value = shardedJedis.hget("LONG_KEY_TEST:AA059E03E0AB7D806E6C351F87404B06C1190", "Roc El Pinar Aparthotel");
System.out.println(value);
} catch (Exception e) {
//logger.error(e);
e.printStackTrace();
} finally {
jedisPool.returnResource(shardedJedis);
}
}
}
[java] view
plaincopy
public class BorrowObjectTest {
private ShardedJedisPool jedisPool = null;
public BorrowObjectTest() {
List<JedisShardInfo> jedisShardInfos = new ArrayList<JedisShardInfo>();
JedisShardInfo jedisShardInfo = new JedisShardInfo("192.168.1.112");
jedisShardInfo.setTimeout(1000000);
jedisShardInfos.add(jedisShardInfo);
jedisPool = new ShardedJedisPool(createJedisConfig(), jedisShardInfos);
}
private JedisPoolConfig createJedisConfig() {
JedisPoolConfig jedisConfig = new JedisPoolConfig();
jedisConfig.setMaxActive(2);
jedisConfig.setMaxIdle(2);
jedisConfig.setMaxWait(5);
jedisConfig.setTestOnBorrow(true);
return jedisConfig;
}
public static void main(String[] args) {
BorrowObjectTest borrowObjectTest = new BorrowObjectTest();
for (int i = 0; i < 300; i++) {
new Thread(new BorrowObject(borrowObjectTest.jedisPool)).start();
}
}
}
[java] view
plaincopy
转载自:<a href="http://www.iteye.com/topic/1122212">http://www.iteye.com/topic/1122212</a>
相关文章推荐
- Redis一个异常的解决办法,异常描述:Could not get a resource from the pool
- Redis一个异常的解决办法,异常描述:Could not get a resource from the pool
- Redis一个异常的解决办法,异常描述:Could not get a resource from the pool
- redis---Redis一个异常的解决办法,异常描述:Could not get a resource from the pool
- Redis客户端连接异常:Could not get resource from the pool 解决办法
- Redis客户端连接异常:Could not get resource from the pool 解决办法
- Redis客户端连接异常:Could not get resource from the pool 解决办法
- Java Jedis远程连接redis异常解决思路,异常描述:Could not get a resource from the pool && connect timed out
- jedis 连接 redis:Could not get a resource from the pool——我的出错原因和解决办法
- redis中 Could not get a resource from the pool 异常解决
- java连接linux里的redis数据库报:Could not get a resource from the pool解决方法
- 急求大婶指导redis Could not get a resource from the pool 异常
- redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
- 处理应用端连接redis报could not get a resource from the pool问题
- Redis:Could not get a resource from the pool
- redis:Unable to validate object ;Could not get a resource from the pool;(error) MISCONF Redis is con
- Redis2.1.0:Could not get a resource from the pool的分析
- redis客户端可以连接集群,但JedisCluster连接redis集群一直报Could not get a resource from the pool
- redis提示Could not get a resource from the pool(jedis连接池配置)
- redis提示Could not get a resource from the pool(jedis连接池配置)