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

    麻煩作者提供解決思路,非常感謝
    主站蜘蛛池模板: 国产91在线免费| 无人在线直播免费观看| 国产在线ts人妖免费视频| 99免费在线观看视频| 毛片免费vip会员在线看| 亚洲精品国产精品乱码不卡| 久久亚洲中文无码咪咪爱| 美女巨胸喷奶水视频www免费| 3d成人免费动漫在线观看| 亚洲日本中文字幕一区二区三区| 久久综合亚洲鲁鲁五月天| 100部毛片免费全部播放完整| 久久久久亚洲精品天堂| av成人免费电影| 成年女人看片免费视频播放器| youjizz亚洲| 日本免费福利视频| 色吊丝性永久免费看码| 国产亚洲精久久久久久无码77777 国产亚洲精品成人AA片新蒲金 | 亚洲黄色片在线观看| 99久久精品日本一区二区免费| 久久精品国产亚洲αv忘忧草| 好爽又高潮了毛片免费下载| 亚洲av网址在线观看| 亚洲免费观看在线视频| 国产AV无码专区亚洲AV男同| 足恋玩丝袜脚视频免费网站| 亚洲欧美成人一区二区三区| 亚洲一级免费视频| 亚洲国产精品嫩草影院| 久久乐国产精品亚洲综合| 99久热只有精品视频免费看| 亚洲综合一区国产精品| 亚洲国产成人五月综合网| 免费黄网站在线看| 亚洲日韩精品射精日| a高清免费毛片久久| 337p日本欧洲亚洲大胆精品555588| 夫妻免费无码V看片| GOGOGO免费观看国语| 亚洲mv国产精品mv日本mv|