jedis异常:NoSuchElementException: Timeout waiting for idle object

项目线上环境发现:java.util.NoSuchElementException: Timeout waiting for idle objectjava

 

问题缘由:不该该在try中释放资源,而应该在finally中处理。虽然是很是基础的语法,但仍是有可能会写错,维护老系统时发现很几处都存在这种潜在的Bug,引觉得戒。在try中释放资源,每当出现一次异常将会致使一个jedis对象没法释放,pool池中可用的jedis对象资源会愈来愈少,最终将会致使java.util.NoSuchElementException: Timeout waiting for idle object。这种问题是一个慢性问题,须要时间积累才会发做。服务器

因为请求没法获取空闲对象,页面会出现服务端500错误。若代码加入循环获取jedis将还可能出现服务器宕机。spa

 

try {对象

jedis = pool.getResource();资源

// xxx 业务代码
// 原来代码:pool.returnResource(jedis);,应该放在finally块中,不然每次发生异常将致使一个jedis对象没有被t

} catch (RuntimeException e) { get

         if(jedis != null ) {it

                 pool.returnBrokenResource(jedis);io

}基础

} finally{ object

        // 正确释放资源

         if(jedis != null ) {

                pool.returnResource(jedis);

         }

}