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

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

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

    莊周夢蝶

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


        我們在維護的淘寶開源消息中間件的metaq的github分支,今天發布了1.4.2版本,主要做了如下改進:

        1.添加了大量的使用和原理文檔,參見Wiki
        2.合并tools和server-wrapper工程,提供統一的腳本來管理Broker,管理Broker的工作變得非常容易,全部工作都可以通過metaServer.sh的腳本來執行。同時提供了bat啟動腳本,用于在windows上啟動Broker做測試。
        3.新功能:
       (1)新的客戶端API用來獲取topic的分區列表
       (2)新的客戶端API用來獲取Broker的統計信息
       (3)異步復制的Slave可以自動獲取Master的配置變更,例如Master在配置文件中新增或者刪除了topic并順利reload熱加載成功后,slave可自動復制或者移除變更的topic,無需重啟。
       (4)新的統計項目,可以通過'stats config'協議獲取Broker的配置文件。
        4.添加meta-python項目,一個python的客戶端,暫時僅支持發送消息功能。
        5.其他小改進,如統計信息的優化、構建工具的整合等。

        更詳細的發行日志請看RelaseNotes

        下載地址:  https://github.com/killme2008/Metamorphosis/downloads
        入門指南:  《如何開始
        更多文檔請看Wiki

    posted @ 2012-05-09 22:47 dennis 閱讀(4692) | 評論 (1)編輯 收藏


        我發現很多人沒辦法高效地解決問題的關鍵原因是不熟悉工具,不熟悉工具也還罷了,甚至還不知道怎么去找工具,這個問題就大條了。我想列下我能想到的一個Java程序員會用到的常用工具。

    一、編碼工具

    1.IDE:Eclipse或者IDEA,熟悉盡可能多的快捷鍵,《Eclipse常見快捷鍵列表
    2.插件: 
    (1) Findbugs,在release之前進行一次靜態代碼檢查是必須的
    (2) Clover,關心你的單元測試覆蓋率
    (3) Checkstyle 代碼風格檢查

    3.構建和部署工具:ant或者maven,現在主流都是maven了吧,使用nexus搭建maven私服,再加上持續集成jenkins。代碼質量不用愁。

    4.版本管理工具: svn或者git

    5.diff和patch

    6.設置你的eclipse或者IDEA,如formatter,save actions以及code template等。代碼風格,直接用google的也可以啊。《Google style guide

    7.掌握一個文本編輯器,Emacs或者VIM,熟悉常用快捷鍵。這在你需要在線編輯代碼,或者編寫其他語言代碼時候特別有用。《神器圣戰

    二、JDK相關

    1.jstat : 觀察GC情況,如:

    jstat -gcutil pid 2000

    2.jmap,查看heap情況,如查看存活對象列表:
    jmap -histo:live pid |grep com.company |less 

    或者dump內存用來分析:

    jmap -dump:file=test.bin pid

    3.分析dump的堆文件,可以用jhat:

    jhat test.bin

      分析完成后可以用瀏覽器查看堆的情況。這個工具的分析結果還比較原始,你還可以用Eclipse MAT插件進行圖形化分析,或者IBM的Heap Analyzer.

    4.jvisualvm和jconsole: JVM自帶的性能分析和監控工具,怎么用?請自己看文檔。

    5.jstack:分析線程堆棧,如

    jstack pid > thread_dump

        查看CPU最高的線程在干什么的方法結合top和jstack:http://www.iteye.com/topic/1114219

    6.更多JVM工具,參見官方文檔:http://docs.oracle.com/javase/6/docs/technotes/tools/

    7.學習使用btrace分析java運行時問題。《Btrace使用簡介

    8.GC日志分析工具:GC viewerGC-console或者自己挑吧。

    9.性能分析工具,除了自帶的jvisualvm外,還可以用商業的jprofiler

    10.JVM參數大全

    11.《JVM調優標準參數陷阱》,iteye神貼。

    三、Linux工具

    1.熟悉常用的shell命令,


    3.使用htop替換top。

    4.熟悉下strace,gdb甚至systemtap來分析問題。

    5.熟悉vmstat,iostat,sar等性能統計工具。

    5.自動化部署腳本,py-fabric或者自薦下我的clojure-control

    四、其他

    1.掌握一門腳本語言,Python或者Ruby,高效解決一些需要quick and dirty的任務:比如讀寫文件、導入導出數據庫、網頁爬蟲等。注意不是python.com,咔咔。

    2.使用Linux或者Mac os系統作為你的開發環境。

    3.升級你的“硬件工具”,雙屏大屏顯示器、SSD、8G內存甚至更多。

    4.你懂的:https://code.google.com/p/goagent/

    五、如何查找工具?

    1.搜索引擎,google或者baidu,《搜索技巧

    2.萬能的stack overflow:http://stackoverflow.com/

    3.虛心問牛人。

    六、最重要的是⋯⋯

    一顆永不停止學習的心。

    posted @ 2012-04-17 17:05 dennis 閱讀(19228) | 評論 (17)編輯 收藏


        最近陸陸續續補充了不少metaq的文檔,部分是直接從官方文檔里摘抄出來,放在了github工程的wiki頁,有興趣了解甚至使用meta的可以仔細閱讀下,一份目錄:     
        后續還會繼續補充。

    posted @ 2012-04-13 22:43 dennis 閱讀(47521) | 評論 (13)編輯 收藏

        Java世界里有findbugs這樣的神器,可以讓你避免很多“簡單愚蠢”的bug。同樣,Clojure世界里也有相應的替代品,這就是今天要介紹的kibit。不過kibit現在還比較年輕,判斷的規則較少,但是已經可以使用起來做clojure代碼的靜態檢查。

    項目主頁:https://github.com/jonase/kibit
    使用:
    1.安裝lein插件:
    lein plugin install jonase/kibit 0.0.2

    2.在項目的根目錄運行
    lein kibit

    kibit會分析項目里所有clojure源碼,每個namespace分別分析,例如我分析clojure-control的輸出:

    == control.commands ==
    == control.core ==
    [186] Consider (zero? (:status (ssh host user cluster (str "test -e " file)))) instead of (= (:status (ssh host user cluster (str "test -e " file))) 0)
    == control.main ==
    == leiningen.control ==
    [null] Consider Integer/parseInt instead of (fn* [p1__61444#] (Integer/parseInt p1__61444#))
    [null] Consider Integer/parseInt instead of (fn* [p1__65254#] (Integer/parseInt p1__65254#))

        顯然,kibit一個一個namespace分析過去,并且按照規則對它認為有問題的地方打印出來,并提出建議。例如這里它建議我用
    (zero? (:status (ssh host user cluster (str "test -e " file))))
        替換control.core里186行的:
     (= (:status (ssh host user cluster (str "test -e " file))) 0)

        目前kibit大多數是這類代碼風格上的檢查,還沒有做到類似findbugs那樣更豐富的檢查,例如NPE異常檢查等。此外kibit還提供反射檢查,任何有反射調用的地方都給出警告。
        kibit是基于core.logic實現的,它的規則都放在了這里,通過defrules宏來定義檢查規則,源碼中對算術運算的規則定義:
    (defrules rules
      [(+ ?x 1) (inc ?x)]
      [(+ 1 ?x) (inc ?x)]
      [(- ?x 1) (dec ?x)]

      [(* ?x (* . ?xs)) (* ?x . ?xs)]
      [(+ ?x (+ . ?xs)) (+ ?x . ?xs)])
       
        第一個規則,任何對類似(+ 1 x)的代碼,都建議替換成(inc x),后面的與此類似。理論上你也可以自定義規則,并提交給官方。總體上說kibit仍然是比不上findbugs的,期待未來發展的更好。

    posted @ 2012-03-23 21:28 dennis 閱讀(4572) | 評論 (0)編輯 收藏


        我們經常需要在程序中測量某段代碼的性能,或者某個函數的性能,在Java中,我們可能簡單地循環調用某個方法多少次,然后利用System.currentTimeMillis()方法測量下時間。在Ruby中,一般都是用Benchmark module做測試,提供了更詳細的報告信息。

        同樣,在Clojure里你可以做這些事情,你仍然可以使用System.currentTimeMillis()來測量運行時間,例如:

    user=> (defn sum1 [& args] (reduce + 0 args))
    #'user/sum1

    user=> (defn sum2 [& args]
                 (loop [rt 0
                        args args]
                     (if args
                       (recur (+ rt (first args)) (next args))
                       rt)))
    #'user/sum2

    user=> (defn bench [sum n]
             (let [start (System/currentTimeMillis)
                   nums (range 0 (+ n 1))]
               (dotimes [_ n] (apply sum nums))
               (println (- (System/currentTimeMillis) start))))

    user=> (bench sum1 10000)
    1818
    nil
    user=> (bench sum2 10000)
    4220
    nil
       
        定義兩個求和函數sum1和sum2,一個是利用reduce,一個是自己寫loop,然后寫了個bench函數循環一定次數執行sum函數并給出執行時間,利用System.currentTimeMillis()方法。顯然sum1比sum2快了一倍多。為什么更快?這不是我們的話題,有興趣可以自己看reduce函數的實現。

        除了用System.currentTimeMillis()這樣的java方式測量運行時間外,clojure還提供了time宏來包裝這一切:
    user=> (doc time)
    -------------------------
    clojure.core/time
    ([expr])
    Macro
      Evaluates expr and prints the time it took.  Returns the value of
     expr.
    nil

        time宏用的不是currentTimeMillis方法,而是JDK5引入的nanoTime方法更精確。重寫bench函數:
    user=> (defn bench [sum n]
                 (time (dotimes [_ n] (apply sum (range 0 (+ n 1))))))
    #'user/bench

    user=> (bench sum1 10000)
    "Elapsed time: 5425.074 msecs"
    nil
    user=> (bench sum2 10000)
    "Elapsed time: 7893.412 msecs"
    nil
         盡管精度不一致,仍然可以看出來sum1比sum2快。
        
         這樣的測試仍然是比較粗糙的,真正的性能測試需要考慮到JVM JIT、warm up以及gc帶來的影響,例如我們可能需要預先執行函數多少次來讓JVM“預熱”這些代碼。慶幸的是clojure世界里有一個開源庫Criterium幫你自動搞定這一切,它的項目主頁也在github上:https://github.com/hugoduncan/criterium

         首先在你的項目里添加criterium依賴:
    :dependencies [[org.clojure/clojure "1.3.0"]
                            [criterium "0.2.0"]])
       
         接下來引用criterium.core這個ns,因為criterium主要宏也叫bench,因此我們原來的bench函數不能用了,換個名字叫bench-sum:
    user=> (use 'criterium.core)
    nil
    user=> (defn bench-sum [sum n]
                  (with-progress-reporting (bench (apply sum (range 0 (+ 1 n))) :verbose)))
    #'user/bench-sum

         調用criterium的bench宏執行測試,使用with-progress-reporting宏包裝測試代碼并匯報測試進展,測試進展會打印在標準輸出上。請注意,我這里并沒有利用dotimes做循環測試,因為criterium會自己計算應該運行的循環次數,我們并不需要明確指定,測試下結果:
    user=> (bench-sum sum1 10000)
    Cleaning JVM allocations 
    Warming up for JIT optimisations 
    Estimating execution count 
    Running with sample-count 60 exec-count 1417 
    Checking GC
    Cleaning JVM allocations 
    Finding outliers 
    Bootstrapping 
    Checking outlier significance
    x86_64 Mac OS X 10.7.3 4 cpu(s)
    Java HotSpot(TM) 64-Bit Server VM 20.4-b02-402
    Runtime arguments: -Dclojure.compile.path=/Users/apple/programming/avos/logdashboard/test/classes -Dtest.version=1.0.0-SNAPSHOT -Dclojure.debug=false
    Evaluation count             : 85020
                 Execution time mean : 722.730169 us  95.0% CI: (722.552670 us, 722.957586 us)
        Execution time std-deviation : 1.042966 ms  95.0% CI: (1.034972 ms, 1.054015 ms)
             Execution time lower ci : 692.122089 us  95.0% CI: (692.122089 us, 692.260198 us)
             Execution time upper ci : 768.239944 us  95.0% CI: (768.239944 us, 768.305222 us)

    Found 2 outliers in 60 samples (3.3333 %)
        low-severe     2 (3.3333 %)
     Variance from outliers : 25.4066 % Variance is moderately inflated by outliers
    nil


    user=> (bench-sum sum2 10000)
    Cleaning JVM allocations 
    Warming up for JIT optimisations 
    Estimating execution count 
    Running with sample-count 60 exec-count 917 
    Checking GC
    Cleaning JVM allocations 
    Finding outliers 
    Bootstrapping 
    Checking outlier significance
    x86_64 Mac OS X 10.7.3 4 cpu(s)
    Java HotSpot(TM) 64-Bit Server VM 20.4-b02-402
    Runtime arguments: -Dclojure.compile.path=/Users/apple/programming/avos/logdashboard/test/classes -Dtest.version=1.0.0-SNAPSHOT -Dclojure.debug=false
    Evaluation count             : 55020
                 Execution time mean : 1.070884 ms  95.0% CI: (1.070587 ms, 1.071136 ms)
        Execution time std-deviation : 1.057659 ms  95.0% CI: (1.050688 ms, 1.062877 ms)
             Execution time lower ci : 1.024195 ms  95.0% CI: (1.024164 ms, 1.024195 ms)
             Execution time upper ci : 1.145664 ms  95.0% CI: (1.145664 ms, 1.145741 ms)

    Found 1 outliers in 60 samples (1.6667 %)
        low-severe     1 (1.6667 %)
     Variance from outliers : 19.0208 % Variance is moderately inflated by outliers
    nil


        這個報告是不是相當專業?不是搞統計還不一定讀的懂。大概解讀下,sample-count是取樣次數,默認是60次,exec-count是測試的執行次數(不包括前期warm up和JIT在內),CI是可信區間,這里取95%,Execution time mean是平均執行時間,而lower和upper是測試過程中執行時間的最小和最大值。而outliers是這一組測試中的異常值,比如執行sum1測試發現了2組異常結果。從結果來看,sum1的平均執行時間是722微秒,而sum2的平均執行時間是1.07毫秒,因此還是sum1更快一些。

        總結下,如果只是在開發過程中做一些小塊代碼的簡單測試,可以直接利用內置的time宏,如果你希望做一次比較標準的性能測試,那么就應該利用criterium這個優秀的開源庫。

    posted @ 2012-03-22 21:14 dennis 閱讀(4153) | 評論 (0)編輯 收藏


        繼續Clojure世界之旅,介紹下我今天的探索成果,使用clojure生成clojure項目的API文檔。在java里,我們是利用javadoc生成API文檔,各種build工具都提供了集成,例如maven和ant都提供了javadoc插件或者task。在Clojure世界里,同樣有一系列工具幫助你從源碼中自動化生成API文檔。今天主要介紹三個工具。不過我不會介紹怎么在clojure里寫doc,具體怎么做請看一些開源項目,或者直接看clojure.core的源碼。

        首先是codox,使用相當簡單,我們這里都假設你使用Leiningen作為構建工具,在project.clj里添加codox依賴:
      :dev-dependencies    [[codox "0.5.0"]]

        解下執行lein doc命令即可生成文檔,生成的文檔放在doc目錄,在瀏覽器里打開index.html即可觀察生成的文檔。我給clojure-control生成的codox文檔可以看這個鏈接,效果還是不錯的。

        第二個要介紹的工具是marginalia,使用方法類似codox,首先還是添加依賴:
    :dev-dependencies [lein-marginalia "0.7.0"]
       
        執行lein deps處理依賴關系,然后執行lein marg命令即可在docs目錄生成文檔,與codox不同的是marginalia只生成一個html文件,沒有帶js和css,但是效果也不錯,可以看我給clojure-control生成的marg文檔鏈接marginalia生成的文檔說明和源碼左右對照,很利于閱讀源碼。

       最后要介紹的就是Clojure.org自己在使用的autodoc,如果你喜歡clojure.org上的API文檔格式可以采用這個工具。并且autodoc可以跟github pages結合起來,生成完整的項目文檔并展示在github上。例如以clojure-control為例來介紹整個過程。首先你需要配置你的github pages,參照這個鏈接
    http://pages.github.com/

        第一步,仍然是在project.clj添加依賴:
    :dev-dependencies [[lein-autodoc "0.9.0"]]
           第二步,在你的.gitignore里忽略autodoc目錄:
    autodoc/**
           將這些更改提交到github上,接下來在你的項目目錄clone一份項目源碼到<project>/autodoc目錄:
     git clone git@github.com:<user name>/<project name>.git autodoc
           進入autodoc目錄,執行下列命令創建一個gh-pages分支:
     $ cd autodoc
     $ git symbolic-ref HEAD refs/heads/gh-pages
     $ rm .git/index
     $ git clean -fdx
     $ cd ..
         回到項目根目錄后,執行lein autodoc命令在autodoc目錄生成文檔:
    lein autodoc
         接下來將生成的文檔推送到github分支上:
     $cd autodoc 
     $ git add -A
     $ git commit -m"Documentation update"
     $ git push origin gh-pages
        等上幾分鐘,讓github渲染你的文檔,最終的效果看這個鏈接 http://killme2008.github.com/clojure-control     
        autodoc和marginalia都支持maven,具體使用請看他們的文檔。

    posted @ 2012-03-21 22:24 dennis 閱讀(4241) | 評論 (0)編輯 收藏

        前面一篇博客介紹了我在github上的一個metaq分支,今天下午寫了個metaq的python客戶端,目前僅支持發送消息功能,不過麻雀雖小,五臟俱全,客戶端和zookeeper的交互和連接管理之類都還具備,不出意外,我們會首先用上。第一次正兒八經地寫python代碼,寫的不好的地方請盡管拍磚,多謝。
        項目叫meta-python,仍然放在github上:https://github.com/killme2008/meta-python

        使用需要先安裝zkpython這個庫,具體安裝這篇博客,使用很簡單,發送消息:
        from metamorphosis import Message,MessageProducer,SendResult
        p=MessageProducer("topic")
        message=Message("topic","message body")
        print p.send(message)
        p.close()

        
    MessageProducer就是消息發送者,它的構造函數接受至少一個topic,默認的zk_servers為localhost:2181,可以通過zk_servers參數指定你的zookeeper集群:

    p=MessageProducer("topic",zk_servers="192.168.1.100:2191,192.168.1.101:2181")

    更多參數請直接看源碼吧。一個本機的性能測試(meta和客戶端都跑在我的機器上,機器是Mac MC700,osx 10.7,磁盤沒有升級過):
    from metamorphosis import Message,MessageProducer
    from time import time
    p=MessageProducer("avos-fetch-tasks")
    message=Message("avos-fetch-tasks","http://www.taobao.com")
    start=time()
    for i in range(0,10000):
        sent=p.send(message)
        if not sent.success:
            print "send failed"
    finish=time()
    secs=finish-start
    print "duration:%s seconds" % (secs)
    print "tps:%s msgs/second" % (10000/secs)
    p.close()

     結果:


    duration:1.85962295532 seconds
    tps:5377.43415749 msgs/second

    posted @ 2012-03-21 19:08 dennis 閱讀(5558) | 評論 (1)編輯 收藏

        開源的memcached Java客戶端——xmemcached發布1.3.6版本。

        主要改進如下: 

    1.  為MemcachedClientBuilder添加兩個新方法用于配置:

    public void setConnectTimeout(long connectTimeout);  
    public void setSanitizeKeys(boolean sanitizeKeys);

     

    2.  用于hibernate的XmemcachedClientFactoryd添加了connectTimeout屬性,感謝網友 Boli.Jiang的貢獻。

    3.  添加新的枚舉類型 net.rubyeye.xmemcached.transcoders.CompressionMode,用于指定Transcoder的壓縮類型,默認是ZIP壓縮,可選擇GZIP壓縮。Transcoder接口添加setCompressionMode方法。

    4.  修改心跳規則,原來是在連接空閑的時候發起心跳,現在變成固定每隔5秒發起一次心跳檢測連接。

    5.  修改默認參數,默認禁用nagle算法,默認將批量get的合并因子下降到50。

    6.  修復bug和改進,包括:161163165169172、173176179180

     

    項目主頁:http://code.google.com/p/xmemcached/

    項目文檔:http://code.google.com/p/xmemcached/w/list

    下載:http://code.google.com/p/xmemcached/downloads/list

    源碼:https://github.com/killme2008/xmemcached

     

    Maven依賴:

     <dependency>  

        <groupId>com.googlecode.xmemcached</groupId>  
        <artifactId>xmemcached</artifactId>  
        <version>1.3.6</version>  
    </dependency> 

        最后感謝所有提出issue和改進意見的朋友們。

    posted @ 2012-03-19 10:51 dennis 閱讀(4909) | 評論 (3)編輯 收藏

        加入avos.com已經一個月多一點,很榮幸加入這個充滿活力的跨國團隊。去了趟北京,跟我的同事們終于當面認識了下,并且順利舉辦了cn-clojure的第二次聚會。不過很悲劇的是在北京一周都在生病,哪也沒去成,要見的人也沒見到,要湊的飯局也沒吃到,非常遺憾,希望以后再彌補。不過我暫時因為家庭的因素還在杭州遠程辦公,溝通都是通過gtalk和google+ hangout,很多東西對我來說都是全新的經歷。遠程辦公有利有弊,其實我還是更喜歡能在一個辦公室里工作,交流方便,只要轉個椅子就好。

        正式介紹下我們公司,大boss是youtube創始人查德•赫利(Chad Hurley)和陳士駿(Steve Chen),我們在中國的boss是前google員工/耶魯的博士江宏帥哥,更多關于團隊成員的介紹請看這里,我的同事們真的很強大,我要學習的地方很多。我們做的產品是從雅虎手上買下來的delicious.com,不過中國團隊運作的是美味書簽——mei.fm。我們剛在3月1號開始做public beta,預計會在4月份的時候正式對外開放注冊。我們的團隊博客在這里

        我在團隊里做的事情還是偏向后端,這一個月來做的事情更偏向運維之類,搞搞solr復制、mysql復制、程序監控之類,將原來只是簡單了解過的東西動手做了一遍,能親手實踐的感覺不錯。在此過程中要感謝鋒爺和劉帥哥的幫助,再次感謝。淘寶的同事們開源了metaq和gecko,我也做了點工作,都在這里。幾個維護的開源項目都沒有太大進展,很慚愧,還被人催發新版本,能承諾的是周末發xmemcached的新版本,主要還是修bug。本來要寫個clojure世界的系列文章,因為響應寥寥,也不是很有動力寫下去。雜七雜八讀了幾本書,都沒讀完,這一個月杭州太冷了,雨下個不停,不過終于這一周開始晴天了,希望老天爺別再掉眼淚。

        收拾收拾心情,整裝待發,希望新的一年里能做出點不同的東西。
        

    posted @ 2012-03-16 22:59 dennis 閱讀(2982) | 評論 (7)編輯 收藏


        上周我在淘寶的同事開源了一個消息中間件metamorphosis,放在了淘蝌蚪上。我從淘蝌蚪的svn上fork了一個github的分支,放在了這里:
     1.主體工程:https://github.com/killme2008/Metamorphosis
        
        主要做了一些pom文件的簡化,發布1.4.0.2版本到maven central倉庫,并且寫了幾個簡單的入門文檔,提供了一個完整打包可運行的下載,有興趣的自己看github頁面吧。 Wiki文檔放在:
        https://github.com/killme2008/Metamorphosis/wiki
       
         客戶端Maven依賴包括,可自行選擇添加:
    <dependency>
        <groupId>com.taobao.metamorphosis</groupId>
        <artifactId>metamorphosis-client</artifactId>
        <version>1.4.0.2</version>
    </dependency>

    <dependency>
        <groupId>com.taobao.metamorphosis</groupId>
        <artifactId>metamorphosis-client-extension</artifactId>
        <version>1.4.0.2</version>
    </dependency>

    <dependency>
        <groupId>com.taobao.metamorphosis</groupId>
        <artifactId>storm-metamorphosis-spout</artifactId>
        <version>1.0.0</version>
    </dependency>

         ps.我開通了新浪微博,有興趣相互關注下:http://weibo.com/fnil,你看,偏見是可以改變的。

    posted @ 2012-03-16 10:39 dennis 閱讀(8389) | 評論 (12)編輯 收藏

    僅列出標題
    共56頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
    主站蜘蛛池模板: 国产亚洲国产bv网站在线| 亚洲成av人片天堂网无码】| 16女性下面扒开无遮挡免费| 亚洲欧美成aⅴ人在线观看| 亚洲性日韩精品一区二区三区| 无码午夜成人1000部免费视频| 亚洲综合久久精品无码色欲| 久久精品国产亚洲Aⅴ蜜臀色欲| 57pao国产成永久免费视频| 亚洲色精品三区二区一区| 国产成人亚洲精品91专区手机| 成人免费福利视频| 国产精品成人啪精品视频免费| 78成人精品电影在线播放日韩精品电影一区亚洲| 成年私人影院免费视频网站| 中国一级全黄的免费观看| 久久国产亚洲精品| 亚洲AV综合色一区二区三区| 国产成人免费a在线视频app| 亚洲免费在线视频| 无码AV动漫精品一区二区免费| 亚洲国产精品免费在线观看| 在线播放亚洲第一字幕| 香蕉高清免费永久在线视频| 久久精品视频免费看| 视频一区二区三区免费观看| 亚洲伊人久久大香线蕉| 亚洲av无码国产精品色午夜字幕| 亚洲Av无码精品色午夜| 国产男女猛烈无遮档免费视频网站| 久久免费视频精品| 特黄特色的大片观看免费视频| 91丁香亚洲综合社区| 亚洲综合视频在线| 亚洲色自偷自拍另类小说| 国产精品黄页在线播放免费| 一个人看的www在线观看免费| 久久精品一区二区免费看| 国产精品免费观看视频| 国产在亚洲线视频观看| 久久久久se色偷偷亚洲精品av|