<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 異常,并一直重試?

    麻煩作者提供解決思路,非常感謝
    主站蜘蛛池模板: 国产精品免费看香蕉| 免费观看美女用震蛋喷水的视频| 四色在线精品免费观看| 亚洲不卡中文字幕| AV无码免费永久在线观看| 亚洲国产综合自在线另类| 波多野结衣在线免费视频 | 天天看免费高清影视| 亚洲中文字幕久久精品无码A| 日本免费网址大全在线观看| 亚洲乱码一二三四五六区| 成人影片麻豆国产影片免费观看| 亚洲一本到无码av中文字幕| 在线精品免费视频无码的| 国内成人精品亚洲日本语音| 亚洲成av人在片观看| 中文字幕久无码免费久久 | 亚洲不卡在线观看| 无码一区二区三区免费视频| 国产AV无码专区亚洲AV麻豆丫| 日本一线a视频免费观看| 五级黄18以上免费看| 亚洲av无码不卡| 四虎1515hh永久久免费| 亚洲一日韩欧美中文字幕在线| 免费一级毛片不卡不收费| 91视频免费网站| 亚洲乱码在线视频| 国产日产成人免费视频在线观看| 一级毛片成人免费看a| 亚洲成人在线电影| 在线播放高清国语自产拍免费| 日本高清免费中文在线看| 香蕉蕉亚亚洲aav综合| 成年女人毛片免费播放视频m| 国产精品九九久久免费视频| 亚洲国产美女视频| 四虎亚洲国产成人久久精品| 久草免费福利资源站| 亚洲AV无码成人精品区狼人影院| 亚洲国产无套无码av电影|