国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

簡歷寫著熟悉 Dubbo,居然連 Dubbo 線程池監(jiān)控都不知道?

共 21171字,需瀏覽 43分鐘

 ·

2022-07-09 06:52

程序員的成長之路
互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享 
關(guān)注


閱讀本文大概需要 8 分鐘。

來自:網(wǎng)絡(luò)

Dubbo 是一款優(yōu)秀的微服務(wù)框架,它以其高性能、簡單易用、易擴展等特點,廣泛應(yīng)用于互聯(lián)網(wǎng)、金融保險、科技公司、制造業(yè)、零售物流等多個領(lǐng)域。如今,Dubbo 框架已經(jīng)成了互聯(lián)網(wǎng)開發(fā)中比較常用的技術(shù)框架。
在Dubbo框架中,當(dāng)客戶端調(diào)用服務(wù)端的時候,請求抵達(dá)了服務(wù)端之后,會有專門的線程池去接收參數(shù)并且處理。所以如果要實現(xiàn)Dubbo的線程池監(jiān)控,就需要先了解下Dubbo底層對于業(yè)務(wù)線程池的實現(xiàn)原理。

Dubbo底層對于線程池的查看

這里我所使用的框架是 Dubbo 2.7.8 版本,它在底層對于線程池的管理是通過一個叫做ExecutorRepository 的類處理的,這個類負(fù)責(zé)創(chuàng)建并管理 Dubbo 中的線程池,通過該擴展接口,我們可以獲取到Dubbo再實際運行中的業(yè)務(wù)線程池對象。
具體的處理邏輯部分如下所示:
package org.idea.dubbo.monitor.core.collect;
import org.apache.dubbo.common.extension.ExtensionLoader;
import org.apache.dubbo.common.threadpool.manager.DefaultExecutorRepository;
import org.apache.dubbo.common.threadpool.manager.ExecutorRepository;
import java.lang.reflect.Field;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
/**
 * @Author idea
 * @Date created in 7:04 下午 2022/6/29
 */

public class DubboThreadPoolCollector {
    /**
     * 獲取Dubbo的線程池
     * @return
     */

    public static ThreadPoolExecutor getDubboThreadPoolInfo(){
        //dubbo線程池數(shù)量監(jiān)控
        try {
            ExtensionLoader<ExecutorRepository> executorRepositoryExtensionLoader = ExtensionLoader.getExtensionLoader(ExecutorRepository.class);
            DefaultExecutorRepository defaultExecutorRepository = (DefaultExecutorRepository) executorRepositoryExtensionLoader.getDefaultExtension();
            Field dataField = defaultExecutorRepository.getClass().getDeclaredField("data");
            dataField.setAccessible(true);
            ConcurrentMap<String, ConcurrentMap<Integer, ExecutorService>> data = (ConcurrentMap<String, ConcurrentMap<Integer, ExecutorService>>) dataField.get(defaultExecutorRepository);
            ConcurrentMap<Integer, ExecutorService> executorServiceConcurrentMap = data.get("java.util.concurrent.ExecutorService");
            //獲取到默認(rèn)的線程池模型
            ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) executorServiceConcurrentMap.get(9090);
            return threadPoolExecutor;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
好了,現(xiàn)在我們知道如何在代碼中實時查看Dubbo線程池的信息了,那么接下來要做的就是如何采集這些線程池的數(shù)據(jù),并且進(jìn)行上報,最后將上報存儲的數(shù)據(jù)通過統(tǒng)計圖的方式展示出來。
下邊我們按照采集,上報,展示三個環(huán)節(jié)來展示數(shù)據(jù)。

采集數(shù)據(jù)

在采集數(shù)據(jù)這塊,有兩種思路去采集,分別如下:
  • 后臺開啟一個定時任務(wù),然后每秒都查詢一下線程池的參數(shù)信息。
  • 每次有請求抵達(dá)provider的時候,就查看一些線程池的參數(shù)信息。

采用兩種不同的模式采集出來的數(shù)據(jù),可能會有些差異,下邊是兩種方式的比對:
通過對實際的業(yè)務(wù)場景分析,其實第二種方式對應(yīng)用的性能損耗極微,甚至可以忽略,所以使用這種方式去采集數(shù)據(jù)的話會比較合適。
下邊讓我們一起來看看這種方式采集數(shù)據(jù)的話,該如何實現(xiàn)。
首先我們需要自己定義一個filter過濾器:
package org.idea.dubbo.monitor.core.filter;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.*;
import org.idea.dubbo.monitor.core.DubboMonitorHandler;
import java.util.concurrent.ThreadPoolExecutor;
import static org.idea.dubbo.monitor.core.config.CommonCache.DUBBO_INFO_STORE_CENTER;
/**
 * @Author idea
 * @Date created in 2:33 下午 2022/7/1
 */

@Activate(group = CommonConstants.PROVIDER)
public class DubboRecordFilter implements Filter {
    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        ThreadPoolExecutor threadPoolExecutor = DubboMonitorHandler.getDubboThreadPoolInfo();
        //請求的時候趣統(tǒng)計線程池,當(dāng)請求量太小的時候,這塊的數(shù)據(jù)可能不準(zhǔn)確,但是如果請求量大的話,就接近準(zhǔn)確了
        DUBBO_INFO_STORE_CENTER.reportInfo(9090,threadPoolExecutor.getActiveCount(),threadPoolExecutor.getQueue().size());
        return invoker.invoke(invocation);
    }
}
關(guān)于DUBBO_INFO_STORE_CENTER的代碼如下所示:
并且在dubbo的spi配置文件中指定好它們:
dubboRecordFilter=org.idea.dubbo.monitor.core.filter.DubboRecordFilter
當(dāng)provider加入了這個過濾器以后,若有請求抵達(dá)服務(wù)端,則會通過這個filter觸發(fā)采集操作。
package org.idea.dubbo.monitor.core.collect;
import org.idea.dubbo.monitor.core.bo.DubboInfoStoreBO;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
 * Dubbo數(shù)據(jù)存儲中心
 *
 * @Author idea
 * @Date created in 11:15 上午 2022/7/1
 */

public class DubboInfoStoreCenter {
    private static Map<Integer, DubboInfoStoreBO> dubboInfoStoreBOMap = new ConcurrentHashMap<>();
    public void reportInfo(Integer port, Integer corePoolSize, Integer queueLength) {
        synchronized (this) {
            DubboInfoStoreBO dubboInfoStoreBO = dubboInfoStoreBOMap.get(port);
            if (dubboInfoStoreBO != null) {
                boolean hasChange = false;
                int currentMaxPoolSize = dubboInfoStoreBO.getMaxCorePoolSize();
                int currentMaxQueueLength = dubboInfoStoreBO.getMaxCorePoolSize();
                if (corePoolSize > currentMaxPoolSize) {
                    dubboInfoStoreBO.setMaxCorePoolSize(corePoolSize);
                    hasChange = true;
                }
                if (queueLength > currentMaxQueueLength) {
                    dubboInfoStoreBO.setMaxQueueLength(queueLength);
                    hasChange = true;
                }
                if (hasChange) {
                    dubboInfoStoreBOMap.put(port, dubboInfoStoreBO);
                }
            } else {
                dubboInfoStoreBO = new DubboInfoStoreBO();
                dubboInfoStoreBO.setMaxQueueLength(queueLength);
                dubboInfoStoreBO.setMaxCorePoolSize(corePoolSize);
                dubboInfoStoreBOMap.put(port, dubboInfoStoreBO);
            }
        }
    }
    public DubboInfoStoreBO getInfo(Integer port){
        return dubboInfoStoreBOMap.get(port);
    }
    public void cleanInfo(Integer port) {
        dubboInfoStoreBOMap.remove(port);
    }
}
注意這個采集類只會采集一段時間的數(shù)據(jù),然后定期會清空重置。
之所以這么做,是希望用這個map統(tǒng)計指定時間內(nèi)的最大線程數(shù)和最大隊列數(shù),接著當(dāng)這些峰值數(shù)據(jù)被上報到存儲中心后就進(jìn)行清空。
關(guān)于DubboInfoStoreCenter對象的定義,我將它放置在了一個叫做CommonCache的類里面,具體如下:
package org.idea.dubbo.monitor.core.config;
import org.idea.dubbo.monitor.core.store.DubboInfoStoreCenter;
/**
 * @Author idea
 * @Date created in 12:15 下午 2022/7/1
 */

public class CommonCache {
    public static DubboInfoStoreCenter DUBBO_INFO_STORE_CENTER = new DubboInfoStoreCenter();
}
所以在上邊的過濾器中,我們才可以直接通過靜態(tài)類引用去調(diào)用它的采集接口。
好了,現(xiàn)在整體來看,我們已經(jīng)實現(xiàn)了在過濾器中去實時采集線程池的數(shù)據(jù),并且將它暫存在了一個Map表中,這個map的數(shù)據(jù)主要是記錄了某段時間內(nèi)的線程池峰值,供采集器角色去使用。
那么接下來,我們就來看看上報器模塊主要做了哪些操作。

上報數(shù)據(jù)

上報數(shù)據(jù)前,最重要的就是選擇合適的存儲組件了。首先上報的數(shù)據(jù)本身體量并不大,我們可以將采集時間短設(shè)置為15秒,那么設(shè)計一個上報任務(wù),每隔15秒采集一次dubbo線程池的數(shù)據(jù)。那么一天的時間就需上報5760次,假設(shè)一次上報存儲一條記錄的話,那么一天下來所需要存儲的數(shù)據(jù)也并不是特別多。
并且存儲下來的服務(wù)數(shù)據(jù)實際上也并不需要保留太長的時間,一般存儲個一周時間也就足夠了,所以最終我選用啦Redis進(jìn)行這方面的存儲。


我們實際每次關(guān)注的數(shù)據(jù)字段主要有三個,關(guān)于它們的定義我整理成了下邊這個對象:
package org.idea.dubbo.monitor.core.bo;
/**
 * @Author idea
 * @Date created in 7:17 下午 2022/6/29
 */

public class ThreadInfoBO {


    private Integer activePoolSize;
    private Integer queueLength;
    private long saveTime;
    public Integer getActivePoolSize() {
        return activePoolSize;
    }
    public void setActivePoolSize(Integer activePoolSize) {
        this.activePoolSize = activePoolSize;
    }
    public Integer getQueueLength() {
        return queueLength;
    }
    public void setQueueLength(Integer queueLength) {
        this.queueLength = queueLength;
    }
    public long getSaveTime() {
        return saveTime;
    }
    public void setSaveTime(long saveTime) {
        this.saveTime = saveTime;
    }
    @Override
    public String toString() {
        return "ThreadInfoBO{" +
                ", queueLength=" + queueLength +
                ", saveTime=" + saveTime +
                '}';
    }
}
接著會開啟一個線程任務(wù),每間隔15秒就會執(zhí)行一輪上報數(shù)據(jù)的動作:
package org.idea.dubbo.monitor.core.report;
import com.alibaba.fastjson.JSON;
import org.idea.dubbo.monitor.core.bo.DubboInfoStoreBO;
import org.idea.dubbo.monitor.core.bo.ThreadInfoBO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import static org.idea.dubbo.monitor.core.config.CommonCache.DUBBO_INFO_STORE_CENTER;
/**
 * @Author idea
 * @Date created in 12:13 下午 2022/7/1
 */

public class DubboInfoReportHandler implements CommandLineRunner {
    @Autowired
    private IReportTemplate reportTemplate;
    private static final Logger LOGGER = LoggerFactory.getLogger(DubboInfoReportHandler.class);
    public static ExecutorService executorService = Executors.newFixedThreadPool(1);
    public static int DUBBO_PORT = 9090;
    @Override
    public void run(String... args) throws Exception {
        executorService.submit(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(10000);
                        DubboInfoStoreBO dubboInfoStoreBO = DUBBO_INFO_STORE_CENTER.getInfo(DUBBO_PORT);
                        ThreadInfoBO threadInfoBO = new ThreadInfoBO();
                        threadInfoBO.setSaveTime(System.currentTimeMillis());
                        if(dubboInfoStoreBO!=null){
                            threadInfoBO.setQueueLength(dubboInfoStoreBO.getMaxQueueLength());
                            threadInfoBO.setActivePoolSize(dubboInfoStoreBO.getMaxCorePoolSize());
                        } else {
                           //這種情況可能是對應(yīng)的時間段內(nèi)沒有流量請求到provider上
                            threadInfoBO.setQueueLength(0);
                            threadInfoBO.setActivePoolSize(0);
                        }
                        //這里是上報器上報數(shù)據(jù)到redis中
                        reportTemplate.reportData(JSON.toJSONString(threadInfoBO));
                        //上報之后,這里會重置map中的數(shù)據(jù)
                        DUBBO_INFO_STORE_CENTER.cleanInfo(DUBBO_PORT);
                        LOGGER.info(" =========== Dubbo線程池數(shù)據(jù)上報 =========== ");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }
}
這類要注意下,Dubbo應(yīng)用的線程池上報任務(wù)應(yīng)當(dāng)?shù)日麄€SpringBoot應(yīng)用啟動成功之后再去觸發(fā),否則可能會有些許數(shù)據(jù)不準(zhǔn)確性。所以再定義Bean初始化線程的時候,我選擇了CommandLineRunner接口。
細(xì)心查看代碼的你可能會看到這么一個類:
org.idea.dubbo.monitor.core.report.IReportTemplate
這個類定義了數(shù)據(jù)上報器的基本動作,下邊是它的具體代碼:
package org.idea.dubbo.monitor.core.report;


/**
 * 上報模版
 *
 * @Author idea
 * @Date created in 7:10 下午 2022/6/29
 */

public interface IReportTemplate {
    /**
     * 上報數(shù)據(jù)
     *
     * @return
     */

    boolean reportData(String json);


}
實現(xiàn)類部分如下所示:
package org.idea.dubbo.monitor.core.report.impl;
import org.idea.dubbo.monitor.core.report.IReportTemplate;
import org.idea.qiyu.cache.redis.service.IRedisService;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.concurrent.TimeUnit;
/**
 * @Author idea
 * @Date created in 7:12 下午 2022/6/29
 */

@Component
public class RedisTemplateImpl implements IReportTemplate {
    @Resource
    private IRedisService redisService;
    private static String queueKey = "dubbo:threadpool:info:";
    @Override
    public boolean reportData(String json) {
        redisService.lpush(queueKey + LocalDate.now().toString(), json);
        redisService.expire(queueKey + LocalDate.now().toString(),7, TimeUnit.DAYS);
        return true;
    }


}
這里面我采用的是list的結(jié)構(gòu)去存儲這些數(shù)據(jù)指標(biāo),設(shè)定了一個過期時間為一周,最終存儲到redis之后的格式如下所示:

數(shù)據(jù)展示

好了,現(xiàn)在我們已經(jīng)完成了對線程池的監(jiān)控,最后只需要設(shè)計一個管理臺,從緩存中提取上報的數(shù)據(jù)并且進(jìn)行頁面的展示即可。
實現(xiàn)的邏輯比較簡單,只需要定義好統(tǒng)計圖所需要的數(shù)據(jù)結(jié)構(gòu),然后在controller曾返回即可,例如下圖所示:
最終展現(xiàn)出來的效果如下圖:
隨著請求dubbo接口的量發(fā)生變化,統(tǒng)計圖可以展示出dubbo線程池的數(shù)據(jù)變動情況。如果希望統(tǒng)計圖以實時的方式展示數(shù)據(jù)的話,其實只需要在js中寫一個定時調(diào)用的函數(shù)即可。
這里我是使用的是echart插件做的圖表渲染,我選用的是最簡單的統(tǒng)計圖類型,大家也可以根據(jù)自己的具體所需在echart的官網(wǎng)上選擇合適的模型進(jìn)行渲染,下邊這是echart的官網(wǎng)地址:
https://echarts.apache.org/examples/zh/index.html
<END>

推薦閱讀:

被呼吁抵制,7-Zip偽開源還留有后門?

Lombok原理和同時使?@Data和@Builder 的坑

互聯(lián)網(wǎng)初中高級大廠面試題(9個G)

內(nèi)容包含Java基礎(chǔ)、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊列、高性能緩存、反射、Spring全家桶原理、微服務(wù)、Zookeeper......等技術(shù)棧!

?戳閱讀原文領(lǐng)?。?/span>                                  朕已閱 

瀏覽 31
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 五月天激情片| 亚洲最新无码视频| 欧美中文字幕在线| 成人免费A片在线观看直播96| 日韩v欧美v日本v亚洲v国产v| 亚洲综合伊人| 久久久国产精品视频| 免费涩涩无遮挡18国产| 欧洲肥胖BBBBBBBBBB| 亚洲人妻中文字幕| 北条麻妃高清无码| 国产尤物视频| 影音先锋在线成人| 婷婷五月天青草| 亚洲天堂网在线观看| 国产在线观看黄色| 亚洲免费黄色视频| 人人草在线| 在线无码播放| 色噜噜av| 精品久久精品| AV网站在线免费观看| 欧美午夜激情视频| 亚洲无码黄色片| 天天射夜夜骑| 亚洲成人av| 麻豆av无码| 中文字幕免费在线播放| 69er小视频| 羽月希奶水饱胀在线播放| 成人黄色电影在线观看| 3344在线观看免费下载视频 | 五月婷婷六月丁香| 精品国产A片| 午夜免费性爱视频| 一本色道综合久久欧美日韩精品 | 三级网站在线播放| 五月天激情性爱| 青娱乐精品在线视频| 久久夜色视频网| 麻豆视频在线看| 69成人精品国产| 91蝌蚪视频在线观看| 黄色视频导航| www.91熊猫成人网| 人妻无码中文字幕蜜桃| 亚洲AV片一区二区三区| 香蕉网站操逼片| 免费黄色在线观看| 久久精品福利视频| 中文字幕不卡在线观看| 亚洲免费三级| 亚洲操操| 日韩啊v| 国产精品码ls字幕影视| 2020无码| 欧美怡红院视频| 久久久国产一区二区三区| 2019中文字幕在线免费观看 | a级黄色视频免费观看| 日韩二区| 偷拍一区| 无码人妻一区二区一牛影视| 午夜无码AV| 自拍三级片| 成人日批视频| 欧美浮力影院| 18禁污网站| 欧美高潮| 91久九九| 成人自拍视频在线| 偷拍一区二区三区| 青娱乐一级无码| 91网站在线免费观看| 翔田千里在线一区二区三区| 国产骚逼视频| 国产色婷婷一区二区| 亚州AV操屄| 亚洲一级黄色电影| 国产大鸡吧| 大地影院在线资源观看| 在线观看黄色av| 国产小骚逼| 蜜桃av秘无码一区二区三欧| 亚洲图片欧美另类| 欧美成人精品激情在线视频 | 午夜在线观看视频18| 免费精品视频| 北条麻妃网站| 亚洲操逼片| 欧美日韩性爱| 欧美AAA视频| 中文字幕人妻一区| 欧美成人三区性价比| 国内老熟妇对白HDXXXX| 淫淫五月天| 久久一二三区| 秋霞国产| 日韩伊人| av自拍| 俄罗斯熟妇搡BBBB搡BBBB| 制服乱伦| 可以免费看的av| 男男做受A片AAAA| 国产欧美日韩| 亚洲小视频在线| 亚洲无码AV一区二区三区| 中文在线a√在线8| 91欧美视频| 麻豆A∨在线| 依人成人| 国产精品国产成人国产三级| 欧美另类视频| 国产suv精品一区二区6| 91狠狠综合| 一级片免费观看| 天天干天天做| 91爱爱| 日韩人妻无码一区二区三区中文 | 欧美成人黄色A片| 色噜噜AV| 亚洲一区在线免费观看| 九九乱伦| 婷婷五月综合网| 免费69视频| 欧美色婷婷| www.| 久热99| 欧美在线不卡综合| 欧美午夜精品一区二区蜜桃| 日日免费视频| 亚洲高清无码在线观看视频| 精品久久久无码| 男人天堂网av| 欧美h在线观看| 青草无码| BBB搡BBB搡BBB搡BBB | 黄色一级片视频| 极品一区| 91人妻无码| 精品夜夜澡人妻无码AV| 亚洲aV影院| 伊人综合成人网| 性性性性性XXXXX| 伊人大香焦网| 五月激情丁香婷婷| 777777国产7777777| 国产香蕉av| 一级一级一级做a免费一级做a| 美女91视频| 福利久久| 天天日天天舔| 久久777| 五月天婷婷操逼视频| 日色色色| 337P大胆粉嫩银噜噜噜| 国产精品在线免费观看| 欧美中文字幕| 亚洲精品久久久久久久久久久| 福利视频二区| 黄色免费大片| 蜜臀久久99精品久久久巴士| 国产叼嘿视频| 日本一区二区三区四区在线观看| 午夜传媒一区二区三区| 永久AV免费网站| 日韩免费视频观看| 水蜜桃在线观看视频| 爱看福利视频| 久久婷婷视频| 色吧视频| 国产aaaaaaaaaaaaa| 免费观看亚洲视频| 日韩精品视频一区二区三区| 波多野结衣av中文字幕| 97国产超碰| 黄色三级视频在线观看| 国产又粗又长又硬黄色一级片| 国产成人精品a视频| 午夜福利视频无码| 老司机一区二区| 黄视频在线观看免费| 国产成人无码区亚洲A片356p| 日韩欧美在线免费观看| 亚洲无码成人电影| 国产AV日韩AⅤ亚洲AV中文| 人妻无码精品蜜桃| 尤物yw| 北条麻妃在线视频聊天| 91人人草| 久久毛片| 日本少妇久久| 操逼激情视频| www.五月丁香| 亚洲天堂成人网| av天天干| 欧美老女人操逼群| 北条麻妃九九九在线视频| 日韩在线三级片| 特级婬片A片AAA毛片AA做头 | 精品视频免费观看| 97欧美| 五月丁香欧美| 美女大吊,网站视频| 18禁成人A∨片| 一级黄色生活片| 亚洲激情片| 久久亚洲AV| 日韩黄色视频| 91精品国产一区二区三区四区大| 国产成人无码精品一区秘二区| 成人精品一区二区区别解析| 九色PORNY国产成人| 在线观看a片| 精品中文一区二区三区| www,久久久| 久操欧美| 亚洲无码AV电影| 国产三级黄色AV| 91白丝喷水自慰网站| 三级片亚洲无码| 日韩中文一区| 无码人妻视频| 一区二区三区四区不卡| 美女高潮在线| 精品美女视频在线观看免费软件| 一区二区三区无码在线| 五月天干美女| 亚洲中文字幕成人| 在线观看日韩av| 操逼影视| 天天操嫩逼无套视频| 操美女的网站| 91久热| 欧亚av| 亚洲中文字幕在线观看视频网站| 91porn国产| 福利国产在线| 青娱乐99| 国产性爱一级片| 伊人久久无码| 国产情侣在线视频| 99欧美| 一本色道久久综合狠狠| 狠狠狠狠狠狠狠狠狠| 日韩高清一级| 天天干天天干| 操屄视频免费观看| 在线免费观看亚洲| 江苏妇搡BBBB搡BBB| 91黄色在线视频| 精品视频999| 青青超碰| 动图综合亚洲综合欧美男男| 亚洲中文字幕成人| 免费在线观看黄视频| 国产黄色在线视频| 极品在线视频| 成人爽爽视频| 日本午夜福利电影| 第四色网站| 婷婷综合一区| 特级西西WWW444人体聚色| 人人操碰成人网| 亚洲三级在线免费观看| 国产在线视频导航| 日韩在线免费视频| 中文字幕永久在线视频| 麻豆性爱视频| 色交视频| 久久秘成人久久无码| 国产日韩一区二区| 亚洲欧洲在线视频| 内射视频免费看| 国产一区二区三区在线观看免费视频免费视频免费视频 | 99久久99久久| 大香蕉欧美| 8050午夜一级| 国精产品久拍自产在线网站| 蜜柚av| 日韩中文无码电影| 日韩高清无码人妻| 欧美怡春院| 午夜精品久久久久久久91蜜桃 | 午夜精品18视频国产| 免费看黄在线看| 久久精品福利视频| 夜夜撸夜夜操| 亚洲中文综合| 成人毛片网站| 日韩無码专区| 国产内射无码| 久久久久久久香蕉视频| 国产熟妇码视频app| 狠狠草视频| 青青草视频免费看| 欧美在线免费视频| 一级操逼| 成人黃色A片免费看| 欧美精品人妻| 国产在线| 亚洲欧美成人在线视频| 日本一区二区三区免费视频| 91视频在线免费观看app| 69国产精品成人无码视频色| 97人妻| 国产午夜精品一区二区三区嫩A| 黄色二区| 可以看的三级网站| 超碰一区| 日本在线播放| 97精品久久| 男人天堂v| 亚洲成人无码片| 亚洲最大黄色视频| 三级片国产| 色欲av网站| 婷婷视频在线| 日韩AV免费在线播放| 黄片网页| 91操美女视频| 俺来俺也去| 伊人成人在线观看| 狼色AV| 久久午夜无码鲁丝片午夜精| 一级操逼大片| 西西人体大胆裸体A片| 欧美性国产| 91西安站街老熟女露脸| 欧美性爱自拍| 人人妻人人操人人干| 日韩va中文字幕无码免费| 丁香婷婷久久久综合精品国产| 激情六月丁香| 日韩免费在线视频| 精品国产毛片| 综合+夜夜| 天天干欧美| 欧美猛交| 男女一区| 国产又爽又黄免费视频免费| AA免费视频| 精品国产污污免费网站入口| 亚洲AV秘一区二区色盗战流出| 88AV在线视频| 日韩无码毛片| 亚洲大片在线观看| 人妻少妇精品| 一区二区经典| 黄色大片在线免费观看| 国产性爱免费视频| 日韩一级a| 日韩视频在线观看一区| 自拍偷拍成人视频| 揄拍成人国产精品视频| 天堂在线中文字幕| 色五月婷婷五月天激情| 中国操逼| 在线免费高清无码| 国产成人精品免高潮在线人与禽一 | 一区二区三区av| 3D动漫精品一区二区在线播放免费| a√天堂中文8| a级片在线观看| 闷骚艳岳的婬乱生活视频| 欧美熟妇高潮流白浆| 五月激情综合网| 国产理论在线| 青青草无码视频| 成人影视在线免费观看| 国产成人AV片| 高清视频一区| 福利视频一区| 99精品国自产在线| 91精品人妻| 中文字幕日本无码| 青误乐在线播放| 日韩欧美国产精品综合嫩V| 色操人 | 91人人妻人人澡| 黄色激情av| 国产黄色在线免费观看| 亚洲香蕉视频网站| 欧美v在线| 超碰1999| 精品视频在线免费观看| 成人免费黄色视频网站| 啪啪啪免费网站| 国产乱子伦-区二区三区熟睡91| 欧洲尤物不卡播放六区| 黄色片视频| 成人做爰100部片视频| 午夜成人福利片| 丁香花在线高清完整版视频| 天天日天天射天天操| 国产男女无套免费| 免费A片国产毛无码A片| 在线观看无码高清视频| www.日韩精品| 国产91视频在线观看| 亚洲AV无码成人精品区天堂小说 | 国产精品成人AV片| 中文无码一区二区三区四区| 欧美成人精品一区二区| 欧美性爱视频免费观看| 国产真实乱婬A片三区高清蜜臀| 国精产品九九国精产品| 大香蕉久在线| 操碰人人| 亚洲色涩| 日韩精品三区| 高潮流水视频| 精品福利一区二区三区| 爱操逼综合网| av无码免费在线观看| 日韩在线视频播放| 青青免费在线视频| 悠悠AV导航| 又大又黄又爽| 日本人妻在线播放| 99无码视频| 超碰2023| 在线观看免费完整版中文字幕视频| 又黄又爽无遮挡| 四库影库| 伊人久久大| 狠狠躁日日躁夜夜躁A片男男视频 精品无码一区二区三区蜜桃李宗瑞 | 白嫩外女BBwBBwBBw| 婷婷玖玖| 超碰国产在线| 88在线无码精品秘入口九色 | 国产香蕉AV| 免费黄色在线视频| 伊人综合大香蕉| 亚洲AV无码日韩AV无码导航| 激情五月天影院| 黄片网站在线免费观看| 操逼免费看| eeuss一区二区| 精品人妻一区二区三区日产乱码 | 欧美日韩一区二区三区四区| 性A免费在线播放| 一区二区视频在线| 亚洲中文字幕在线无码| 精品人妻一区二区三区鲁大师| 亚洲欧美日韩高清| 成人亚洲精品一区二区三区| 男人的天堂黄色| 麻豆自拍偷拍视频| 日韩色导航| a在线免费| 免费欧美黄色| 亚洲丁香五月激情| 欧美老熟妇乱大交XXXXX| 日韩群交视频| 吴梦梦《女教师时间暂停》| av在线资源网| 2016超碰| 迷奸91| 91亚洲精品乱码久久久久久蜜桃 | 国产色情性黄片Av网站| 亚洲人成色777777无码| 911国产视频| 人人操人妻| 各国熟女HD合集| 在线观看免费人成视频| www.蜜桃| 特级A级毛片| 亚洲黄色在线播放| 9I看片成人免费视频| 天天做夜夜操| 国产综合久久久777777色胡同| 亚洲福利女神成人福利| 欧美性爱XXXX黑人XYX性爽| 成人aV免费观看| 北条麻妃网址| 国产高清无码一区| 欧美成人电影| 亚洲色五月| 刘玥一区二区三区| 久久私拍视频| 欧美操逼图| 欧美丰满人妻| 欧美国产操逼| 久久伊人春色| 亚洲视频免费看| 91丨九色丨蝌蚪丨丝袜| 综合激情av| 99亚洲精品| 久久久久久性爱| 天天舔天天操| 最新中文字幕视频| 国产一区二区AV| 色色播| 伊人三级片| 青青在线| 黄色成人在线免费观看| 亚洲无码一区在线| 69堂在线观看| 在线播放你懂的| 夜色福利在线| 成人无码91| 亚洲AV综合色区无码国产播放| 天堂中文在线视频| 这里只有精品久久| 综合AV在线| 韩日无码人妻| 日韩视频在线观看免费| 熟睡侵犯の奶水授乳在线| 亚洲无码。| 中文字幕码精品视频网站| 色色五月婷婷| 熟睡侵犯の奶水授乳在线| 国产在线观看无码| av福利在线观看| 18XXX亚洲HD护士JD| 黄色一级免费看| 亚洲色图自拍| 日本三级黄色视频| 97色综合| 精品乱子伦一区二区三区免费播成| 亚洲伊人成人| 91av在线免费播放| 特黄视频| 亚洲第一色网站| 九色PORN视频成人蝌蚪自拍| 伊人伊人网| 老司机无码| 欧美一区二区在线观看| 日韩成人在线观看视频| 亚洲无码一卡二卡| 色欲色欲一区二区三区| 亚洲天堂av在线观看| 久久国内视频| 国产日本在线| 97久久精品| 九九惹伊人| 国产美女精品久久AV爽| 中文字幕亚洲日韩| 91久久国产综合久久91精品网站 | 日韩无码三级片| 亚洲一区二区三| 精品国产偷拍| 亚洲ww国产a大作| 不卡AV在线播放| 99久热| 黄片免费观看视频| 岛国AV在线播放| 夜夜福利| 亚洲欧美在线成人| 亚洲啊v| 日韩在线一区二区| 久久99老妇伦国产熟女| 北条麻妃人妻中文字幕91影视| 日本视频免费| 色小哥| 影音先锋中文字幕资源| 亚洲成人性爱| 亚洲福利视频网| 午夜AV在线观看| 国产白丝精品91爽爽久久| 乱伦乱伦乱伦中文字幕| 欧美午夜精品一区二区蜜桃 | 中文字幕第98页| 三级无码中文| 亚洲另类自拍| 一区二区三区Av| 免费看黄色电影| 丁香婷婷色五月激情综合三级三级片欧美日韩国 | 国产精品无码7777777| 国产日韩二区| 亚洲一区自拍| 国产偷拍精品视频| 中文字幕综合网| 亚洲爱爱视频| 91精品国产日韩91久久久久久 | 操逼AV无码| 日韩毛片视频| 成人性爱视频在线观看| 91亚洲高清| 麻豆乱伦视频| 婷婷五月中文| 精品久久免费一区二区三区| 激情啪啪网站| 亚洲在线高清视频| 一区二区三区不卡视频| 69黄色视频| 国精产品一二四区黑人| 亚洲射| 九九九AV| 麻豆一区在线| a日韩| 亚洲成人在线视频观看| 久久丁香五月婷婷五月天激情视频| 国产免费视频| 怡红院男人的天堂| 男人天堂视频网| 超碰免费观看| 操逼逼网站| 91大神shunv| 三区在线观看| 亚洲日韩成人AV| JlZZJLZZJlZZ亚洲女人17| 成人性生活A级毛片网站| 人妻少妇精品视频| 国产激情在线播放| 欧美激情亚洲| 毛片小说| 黄色片一区二区| 日韩精品在线免费| 中文无码在线观看中文字幕av中文| 超碰九九热| 国产免费啪啪视频| 亚洲一区自拍| 先锋影音男人| 精品国产免费观看久久久_久久天天| 成人网站在线观看免费| 国产高清无码在线| 熟女人妻人蜜桃视频| 91无码精品国产| 色综合久久天天综合网| 国产高清色| 国产精品久久久久无码| 免费看毛片网站| 豆花视频久久| 国内精品久久久久久久久久变脸| 免费看黄色的网站| 日本少妇BBw| 91精彩视频| 国产精品自拍一区| 亚洲日韩中文无码| 亚洲综合免费观看高清完整| 欧美夜夜草视频| 青娱乐AV| 欧美黄色一级| 亚洲av在线观看| 中文字幕不卡+婷婷五月| 午夜成人精品视频| 大香蕉三级片| 中文字幕在线网站| 伊人天天干| ww国产| 久久艹视频| 亚洲xxxxx| 肏屄视频在线| 无码在线电影| 成人三级电影在线观看| 日韩综合另类| 99免费观看视频| 一二三区视频| 婷婷亚洲色| 欧美群交在线观看| 91日日夜夜| 黄色视频在线观看国产| 欧美中文日韩| 黄色视频在线观看国产| caopro| 欧美一級黃色A片免費看| 丝袜足交在线| 亚洲AV成人无码精品直播在线| 黄色视频在线观看国产| 免费av在线播放| 婷婷亚洲色| 抽插视频免费| 人人看人人做| 欧美黑吊大战白妞| 香蕉伊人在线| 免费视频a| 丁香久久| 99热国产精品| 日韩操逼片| 国产小视频在线观看| 一级黄片免费看| www.cao| 国产无码AV大片| 婷婷情色五月| 人人看人人搞人人摸| 欧美成人aaa| 亚洲北条麻妃一级A片| 91在线看18| 欧美老妇XX| 无码欧美人XXXXX日本无码 | 久激情内射婷内射蜜桃欧美一级| 大香蕉在线伊人| 亚洲成人一级片| 国产精品1区2区| 热热AV| 日韩国产成人| 欧美去干网| 91久色| 国产激情视频在线| 青娱乐极品久久| 色色色无码| 肏逼在线观看| 91在线无码精品秘软件| 中文字幕在线播放av| 91av在线观看视频| 国产在线看片| 成人亚洲av| 无码1区| 亚洲不卡在线观看| 日韩黄色无码视频| 国产—a毛—a毛A免费| 青青草在线视频免费观看| 少妇免费视频| 高清无码一区| 天堂精品在线| 国产AAA片| 日本黄色视频。| 免费黄色av网址| 鸡巴操骚逼视频| 51妺嘿嘿午夜福利在线| 91视频在线免费看| 91久久婷婷国产| 亚洲午夜福利电影| www色色| 日韩成人精品中文字幕| 97人妻碰碰中文无码久热丝袜 | 精品国内自产拍在线观看视频| 久久精品视频一区| 欧美日韩毛片| 性欧美| 大香蕉91| 国产一级一片免费播放放a| 韩国午夜激情| 特级毛片av| 91网站观看| 人人看人人艹| 嫩草久久| 国产高清色| 久久免费视频观看| 国产精品无码一区二区在线欢| 亚洲香蕉视频| 精品国产乱码久久久久夜深人妻| 亚洲国产精品18久久久久久| 欧美久久性爱视频| 丁香五月天天| 亚洲av自拍| 亚洲成人黄色网| 精品人妻一区二区三区-国产精品 无码人妻av黄色一区二区三区 | 亚洲中文字幕有码| 成年片| 国内精品卡一卡二卡三| 欧美性爱免费网站| 99久久久成人国产精品| 欧美日韩有码视频网址大全 | 亚洲无码视频在线观看高清| 狠狠操狠狠插| 国产中文字字幕乱码无限| 亚洲在线成人视频| 免费播放婬乱男女婬视频国产| 草逼小视频| 中文字幕不卡+婷婷五月| 97无码免费| 日韩无码中文字| www.re99| 波多无码在线| 潮喷av| 成人一级A片| 青青草无码在线视频| 久热中文在线观看精品视频| 人妻无码人妻| 国产成人黄色| 在线免费观看黄色片| 足浴小少妇-88AX| 超碰天天干天天摸| 免费观看黄色一级片| 在线色| 亚洲天堂精品视频| 大香蕉伊人av| 国产精品自拍视频| 黄片视频链接| 99欧美精品| 欧美日日干| 在线观看黄色AV| 亚洲成人免费视频| 北条麻纪视频| 中文字幕乱码中文乱码图片 | 国产乱国产乱300精品| 麻豆91麻豆国产传媒| 精品福利一区二区三区| 欧美日韩美女| 香蕉伊人视频| 日韩免费黄色电影| 中文字幕一区二区三区四区| 亚洲V在线观看| 日韩国产三级| 中国老女人性爱视频| 午夜男女福利| 亚州精品无码| 苍井空在线播放| 在线免费中文字幕| 北条麻妃在线不卡| 99在线观看免费视频| 懂色av粉嫩AV蜜臀AV| 一区二区国产视频| 中文字幕有码在线看| 亚洲国产免费| 亚洲成人一区二区三区| 五月婷婷免费视频| 中文字幕精品1| 国产亚洲欧美精品综合在线| 亚洲性爱中文字幕| 内射午夜福利在线免费观看视频| 一级片麻豆| 蝌蚪久久| 欧美婷婷五月天| 国产高清视频在线| 欧一美一伦一A片| 青草青在线| 亚洲无码在线视频播放| 国产乱国产乱老熟300部视频| 九九九在线观看视频| www激情| 亚洲精品乱码久久久久久| 免费看黃色AAAAAA片| 尹人香蕉久久| 在线播放一区二区三区| 日韩午夜电影| 日本乱伦视频| 免费看一级高潮毛片| 欧美国产操逼| 日韩中文一区| 婷婷丁香六月| 亚洲欧美在线一区| 精品国产久久久久久| 色婷婷Av| 青误乐在线播放| 高清无码视频免费版本在线观看 | 乱子伦国产精品视频一级毛| 97人妻一区二区三区| 高清无码免费视频| 另类激情网| 狠狠干天天日| 国产色av| 十八禁网站在线| 人人妻天天干| 狠狠干狠狠色| 成人在线乱码视频| 9一区二区三区| 激情深爱五月天| www色色| 亚洲天堂福利| 国产成人午夜精品无码区久久麻豆| 亲子乱AⅤ一区二区三区| 精品國產一區二區三區久久蜜月| 黄色免费AV| 超碰A片| 国产精品视频免费观看| 小黄片免费看| 国产三级AV在线| 偷拍三区| 亚洲操逼图片| 亚洲射| 大香蕉一区二区三区| 51午夜福利| 毛片精品| 一本大道东京热av无码| 思思精品在线| 熟女人妻视频| 日逼一级片| 日日碰狠狠躁久久躁婷婷| 日韩一区在线播放| 91在线精品一区二区| 久久黄色视频免费看| 婷婷操逼网| 香蕉伊人在线| 久久婷婷影院| 国产精品自拍三级| 国产做受91| 精品久久久999| 久久99网站| 日本不卡一区| 国产女人高潮的AV毛片| 久久久精品免费视频| 大香蕉国产在线| 躁BBB躁BBB躁BBBBBB日视频| 色噜噜AV| 安徽妇搡BBBB搡BBBB小说| 深爱激情综合网| AV天堂无码| 东京热久久综合色五月老师| XXXX国产| 97热热| 国产精品久久久久久久久A| 国产草莓视频| 久久久一区二区三区四区| 日韩不卡高清在线观看视频| 成人性爱在线视频| 国产第一页在线观看| 国产性受XXXXXYX性爽| 欧美成人在线视频网站| 天天狠狠| 男女黄色免费网站| 久久99精品久久久水蜜桃| 狠狠干五月| 9久9久9久9久女女女女| 天天日天天色| 午夜精品久久久久久久99热精东| www四虎|