zoukankan      html  css  js  c++  java
  • Redis一个异常的解决办法,异常描述:Could not get a resource from the pool

    异常描述:

    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、重现: 

    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);
    }
    }
    }

    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();
    }
    }
    }

    转载自:<a href="http://www.iteye.com/topic/1122212">http://www.iteye.com/topic/1122212</a>

    摘抄自:http://blog.csdn.net/freebird_lb/article/details/7460328

    秀出精彩的自己,让梦飞翔。
  • 相关阅读:
    HihoCoder 1245:王胖浩与三角形 三角形边长与面积
    C++ 读写注册表
    Codestorm:Counting Triangles 查各种三角形的个数
    2015年10月之 叽里咕噜
    HDU 5523:Game
    Codestorm:Game with a Boomerang
    关于GPU-driver for linux的资料
    ACER NV47H75C 安装CUDA 驱动以及调整屏幕
    服务器GTX590安装CUDA
    观后感,读了几篇博文
  • 原文地址:https://www.cnblogs.com/fangzhizi/p/4499524.html
Copyright © 2011-2022 走看看