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

         }

}

相關文章
相關標籤/搜索