jedis异常:NoSuchElementException: Timeout waiting for idle object
2015-08-19 17:59
381 查看
项目发现网络环境:java.util.NoSuchElementException: Timeout waiting for idle
object
问题原因:不应该在try中释放资源。而应该在finally中处理。尽管是非常基础的语法。但还是有可能会写错,维护老系统时发现非常几处都存在这样的潜在的Bug,引以为戒。在try中释放资源,每当出现一次异常将会导致一个jedis对象无法释放,pool池中可用的jedis对象资源会越来越少。终于将会导致java.util.NoSuchElementException:
Timeout waiting for idle object。
这样的问题是一个慢性问题,须要时间积累才会发作。
因为请求无法获取空暇对象,页面会出现服务端500错误。若代码增加循环获取jedis将还可能出现server宕机。
try {
jedis = pool.getResource();
} catch (RuntimeException e) {
if(jedis != null ) {
pool.returnBrokenResource(jedis);
}
} finally{
// 正确释放资源
if(jedis != null ) {
pool.returnResource(jedis);
}
}
object
问题原因:不应该在try中释放资源。而应该在finally中处理。尽管是非常基础的语法。但还是有可能会写错,维护老系统时发现非常几处都存在这样的潜在的Bug,引以为戒。在try中释放资源,每当出现一次异常将会导致一个jedis对象无法释放,pool池中可用的jedis对象资源会越来越少。终于将会导致java.util.NoSuchElementException:
Timeout waiting for idle object。
这样的问题是一个慢性问题,须要时间积累才会发作。
因为请求无法获取空暇对象,页面会出现服务端500错误。若代码增加循环获取jedis将还可能出现server宕机。
try {
jedis = pool.getResource();
// xxx 业务代码
// 原来代码:pool.returnResource(jedis);,应该放在finally块中,否则每次发生异常将导致一个jedis对象没有被t
} catch (RuntimeException e) {
if(jedis != null ) {
pool.returnBrokenResource(jedis);
}
} finally{
// 正确释放资源
if(jedis != null ) {
pool.returnResource(jedis);
}
}
相关文章推荐
- 继承QGraphicsItem 编译错误:error: no member named 'staticMetaObject' in 'QGraphicsItem'; did you mean sim
- How Do I Declare A Block in Objective-C?
- Objective-C的IO流
- Objective-C 学习笔记 5 循环结构
- Objective-C中不同方式实现锁(二)
- IE获取文件目录下的文件列表及ActiveXObject IE设置
- Objective-C中不同方式实现锁(一)
- 桌面支持--Fixed objects will move
- Effective Objective-C 2.0 学习记录
- 使用PitStop去掉pdf的xobject类型的"水印"
- PDO--PHP Data Objects
- Ceph Object Gateway与keystone集成
- [Object-C]读书笔记(一)
- Java之Object源码解析
- object对象如何转json格式
- LeanCloud返回新建对象的objectId
- Objective-C基础语法笔记
- Objective-C 协议(protocol)
- Intent.putExtra()传递Object对象或者ArrayList<Object> (转)
- django 'set' object does not support indexing