<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    XMemcached的一個嚴重BUG

    Posted on 2009-09-27 23:29 dennis 閱讀(3389) 評論(6)  編輯  收藏 所屬分類: javamy open-source
        泰山在線的周利朋友對xmemcached做了很多測試,他發(fā)現(xiàn)了一個比較嚴重的BUG,在linux平臺的重連機制有時候會失效。表現(xiàn)的現(xiàn)象是這樣,正常連接上memcached之后,kill掉其中的一臺memcched server,xmemcached會開始自動重連這臺server直到連接成功,然而事情沒有像預(yù)想的那樣,現(xiàn)象是有時候可以重連成功,有時候卻沒有,如果設(shè)置了connectionPoolSize,有時候建立的連接數(shù)達到connectionPoolSize,有時候卻沒有。他還向我描述了那時候的netstat觀察到的網(wǎng)絡(luò)情況,有比較多CLOSE_WAIT存在,這個顯然是由于memcached主動斷開,xmemcached被動進入CLOSE_WAIT,但是沒有發(fā)送FIN的情況,如果有發(fā)送FIN那應(yīng)該進入LAST_ACK而不是停留在CLOSE_WAIT。因此反應(yīng)的第一個問題是xmemcached沒有在接到memcached斷開之后主動關(guān)閉socket發(fā)送FIN。檢查代碼發(fā)現(xiàn)其實是有這個邏輯,但是nio的channel關(guān)閉有個隱蔽的問題,就是在SelectionKey.cancel之后還需要調(diào)用select才能真正地關(guān)閉socket,這里會有個延遲,另外,為了防止CLOSE_WAIT現(xiàn)象的再次發(fā)生,設(shè)置SO_LINGER選項強制關(guān)閉也是必須的。做了這兩個修改后,build了一個臨時版本請周利朋友幫忙測試,重連失敗的情況有所減輕,但是仍然會發(fā)生。因此根本的問題不在于CLOSE_WAIT的處理上,通過檢查代碼發(fā)現(xiàn)了下面這段代碼:
    if(!future.isDone()&&!future.get(DEFAULT_CONNECTION_TIMEOUT,TimeUnit.MILLISECONDS){
      
    }
    else{
       connected
    =true;
    }

       可能你已經(jīng)發(fā)現(xiàn)問題在哪。這段代碼的意圖是通過future.get阻塞等待連接成功或者失敗,如果失敗做一些處理,如果成功將connected設(shè)置為true。這里判斷失敗有兩個條件,future.isDone為false,并且future.get也返回false才認為失敗,問題恰恰出在這里,因為future.isDone可能在連接的失敗的情況下返回true,而這段邏輯將這種情況誤判為連接成功,導(dǎo)致重試的請求被取消。修改很簡單,將future.isDone這個條件去掉即可。
        回想起來,我也忘了當(dāng)初為什么加上這個條件,這里感謝下周利的幫助,并且向使用xmemcached的朋友們提個醒。這個問題在win32平臺上不會出現(xiàn)(比較詭異,估計跟并發(fā)有關(guān)),在linux平臺出現(xiàn)的幾率比較大,預(yù)計在10月份發(fā)布的1.2.0-stable中修正,這個stable版主要工作是修復(fù)BUG。歡迎更多朋友反饋問題和BUG,我將及時修復(fù)和反饋。


    評論

    # re: XMemcached的一個嚴重BUG  回復(fù)  更多評論   

    2009-09-27 23:50 by 周利
    dennis這么快速、負責(zé)的解決了問題,我很敬佩!

    # re: XMemcached的一個嚴重BUG  回復(fù)  更多評論   

    2009-09-28 08:52 by bsli123@hotmail.com
    希望XMemcached 能保持簡潔實用的功能,不要引入太多花哨的東西,正像Memcached一樣簡潔

    # re: XMemcached的一個嚴重BUG  回復(fù)  更多評論   

    2009-09-28 09:53 by dennis
    @bsli123@hotmail.com
    謝謝你的建議。xmemcached發(fā)展到現(xiàn)在,很多功能其實都是被動添加的,比如連接池是在用戶發(fā)現(xiàn)高并發(fā)下單連接的nio很容易超時,比如kestrel的支持是有用戶拿xmemcached去連接kestrel,所以就xmemcached本身不會主動去添加一些花哨的東西,一個簡單的類庫也不能承擔(dān)太多責(zé)任。

    # re: XMemcached的一個嚴重BUG  回復(fù)  更多評論   

    2009-09-28 16:13 by bsli123@hotmail.com
    向你請教一個問題,memecache緩存單個對象大小可有什么限制?

    # re: XMemcached的一個嚴重BUG  回復(fù)  更多評論   

    2009-09-28 16:48 by dennis
    @bsli123@hotmail.com
    允許的最大大小是1M。

    # re: XMemcached的一個嚴重BUG  回復(fù)  更多評論   

    2016-05-17 11:16 by wei.huang
    非常感謝作者提供這么好的工具,在使用的過程中遇到一些問題?
    1、使用連接池后,當(dāng)一個節(jié)點斷開連接后會一直嘗試連接并報出connect refused 異常?是因為有重試機制嗎?
    2、動態(tài)添加節(jié)點addserver時當(dāng)節(jié)點服務(wù)通信異常也會拋出connect refused 異常,并一直重試?

    麻煩作者提供解決思路,非常感謝
    主站蜘蛛池模板: 免费看美女裸露无档网站| 最新欧洲大片免费在线 | 免费a级毛片无码a∨性按摩| 国产亚洲综合视频| 亚洲AV无码一区二区二三区入口| 18禁止观看免费私人影院| 极品美女一级毛片免费| 久久精品国产精品亚洲蜜月| 日本特黄特黄刺激大片免费| AAA日本高清在线播放免费观看| 最新亚洲春色Av无码专区| 国产AⅤ无码专区亚洲AV| 91精品免费在线观看| 国产精品成人免费观看| 亚洲AV无码久久久久网站蜜桃| 亚洲最大av无码网址| 永久免费AV无码国产网站| 精品国产免费人成网站| 亚洲乱妇熟女爽到高潮的片| 亚洲国产精品无码久久一线| 午夜网站免费版在线观看| 99精品热线在线观看免费视频| 一级一级一级毛片免费毛片| 亚洲日本va在线观看| 亚洲成AV人片在线观看无码 | 91免费人成网站在线观看18| 一级特黄特色的免费大片视频| 亚洲av乱码一区二区三区| 久久精品亚洲一区二区| 亚洲国产精品人人做人人爱| 久久不见久久见免费影院| 免费无码毛片一区二区APP| 一级毛片免费全部播放| 亚洲精品久久无码| 亚洲av无码片在线观看| 久久精品国产亚洲AV香蕉| 亚洲AV综合色区无码另类小说| 亚洲成人国产精品| 国产精品jizz在线观看免费| 一区二区无码免费视频网站| 69pao强力打造免费高清|