出现异常:java.util.NoSuchElementException: Timeout waiting for idle object

出现原因是:不应该在try中释放资源,而应该在finally中处理。在try中释放资源,每当出现一次异常将会导致一个jedis对象无法释放,pool池中可用的jedis对象资源会越来越少。终于将会导致java.util.NoSuchElementException: Timeout waiting for idle object。

这样的问题是一个慢性问题,需要时间积累才会出现。因为请求无法获取空暇对象,页面会出现服务端500错误。

try{
    jedis = pool.getResource();
    // xxx 业务代码
    // 原来代码:pool.returnResource(jedis);
    // 应该放在finally块中,否则每次发生异常将导致一个jedis对象没有被移除  
}catch(RuntimeException e){
     if(jedis != null ) {
        // 获取连接失败时,应该返回给pool,否则每次发生异常将导致一个jedis对象没有被回收
        pool.returnBrokenResource(jedis);    
    }
}finally{
    // 正确释放资源
    if(jedis != null ) {
        pool.returnResource(jedis);
    }
}

 

相关文章:

  • 2021-08-15
  • 2021-12-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-02-03
  • 2022-12-23
  • 2021-09-07
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案