<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
    主站蜘蛛池模板: 国产偷国产偷亚洲高清日韩| 亚洲国产午夜精品理论片| 亚洲免费在线观看| 亚洲国产精品丝袜在线观看| 国产午夜亚洲精品不卡| 国产精品无码一区二区三区免费| 中文字幕亚洲码在线| 最近中文字幕mv免费高清电影| 亚洲一区二区三区在线| 成人免费黄色网址| 亚洲欧洲精品在线| 51在线视频免费观看视频| 亚洲男人天堂影院| 一二三四在线播放免费观看中文版视频 | xxxxxx日本处大片免费看| 亚洲欧洲日产国码高潮αv| 国产视频精品免费视频| 永久亚洲成a人片777777| 亚洲一卡二卡三卡四卡无卡麻豆| 日本片免费观看一区二区| 亚洲一区在线观看视频| 在线A级毛片无码免费真人| 精品久久久久久久久亚洲偷窥女厕| 国产成人在线免费观看| 日亚毛片免费乱码不卡一区| 激情97综合亚洲色婷婷五 | 国产亚洲高清在线精品不卡| 亚洲?V无码成人精品区日韩| 精品无码国产污污污免费网站国产| 亚洲精品成人片在线播放| 99免费在线观看视频| 亚洲AV无码一区二区三区人| 日韩免费一级毛片| 一级毛片免费播放试看60分钟| 国产成人亚洲综合色影视| **实干一级毛片aa免费| 亚洲熟妇久久精品| 亚洲精品高清在线| 日本亚洲欧洲免费天堂午夜看片女人员| 亚洲美女精品视频| 暖暖免费高清日本一区二区三区|