精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

【故障現(xiàn)場】多線程性能優(yōu)化最大的坑,99%人都不自知

開發(fā) 前端
訂單詳情頁耗時(shí)嚴(yán)重,p99 將近3秒,已經(jīng)驗(yàn)證影響用戶體驗(yàn),本次迭代小艾專門對該接口進(jìn)行優(yōu)化。迭代剛上線,該接口的響應(yīng)時(shí)間大幅降低,p99 降低到 800 毫秒以內(nèi),大家紛紛向小艾發(fā)來祝賀。但好景不長,隨著流量的增加,接口響應(yīng)時(shí)間也在逐漸變長,p99 超過 5 秒,最后系統(tǒng)拋出大量的 RejectedExecutionException 異常,這個(gè)接口不可用。最終,QA伙伴火速進(jìn)行回滾操作,系統(tǒng)恢

1. 問題&分析

當(dāng)我們在處理慢接口問題時(shí),經(jīng)常會使用多線程技術(shù),將能夠并行處理的任務(wù)拆分到不同的線程中處理,等任務(wù)處理完成后,再收集各線程的處理結(jié)果,進(jìn)行后續(xù)的處理。整體思路如下圖所示:

圖片圖片

這樣可以將并行部分的總耗時(shí)從 sum 降為 max,從而大幅降低接口的響應(yīng)時(shí)間。

1.1. 案例

訂單詳情頁耗時(shí)嚴(yán)重,p99 將近3秒,已經(jīng)驗(yàn)證影響用戶體驗(yàn),本次迭代小艾專門對該接口進(jìn)行優(yōu)化。迭代剛上線,該接口的響應(yīng)時(shí)間大幅降低,p99 降低到 800 毫秒以內(nèi),大家紛紛向小艾發(fā)來祝賀。但好景不長,隨著流量的增加,接口響應(yīng)時(shí)間也在逐漸變長,p99 超過 5 秒,最后系統(tǒng)拋出大量的 RejectedExecutionException 異常,這個(gè)接口不可用。最終,QA伙伴火速進(jìn)行回滾操作,系統(tǒng)恢復(fù)正常。

系統(tǒng)恢復(fù)后,小艾仔細(xì)查看系統(tǒng)監(jiān)控,CPU使用率并不高,內(nèi)存也處于正常水位,接口性能居然比優(yōu)化前還差,真心不知道哪里出了問題。

優(yōu)化前代碼:

public RestResult<OrderDetailVO> getOrderDetail(@PathVariable Long orderId){
        Stopwatch stopwatch = Stopwatch.createStarted();
        OrderService.Order order = this.orderService.getById(orderId);
        if (order == null){
            return RestResult.success(null);
        }
        OrderDetailVO orderDetail = new OrderDetailVO();
        orderDetail.setUser(userService.getById(order.getUserId()));
        orderDetail.setAddress(addressService.getById(order.getUserAddressId()));
        orderDetail.setCoupon(couponService.getById(order.getCouponId()));
        orderDetail.setProduct(productService.getById(order.getProductId()));
        log.info("串行 Cost {} ms", stopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
        return RestResult.success(orderDetail);
}

優(yōu)化前耗時(shí):

圖片圖片

優(yōu)化后代碼:

public RestResult<OrderDetailVO> getOrderDetailNew(@PathVariable Long orderId){
        Stopwatch stopwatch = Stopwatch.createStarted();
        OrderService.Order order = this.orderService.getById(orderId);
        if (order == null){
            return RestResult.success(null);
        }
        Future<UserService.User> userFuture = this.executorService.submit(() -> userService.getById(order.getUserId()));
        Future<AddressService.Address> addressFuture = this.executorService.submit(() -> addressService.getById(order.getUserAddressId()));
        Future<CouponService.Coupon> couponFuture = this.executorService.submit(() -> couponService.getById(order.getCouponId()));
        Future<ProductService.Product> productFuture = this.executorService.submit(() -> productService.getById(order.getProductId()));

        OrderDetailVO orderDetail = new OrderDetailVO();
        orderDetail.setUser(getFutureValue(userFuture));
        orderDetail.setProduct(getFutureValue(productFuture));
        orderDetail.setAddress(getFutureValue(addressFuture));
        orderDetail.setCoupon(getFutureValue(couponFuture));
        log.info("并行 Cost {} ms", stopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
        return RestResult.success(orderDetail);
    }

優(yōu)化后耗時(shí):

圖片圖片

可見采用并行優(yōu)化后,接口的響應(yīng)時(shí)間從 4 秒 將至 1 秒,效果還是非常明顯的。

但,繼續(xù)加大請求量,系統(tǒng)便出現(xiàn)問題,如下圖所示:

圖片圖片

圖片

在流量逐漸增加的過程中,從日志中可以得到以下信息:

初期耗時(shí)穩(wěn)定,基本在 1 秒左右

接口耗時(shí)逐漸增大,甚至遠(yuǎn)超串行處理的耗時(shí)(大于 4 秒)

有些請求直接拋出 RejectedExecutionException 異常

1.2. 問題分析

從代碼中并未發(fā)現(xiàn)任何問題,設(shè)計(jì)思路也非常清晰,其核心問題在線程池使用上,項(xiàng)目線程池配置如下:

int coreSize = Runtime.getRuntime().availableProcessors();
executorService = new ThreadPoolExecutor(coreSize, coreSize * 5,
        5L, TimeUnit.MINUTES,
        new LinkedBlockingQueue<Runnable>(1024)
        );

核心配置為:

  1. 核心線程數(shù)為 cpu 核數(shù)
  2. 最大線程數(shù)為 cpu 核數(shù)的 5 倍
  3. 空閑線程存活時(shí)間為 5 分鐘
  4. 任務(wù)隊(duì)列為 LinkedBlockingQueue 大小為 1024

在這個(gè)配置下,我們推演下以上的三個(gè)現(xiàn)象。

1.2.1. 線程資源充足

如下圖所示:

圖片圖片

整體流程如下:

  1. 主線程向線程池提交 Task
  2. 由于線程處于空閑狀態(tài),立即接受并處理問題
  3. 線程池線程處理完任務(wù),將最終的處理結(jié)果寫回到 Future
  4. 主線程等待所有任務(wù)執(zhí)行完成,獲取所有執(zhí)行結(jié)果,然后執(zhí)行后續(xù)流程

這正是想要的執(zhí)行結(jié)果,任務(wù)被并行執(zhí)行,大幅降低接口耗時(shí)。

1.2.2. 任務(wù)進(jìn)入等待隊(duì)列

隨著流量的增加,所有的核心線程都處于忙碌狀態(tài),此時(shí)新任務(wù)將進(jìn)入等待隊(duì)列,具體如下:

圖片圖片

整體流入如下:

  1. 主線程向線程池提交任務(wù)
  2. 由于沒有核心線程可用,任務(wù)被放置到任務(wù)隊(duì)列
  3. 主線程進(jìn)入等待狀態(tài),等待時(shí)間包括兩部分:

任務(wù)在隊(duì)列中等待線程調(diào)度時(shí)間

任務(wù)分配到線程后,任務(wù)實(shí)際執(zhí)行時(shí)間

  1. 如果前面等待的任務(wù)非常多,那等待時(shí)間將變的非常長

主線程等待時(shí)間 = 隊(duì)列等待時(shí)間 + 任務(wù)執(zhí)行時(shí)間。當(dāng)任務(wù)隊(duì)列非常長時(shí),整體時(shí)間將遠(yuǎn)超串行執(zhí)行時(shí)間。

1.2.3. 資源耗盡觸發(fā)拒絕策略

流量繼續(xù)增加,線程池的任務(wù)隊(duì)列已滿并且線程數(shù)量也達(dá)到上限,此時(shí)會觸發(fā)拒絕策略,具體如下:

圖片圖片

線程池默認(rèn)拒絕策略為:AbortPolicy,直接拋出 RejectedExecutionException,從而觸發(fā)接口異常。

還有更可怕的情況,就是部分提交,也就是主線程已經(jīng)成功提交幾個(gè)任務(wù),如下圖所示:

圖片圖片

核心流程如下:

  1. 主線程已經(jīng)成功提交兩個(gè)任務(wù)
  2. 在提交第三個(gè)任務(wù)時(shí),由于資源不夠觸發(fā)拒絕策略,拋出異常導(dǎo)致主線程提前結(jié)束
  3. 已經(jīng)成功提交的任務(wù)仍舊會被線程執(zhí)行,由于主線程已經(jīng)退出,執(zhí)行結(jié)果沒有任何意義,從而白白浪費(fèi)系統(tǒng)資源

2. 解決方案

前面已經(jīng)分析的很清楚,問題的本質(zhì)就是線程池資源分配不合理,核心參數(shù)設(shè)置錯(cuò)誤:

  1. 隊(duì)列設(shè)置錯(cuò)誤。在該場景下,需要充分利用線程資源,將任務(wù)放入隊(duì)列會增加任務(wù)在隊(duì)列的等待時(shí)間,隊(duì)列長度越大對系統(tǒng)的傷害越大;
  2. 拒絕策略設(shè)置錯(cuò)誤。直接拋出異常會中斷主流程,導(dǎo)致部分無效任務(wù)(無意義任務(wù))提交,白白浪費(fèi)系統(tǒng)資源;

除線程池參數(shù)問題外,還有個(gè)小問題:主線程完成任務(wù)提交后處于等待狀態(tài),未執(zhí)行任何有意義的操作,存在資源浪費(fèi)。

2.1. 線程池改進(jìn)方案

改進(jìn)線程池如下所示:

int coreSize = Runtime.getRuntime().availableProcessors();
executorService = new ThreadPoolExecutor(coreSize, coreSize * 5,
        5L, TimeUnit.MINUTES,
        new SynchronousQueue<>(),
        new ThreadPoolExecutor.CallerRunsPolicy()
        );

線程池配置如下:

  1. 核心線程數(shù)不變,仍舊是 cpu 數(shù);
  2. 最大線程數(shù)不變,仍舊是 cpu 數(shù)的5倍;
  3. 空閑線程存活時(shí)間不變,仍舊是 5 分鐘;
  4. 使用 SynchronousQueue 替代 LinkedBlockingQueue(1024)。SynchronousQueue 是一個(gè)特殊的隊(duì)列,其最大容量是1。也就是說,任何一次插入操作都必須等待一個(gè)相應(yīng)的刪除操作,反之亦然。如果沒有相應(yīng)的操作正在進(jìn)行,則該線程將被阻塞;
  5. 指定拒絕策略為 CallerRunsPolicy。當(dāng)線程池資源不夠時(shí),由主線程來執(zhí)行任務(wù);

在這個(gè)配置下,及時(shí)線程池中的所有資源全部耗盡,也只會降級到串行執(zhí)行,不會讓系統(tǒng)變的更糟糕。

新配置下,系統(tǒng)表現(xiàn)如下:

圖片圖片

在最差的情況下也僅僅與串行執(zhí)行耗時(shí)一致。

總體來說就一句話:線程池有資源可用,那就為主線程分擔(dān)部分壓力;如果沒有資源可用,那就由主線程獨(dú)自完成。

2.1. 充分利用主線程

上面提到一個(gè)小問題,在資源充足情況下,所有任務(wù)均有線程池線程完成,主線程一致處于等待狀態(tài),存在一定的資源浪費(fèi)。

如下圖所示:

圖片圖片

3 個(gè)任務(wù)耗費(fèi) 4 個(gè)線程資源:

  1. 線程池3個(gè)線程負(fù)責(zé)執(zhí)行任務(wù)
  2. 主線程等待執(zhí)行結(jié)果,一直處于阻塞狀態(tài)

為了充分利用線程資源,可以讓主線程負(fù)責(zé)執(zhí)行任意一個(gè)任務(wù)。如下圖所示:

圖片圖片

主線程不在盲目等待,也負(fù)責(zé)一個(gè)任務(wù)的執(zhí)行,這樣 3 個(gè)任務(wù)只需 3 個(gè)線程即可。

代碼上也非常簡單,具體如下:

public RestResult<OrderDetailVO> getOrderDetailNew(@PathVariable Long orderId){
    Stopwatch stopwatch = Stopwatch.createStarted();
    OrderService.Order order = this.orderService.getById(orderId);
    if (order == null){
        return RestResult.success(null);
    }
    Future<UserService.User> userFuture = this.executorService.submit(() -> userService.getById(order.getUserId()));
    Future<AddressService.Address> addressFuture = this.executorService.submit(() -> addressService.getById(order.getUserAddressId()));
    Future<CouponService.Coupon> couponFuture = this.executorService.submit(() -> couponService.getById(order.getCouponId()));
//        Future<ProductService.Product> productFuture = this.executorService.submit(() -> productService.getById(order.getProductId()));

    OrderDetailVO orderDetail = new OrderDetailVO();
    // 由主線程負(fù)責(zé)運(yùn)行
    orderDetail.setProduct(productService.getById(order.getProductId()));

    orderDetail.setUser(getFutureValue(userFuture));
    orderDetail.setAddress(getFutureValue(addressFuture));
    orderDetail.setCoupon(getFutureValue(couponFuture));
    log.info("并行 Cost {} ms", stopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
    return RestResult.success(orderDetail);
}

主線程執(zhí)行不同的任務(wù),會對接口的響應(yīng)時(shí)間產(chǎn)生影響嗎?

不會,并行執(zhí)行整體耗時(shí)為 max(任務(wù)耗時(shí)),主線程必須獲取全部結(jié)果才能運(yùn)行,所以必須等待這么長時(shí)間。

  1. 如果主線程運(yùn)行的任務(wù)不是最耗時(shí)任務(wù),則需要等待最耗時(shí)任務(wù)執(zhí)行完成才能執(zhí)行后續(xù)邏輯;
  2. 如果主線程運(yùn)行的是最耗時(shí)任務(wù),則其他線程已經(jīng)執(zhí)行完成并提前釋放資源;

3. 示例&源碼

代碼倉庫:https://gitee.com/litao851025/learnFromBug

代碼地址:https://gitee.com/litao851025/learnFromBug/tree/master/src/main/java/com/geekhalo/demo/thread/paralleltask


責(zé)任編輯:武曉燕 來源: geekhalo
相關(guān)推薦

2024-09-29 09:27:10

2024-09-27 09:31:25

2025-04-14 09:31:03

2022-12-15 19:27:33

多線程代碼性能

2019-12-26 09:56:34

Java多線程內(nèi)部鎖

2024-03-18 09:24:12

RocketMQ消息模型分布式

2024-11-05 16:29:57

2010-01-28 09:55:05

性能優(yōu)化

2022-07-20 07:45:15

多線程程序性能

2009-06-12 16:55:10

VPN客戶端故障

2018-10-25 15:55:44

Java多線程鎖優(yōu)化

2024-01-29 09:22:59

死鎖線程池服務(wù)

2025-04-16 10:10:00

互聯(lián)網(wǎng)DNS網(wǎng)絡(luò)

2024-03-28 12:51:00

Spring異步多線程

2018-07-03 10:49:22

性能故障排查

2025-02-25 12:00:00

Java線程開發(fā)

2023-04-27 08:35:20

Webpack 4性能優(yōu)化

2019-06-06 14:21:32

SQL過濾測試

2023-05-31 08:19:23

Webpack4Webpack 5

2021-10-15 06:49:37

MySQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

456成人影院在线观看| 外国精品视频在线观看| 永久91嫩草亚洲精品人人| 欧美成人bangbros| 久久人妻精品白浆国产| 浪潮av一区| 99re热这里只有精品视频| 国产精品美女无圣光视频| 中文字幕av久久爽av| 日韩av三区| 欧美一区二区三区成人| 爱福利视频一区二区| 国产在线1区| xnxx国产精品| 97在线资源站| 中文字幕777| 国产视频欧美| 九九精品视频在线观看| 日本一卡二卡在线播放| 六月丁香久久丫| 欧美一区二区三区婷婷月色| 超碰影院在线观看| 草美女在线观看| 日韩美女久久久| 天天综合色天天综合色hd| 色哟哟国产精品色哟哟| 国产精品一区二区男女羞羞无遮挡 | 91大神免费观看| 九九九伊在线综合永久| 精品国产乱码久久久久久天美| 在线观看欧美激情| 国产免费a∨片在线观看不卡| 波多野结衣中文一区| 亚洲自拍另类欧美丝袜| 在线视频1卡二卡三卡| 久久精品观看| 欧美一区二区视频97| 国产小视频在线观看免费| 希岛爱理一区二区三区| 日韩中文字幕在线播放| 免费视频91蜜桃| 亚洲人成网77777色在线播放| 亚洲成人av中文字幕| 日本r级电影在线观看| 婷婷激情成人| 91精品国产综合久久久久久| 在线观看岛国av| 久久电影天堂| 欧美日韩亚洲综合在线 | 91免费看视频| 国产一区精品视频| 四季av日韩精品一区| 懂色av噜噜一区二区三区av| 97人人做人人人难人人做| jlzzjlzzjlzz亚洲人| 国产精品一区在线观看乱码 | 99免费视频观看| www.精品| 欧美视频一区在线| 九九热精品在线播放| 亚洲一区av| 欧美一区二区三区播放老司机| 亚洲熟女乱综合一区二区| 亚洲一区二区三区日本久久九 | 日韩在线免费看| 久久嫩草精品久久久精品| 欧美日韩国产一二| 成人三级黄色免费网站| 中文字幕一区在线| 亚洲色图都市激情| av中文字幕在线看| 欧美日韩亚洲天堂| 超碰在线97免费| 成人av在线播放| 日韩精品中文字幕在线不卡尤物 | 国产精品看片你懂得| 欧美大胆人体bbbb| 欧美激情啊啊啊| 国产喷水在线观看| 欧美午夜一区| 日本精品久久久久久久| 特级西西444www高清大视频| 国内外成人在线视频| 亚洲一区亚洲二区| 色哟哟国产精品色哟哟| 国产欧美日韩另类一区| 欧美做受777cos| 涩涩视频在线播放| 欧美放荡的少妇| 久久一区二区电影| 日本久久精品| 欧美精品videosex牲欧美| 国产一区二区视频免费| 国产一二三精品| 开心色怡人综合网站| 麻豆网站视频在线观看| 亚洲成人精品一区| 麻豆三级在线观看| 成人动漫视频| 日韩在线视频一区| 日韩精品成人在线| 狠狠色丁香婷婷综合| 久久国产手机看片| 国产黄色小视频在线| 日韩欧美在线视频日韩欧美在线视频| www.亚洲高清| 青青一区二区| 美日韩精品免费观看视频| 天堂中文在线网| 国产老肥熟一区二区三区| 久久综合伊人77777麻豆| 在线三级中文| 欧美日韩视频在线一区二区| 99久久人妻精品免费二区| 91精品国产乱码久久久久久久| 51色欧美片视频在线观看| 国产理论片在线观看| 国产亚洲欧美日韩在线一区| 国产玉足脚交久久欧美| 伊人久久大香| 尤物九九久久国产精品的分类| 日韩三级av在线| 国产精品影视天天线| 亚洲精品电影在线一区| 成人性教育av免费网址| 亚洲国产毛片完整版| 成人在线观看小视频| 热久久免费视频| 欧美成人一区二区在线| 91av久久| 亚洲国产精品久久91精品| 久久久久久久久毛片| 狠狠色综合色综合网络| 亚洲欧洲一区二区在线观看| 九九热线视频只有这里最精品| 亚洲国产一区二区三区四区| 免费人成年激情视频在线观看| 激情综合色播激情啊| 伊人婷婷久久| 精品久久毛片| 色黄久久久久久| 91精品国产91久久久久| 欧美视频www| 激情综合网最新| 中文字幕av导航| 久久亚洲精品人成综合网| 国产一区二区三区四区福利| 国产又大又黄视频| 26uuu成人网一区二区三区| 无码中文字幕色专区| 动漫av一区| 国外色69视频在线观看| 日本高清视频www| 天天综合天天综合色| 添女人荫蒂视频| 美女精品在线| 亚洲欧洲日韩综合二区| 一区二区三区| 久久99久久99精品中文字幕| 成人毛片在线精品国产| 亚洲成人7777| 亚洲天堂视频一区| 蜜桃视频第一区免费观看| 亚洲一区二区不卡视频| 欧美午夜在线播放| 欧美丰满片xxx777| 日本黄视频在线观看| 一本一道波多野结衣一区二区| 一区二区三区久久久久| 久久黄色级2电影| 99视频精品全部免费看| 澳门久久精品| 国产精品第1页| 麻豆91在线| 欧美精品一区二区三区蜜臀| 国产精品suv一区二区三区| 久久嫩草精品久久久久| 8x8x成人免费视频| 国产综合色产| 欧美二区在线| 欧美亚洲福利| 久久久午夜视频| 国产女人在线观看| 欧美日韩精品系列| 久草资源在线视频| 91小视频免费观看| 天天综合网久久| 在线视频观看日韩| 亚洲精品二区| 国产成人在线中文字幕| 国产精品吊钟奶在线| caopo在线| 亚洲色无码播放| 亚洲黄色在线免费观看| 在线视频亚洲一区| 久久艹精品视频| 欧美国产成人精品| 国产原创剧情av| 九色porny丨国产精品| 黄色一级片在线看| 国产精品99一区二区三| 蜜桃视频在线观看成人| 精品久久亚洲| 国产精品极品美女在线观看免费 | 97超级碰在线看视频免费在线看| www亚洲人| 亚洲精品福利免费在线观看| 国产孕妇孕交大片孕| 色综合一个色综合| 国产在线一区视频| 中文字幕一区二区三区乱码在线 | 一级中文字幕一区二区| 欧美三级视频网站| av午夜一区麻豆| www.久久com| 美女爽到高潮91| 黄色片久久久久| 亚洲日本激情| 久久亚洲国产成人精品无码区| 青青草综合网| 欧美激情论坛| 小说区图片区色综合区| 国产精品 日韩| 国产精品亚洲综合在线观看| 国产精品久久久久久久美男 | 少妇大叫太粗太大爽一区二区| 国产久卡久卡久卡久卡视频精品| 色多多视频在线播放| 午夜综合激情| 乱妇乱女熟妇熟女网站| 欧美特黄一区| 亚洲国产一二三精品无码| 国产精品久久久久久久免费观看| 日韩在线三区| 伊人久久大香线蕉综合网站| 久久婷婷开心| 久久精品福利| 好吊色欧美一区二区三区视频 | 久久国产精品99久久人人澡| 亚洲男人天堂色| 久久久久一区| 9久久婷婷国产综合精品性色| 日韩激情视频在线观看| 黄色三级视频片| 美女高潮久久久| 久久婷五月综合| 久久精品久久久精品美女| 久久久久久蜜桃一区二区| 日本女优在线视频一区二区| 午夜视频你懂的| 久久精品国产一区二区三| 国产精品自在自线| 激情综合色丁香一区二区| 色哟哟在线观看视频| 国产精品一区二区在线看| 性一交一黄一片| 懂色av一区二区三区免费看| 影音先锋黄色资源| 久久综合资源网| 波多野在线播放| 国产精品成人免费在线| 小早川怜子一区二区的演员表| 一区二区在线看| 日产精品久久久久久久| 色婷婷综合视频在线观看| av手机天堂网| 欧美精品一二三区| 精品女同一区二区三区| 亚洲第一区中文字幕| 偷拍自拍在线| 日韩最新免费不卡| 欧美xxxxhdvideosex| 欧美制服第一页| 国精品产品一区| 成人欧美一区二区| 九九久久成人| 中文字幕制服丝袜在线| 伊人久久久大香线蕉综合直播| 成年人免费大片| 国产在线精品免费| 五十路六十路七十路熟婆| 欧美激情一二三区| 加勒比av在线播放| 色欧美乱欧美15图片| 国产精品一级二级| 日韩精品中文字幕视频在线| 在线视频自拍| 午夜精品久久久久久久男人的天堂| 深夜成人福利| 99中文字幕| 精品盗摄女厕tp美女嘘嘘| 91精品国产毛片武则天| 久久欧美肥婆一二区| 日韩不卡的av| 久久久精品黄色| 久久艹精品视频| 精品视频1区2区3区| 人人妻人人玩人人澡人人爽| 深夜福利亚洲导航| 亚洲风情在线资源| 97超碰人人看人人| 色喇叭免费久久综合网| 成人午夜精品久久久久久久蜜臀| 免费高清在线一区| 精品无码国产一区二区三区51安| 亚洲欧洲精品天堂一级| 一级片中文字幕| 日韩欧美国产一区二区三区| www.久久热.com| 欧美亚洲另类视频| 亚洲成人黄色| 先锋影音男人资源| 日韩中文字幕1| 艳妇乳肉豪妇荡乳xxx| **网站欧美大片在线观看| 国产免费一区二区三区四区五区| 精品福利在线导航| 精品美女在线观看视频在线观看| 日本精品一区二区三区在线播放视频 | 精品露脸国产偷人在视频| 国产免费黄色片| 日韩中文理论片| 欧美暴力调教| 奇米精品在线| 久久精品一区二区国产| 艳妇乳肉豪妇荡乳xxx| 亚洲伊人色欲综合网| 99精品免费观看| 日韩有码在线电影| 男女啪啪999亚洲精品| 视频一区二区综合| 久久在线91| 欧美图片一区二区| 欧美性极品xxxx娇小| 污污视频在线免费看| 久久欧美在线电影| 91成人精品在线| 韩国无码av片在线观看网站| 国产精品综合二区| 国产高清在线免费观看| 91精品国产丝袜白色高跟鞋| 秋霞成人影院| 国产日韩在线观看av| 99久久九九| 亚洲男人天堂2021| 亚洲欧美aⅴ...| 亚洲av无码乱码国产精品久久 | 成人免费短视频| 精品午夜一区二区三区| 亚洲永久字幕| 天天躁日日躁aaaxxⅹ| 91久久久免费一区二区| 成人精品一区二区三区免费| 国产精品久久二区| 国产精品国产一区| 不许穿内裤随时挨c调教h苏绵| 亚洲主播在线观看| 色丁香婷婷综合久久| 日本国产高清不卡| 日韩精品一区二区三区免费观影| 污污网站在线观看视频| 亚洲激情在线激情| 黄色av免费观看| 456亚洲影院| 久久精品国产大片免费观看| 欧美成人手机在线视频| 一区二区三区中文字幕精品精品| 动漫av一区二区三区| 欧美有码在线观看| 日韩精品一区二区久久| 动漫av在线免费观看| 欧美日韩精品在线播放| av在线之家电影网站| 亚洲专区国产精品| 国产模特精品视频久久久久| 人人爽人人爽人人片| 日韩欧美一区中文| 最新中文字幕在线播放| 亚洲国产日韩综合一区| 国产a区久久久| 日韩一级片中文字幕| 久久国产精品久久国产精品| 久久久久高潮毛片免费全部播放| www.色偷偷.com| 一区二区三区高清| 韩国三级在线观看久| 亚洲一区亚洲二区| 美女精品网站| 久久久久亚洲av成人片| 亚洲色图色老头| 91精品短视频| 999精品视频在线| 亚洲高清免费视频| 四虎久久免费| 久久er99热精品一区二区三区 | 欧美性感一区二区三区| 色呦呦在线观看视频| 五月天国产一区| 99视频精品全部免费在线| 国产一区二区小视频|