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

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

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

    莊周夢蝶

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

        今年在閱讀某個項目源碼的時候看到DelayQueue的使用,xmemcached 1.2.6.1的重連任務也是采用DelayQueue管理,ReconnectRequest實現Delayed接口,我突然想起去review下xmc的源碼,發現一個嚴重的BUG,原始代碼如下:
    public final class ReconnectRequest implements Delayed {
          
    public long getDelay(TimeUnit unit) {
            
    return  nextReconnectTimestamp - System.currentTimeMillis();
        }
    }

        getDelay返回該任務還剩下多少時間可以被執行,將下次執行的時間戳減去當前時間即可,問題在于這里返回的是毫秒,而沒有調用getDelay傳入的TimeUnit做轉換,在DelayQueue內部其實是用納秒做單位交給Condition對象去等待
      for (;;) {
                    E first 
    = q.peek();
                    
    if (first == null) {
                        available.await();
                    } 
    else {
                        
    long delay =  first.getDelay(TimeUnit.NANOSECONDS);
                        
    if (delay > 0) {
                            
    long tl = available.awaitNanos(delay);
                        } 
    else {
                            E x 
    = q.poll();
                            
    assert x != null;
                            
    if (q.size() != 0)
                                available.signalAll(); 
    // wake up other takers
                            return x;

                        }
                    }
                }
      
         最終導致的問題是,awaitNanos很快返回(awaitNanos接受的是納秒,這里卻傳入毫秒),循環執行發現重新計算的delay仍然大于0,循環等到getDelay返回的越來越小直到0才執行相應的Task,,造成的現象是在重連的時候cpu占用率很高。

         單元測試的時候沒有發現這個問題,主要是因為功能正常,沒有關注資源消耗情況,因此慚愧地忽略了。

          解決的辦法很簡單,修改getDelay方法即可:
        public long getDelay(TimeUnit unit) {
            
    return unit.convert(
                    nextReconnectTimestamp 
    - System.currentTimeMillis(),
                    TimeUnit.MILLISECONDS);
        }

          這個BUG比較嚴重,已經升級1.2.6.1的朋友建議馬上升級到1.2.6.2,使用maven的朋友只要修改版本即可,沒有使用maven的請到這里下載。


    評論

    # re: xmemcached 1.2.6.2緊急發布(升級到1.2.6.1的朋友注意)  回復  更多評論   

    2010-10-23 15:27 by nmb
    粗心呀!

    # re: xmemcached 1.2.6.2緊急發布(升級到1.2.6.1的朋友注意)  回復  更多評論   

    2010-10-23 22:25 by nbm
    我使用maven構建項目,請問xmemcached放在google的maven倉庫地址是多少?

    還想問一下xmemcached的包組織結構為什么不是com.googlecode而是net.rubyeye.?
    和ruby語言有關嗎

    最后想知道像Clojure這類的腳本語言主要用在什么地方?

    # re: xmemcached 1.2.6.2緊急發布(升級到1.2.6.1的朋友注意)  回復  更多評論   

    2010-10-23 23:22 by nmb
    我使用maven構建項目,請問xmemcached放在google的maven倉庫地址是多少?
    這個我已經知道了。

    還想問一下,怎么樣把artifact提交到maven的中心倉庫?需要注冊什么的嗎?

    # re: xmemcached 1.2.6.2緊急發布(升級到1.2.6.1的朋友注意)  回復  更多評論   

    2010-10-25 09:51 by denniis
    @nmb
    xmc是放入maven中心倉庫的,怎么放入參考這個文檔
    https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide#SonatypeOSSMavenRepositoryUsageGuide-10.ReleaseIt
    主站蜘蛛池模板: 免费精品久久久久久中文字幕| 国产精品亚洲五月天高清| 免费日本一区二区| 国产aⅴ无码专区亚洲av麻豆| 人体大胆做受免费视频| 日韩精品电影一区亚洲| 思思久久99热免费精品6| 免费无遮挡无码永久在线观看视频| 亚洲gay片在线gv网站| 日本一线a视频免费观看| 色欲色欲天天天www亚洲伊| 日韩在线天堂免费观看| 美女羞羞视频免费网站| 免费真实播放国产乱子伦| 曰批免费视频播放在线看片二| 最新精品亚洲成a人在线观看| a级日本高清免费看| 亚洲尹人九九大色香蕉网站| 国产免费女女脚奴视频网 | 香蕉成人免费看片视频app下载| 久久夜色精品国产噜噜亚洲AV| 亚洲人成免费电影| 亚洲国产精品18久久久久久| 日韩精品亚洲专区在线观看| 久久成人免费电影| 亚洲av专区无码观看精品天堂| 在线免费观看国产视频| 色一情一乱一伦一视频免费看| 亚洲精品午夜国产VA久久成人| 免费不卡在线观看AV| 亚洲色偷偷综合亚洲AV伊人蜜桃 | 99精品视频在线观看免费专区| 亚洲免费人成视频观看| 国产美女做a免费视频软件| 国产精品高清免费网站| 亚洲欧洲另类春色校园小说| 国产无遮挡吃胸膜奶免费看| 无码国产精品一区二区免费式芒果 | 亚洲综合色婷婷在线观看| 亚洲无码高清在线观看| 91免费在线播放|