<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
    主站蜘蛛池模板: 久久免费观看视频| 成人免费一区二区无码视频| 蜜芽亚洲av无码精品色午夜| 永久免费毛片在线播放| 羞羞漫画页面免费入口欢迎你| 国产成人综合亚洲亚洲国产第一页| 1a级毛片免费观看| 国产成人亚洲午夜电影| 久久夜色精品国产亚洲AV动态图 | 91在线视频免费观看| 亚洲天堂福利视频| 久久久久亚洲AV无码专区网站| 最好看最新的中文字幕免费 | 久久国产精品免费一区| 亚洲人成免费网站| 亚洲熟女少妇一区二区| 成人免费无码大片A毛片抽搐色欲| 中文字幕永久免费视频| 亚洲av永久中文无码精品综合 | 久久久久久亚洲精品成人| 午夜精品免费在线观看| 美女扒开屁股让男人桶爽免费| 亚洲最大成人网色| 久久久久亚洲AV综合波多野结衣| 一本久久A久久免费精品不卡| 亚洲精品一品区二品区三品区| 1000部免费啪啪十八未年禁止观看| 亚洲av专区无码观看精品天堂| 国产精品高清全国免费观看| CAOPORN国产精品免费视频| 亚洲黄色免费电影| 国产精品四虎在线观看免费| 国产情侣久久久久aⅴ免费| 亚洲AV无码乱码在线观看代蜜桃 | 亚洲高清国产拍精品26U| 久久精品免费一区二区| 色偷偷亚洲第一综合| 亚洲狠狠久久综合一区77777| 麻豆成人精品国产免费| 国产羞羞的视频在线观看免费| 国产成+人+综合+亚洲专|