项目线上环境发现: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);
}
}