zookeeper超時經驗總結

問題描述

在運維Hbase集羣的時候,經常遇到RS進程宕掉的情況,連接zk客戶端的超時時間sessionTimeout設置爲180秒,查看FGC時間只有40s,爲什麼進程會被Kill?

    其實只這麼設置根本沒有任何作用,因爲客戶端將sessionTimeout的值傳給zk時,zk還會根據minSessionTimeout與maxSessionTimeout兩個參數重新調整最後的超時值

Java代碼 

 收藏代碼

  1. public int getMinSessionTimeout() {  
  2.     return minSessionTimeout == -1 ? tickTime * 2 : minSessionTimeout;  
  3. }  
  4.   
  5.   
  6. public int getMaxSessionTimeout() {  
  7.     return maxSessionTimeout == -1 ? tickTime * 20 : maxSessionTimeout;  
  8. }  

就是說這兩個值,默認分別爲tickTime 的2倍和20倍,而tickTime的默認值是3秒,即最後生效的超時時間,一定是6s<timeout<60s,原因如下:

Java代碼 

 收藏代碼

  1. int minSessionTimeout = zk.getMinSessionTimeout();  
  2. if (sessionTimeout < minSessionTimeout) {  
  3.     sessionTimeout = minSessionTimeout;  
  4. }  
  5. int maxSessionTimeout = zk.getMaxSessionTimeout();  
  6. if (sessionTimeout > maxSessionTimeout) {  
  7.     sessionTimeout = maxSessionTimeout;  
  8. }  

 就是這麼簡單,至於之前說40s超時,是因爲把tickTime設置成2s了,如果想設置爲180s超時,將tickTime設置成9s(9000)即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章