因爲機房斷電,致使應用節點6個裏面,忽然掛了4個節點java
一、使用top查看,java線程還在redis
二、查看程序日誌,沒有任何異常網絡
三、使用curl 訪問 "127.0.0.1:port"沒有響應curl
四、使用jstack -l pid >> dump.txt 進行分析工具
發現存在大量相似的信息url
Locked ownable synchronizers:
- <0x000000008c727158> (a java.util.concurrent.ThreadPoolExecutor$Worker)線程
發現基本上所有都等待着線程 0x0000000087f053f83d
------------------------------------------------------------------------------------------------日誌
最後檢查了一下代碼,發現jedis工具類是抄用了網上了,代碼比較難看懂,可是能夠看到設置了maxWaitMill,也沒有任何使用scan的地方,因此不清楚爲何會形成Pool.getResource死掉了。blog
----------------------------------------------------------------------------------------------------
最後通過金山雲大神、芋艿、CMBC鵬程的指導下發現
由於jedis在2.4.1以後就不支持maxWait屬性了,鏈接等待換成了maxWaitMillis,而若是採用舊的網上的寫法,那麼maxWaitMillis默認一直爲-1,當redis服務出現網絡或其餘問題,就會堵死jedis Pool資源,致使程序假死,一直等待,因此若是使用了jedis,版本又大於2.4.1須要注意一下這個問題
-----------------------------------------------------------------------------------------------------
目前尚未修改線上的配置,等待下一次出現,再修改確認