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

Rust 性能提升“最后一公里”:詳解 Profiling 瓶頸定位與優化

開發 前端
在性能優化領域,盲目猜測是最大的禁忌。你需要一把鋒利的“手術刀”,精準地找到問題的根源。在 Rust 生態中,雖然不像 Java 社區那樣擁有 VisualVM 或 JProfiler 這類功能強大的成熟工具,但我們依然可以搭建一套高效的性能分析體系。

一、Profiling:揭示性能瓶頸的“照妖鏡”

二、配置項目:讓 Profiling “武裝到牙齒”

三、全局配置:啟動 Profiling 開關

四、實現 Profile 生成函數:打造你的“數據采集器”

    1.  內存 Profile 生成函數

    2. CPU Profile 生成函數

五、觸發和使用 Profiling:隨時隨地捕捉性能數據

六、性能剖析:火焰圖下的“真相”

七、優化方案:從“每次新建”到“共享復用”

八、優化效果:性能數據“一飛沖天”

一、 Profiling:揭示性能瓶頸的“照妖鏡”

在過去的一年里,我們團隊完成了一項壯舉:將近萬核的 Java 服務成功遷移到 Rust,并收獲了令人矚目的性能提升。我們的實踐經驗已在《RUST練習生如何在生產環境構建萬億流量》一文中與大家分享。然而,在這次大規模遷移中,我們觀察到一個有趣的現象:大多數服務在遷移后性能都得到了顯著提升,但有那么一小部分服務,性能提升卻不盡如人意,僅僅在 10% 左右徘徊。

這讓我們感到疑惑。明明已經用上了性能“王者”Rust,為什么還會遇到瓶頸?為了解開這個謎團,我們決定深入剖析這些“低提升”服務。今天,我就來和大家分享,我們是如何利用 Profiling 工具,找到并解決寫入過程中的性能瓶頸,最終實現更高性能飛躍的!

在性能優化領域,盲目猜測是最大的禁忌。你需要一把鋒利的“手術刀”,精準地找到問題的根源。在 Rust 生態中,雖然不像 Java 社區那樣擁有 VisualVM 或 JProfiler 這類功能強大的成熟工具,但我們依然可以搭建一套高效的性能分析體系。

為了在生產環境中實現高效的性能監控,我們引入了 Jemalloc 內存分配器和 pprof CPU 分析器。這套方案不僅支持定時自動生成 Profile 文件,還可以在運行時動態觸發,極大地提升了我們定位問題的能力。

二、配置項目:讓Profiling“武裝到牙齒”

首先,我們需要在 Cargo.toml 文件中添加必要的依賴,讓我們的 Rust 服務具備 Profiling 的能力。以下是我們的配置,Rust 版本為 1.87.0。

[target.'cfg(all(not(target_env = "msvc"), not(target_os = "windows")))'.dependencies]
# 使用 tikv-jemallocator 作為內存分配器,并啟用性能分析功能
tikv-jemallocator = { version = "0.6", features = ["profiling", "unprefixed_malloc_on_supported_platforms"] }
# 用于在運行時控制和獲取 jemalloc 的統計信息
tikv-jemalloc-ctl = { version = "0.6", features = ["use_std", "stats"] }
# tikv-jemallocator 的底層綁定,同樣啟用性能分析
tikv-jemalloc-sys = { version = "0.6", features = ["profiling"] }
# 用于生成與 pprof 兼容的內存剖析數據,并支持符號化和火焰圖
jemalloc_pprof = { version = "0.7", features = ["symbolize","flamegraph"] }
# 用于生成 CPU 性能剖析數據和火焰圖
pprof = { version = "0.14", features = ["flamegraph", "protobuf-codec"] }

簡單來說,這幾個依賴各司其職:

※ tikv-jemallocator

基于 jemalloc 的 Rust 實現,以其高效的內存管理聞名。

※ jemalloc_pprof

負責將 jemalloc 的內存剖析數據轉換成標準的 pprof 格式。

※ pprof

用于 CPU 性能分析,可以生成 pprof 格式的 Profile 文件。

三、全局配置:啟動Profiling開關

接下來,在 main.rs 中進行全局配置,指定 Jemalloc 的 Profiling 參數,并將其設置為默認的全局內存分配器。

// 配置 Jemalloc 內存分析參數
#[export_name = "malloc_conf"]
pub static malloc_conf: &[u8] = b"prof:true,prof_active:true,lg_prof_sample:16\0";


#[cfg(not(target_env = "msvc"))]
use tikv_jemallocator::Jemalloc;


// 將 Jemalloc 設置為全局內存分配器
#[cfg(not(target_env = "msvc"))]
#[global_allocator]
static GLOBAL: Jemalloc = Jemalloc;

這段配置中的 lg_prof_sample:16 是一個關鍵參數。

它表示 jemalloc 會對大約每 2^16 字節(即 64KB)的內存分配進行一次采樣。這個值越大,采樣頻率越低,內存開銷越小,但精度也越低;反之則精度越高,開銷越大。在生產環境中,我們需要根據實際情況進行權衡。

四、實現Profile生成函數:打造你的“數據采集器”

我們將 Profile 文件的生成邏輯封裝成異步函數,這樣就可以在服務的任意時刻按需調用,非常靈活。

內存Profile生成函數

#[cfg(not(target_env = "msvc"))]
async fn dump_memory_profile() -> Result<String, String> {
    // 獲取 jemalloc 的 profiling 控制器
    let prof_ctl = jemalloc_pprof::PROF_CTL.as_ref()
        .ok_or_else(|| "Profiling controller not available".to_string())?;


    let mut prof_ctl = prof_ctl.lock().await;
    
    // 檢查 profiling 是否已激活
    if !prof_ctl.activated() {
        return Err("Jemalloc profiling is not activated".to_string());
    }
   
    // 調用 dump_pprof() 方法生成 pprof 數據
    let pprof_data = prof_ctl.dump_pprof()
        .map_err(|e| format!("Failed to dump pprof: {}", e))?;


    // 使用時間戳生成唯一文件名
    let timestamp = chrono::Utc::now().format("%Y%m%d_%H%M%S");
    let filename = format!("memory_profile_{}.pb", timestamp);


    // 將 pprof 數據寫入本地文件
    std::fs::write(&filename, pprof_data)
        .map_err(|e| format!("Failed to write profile file: {}", e))?;


    info!("Memory profile dumped to: {}", filename);
    Ok(filename)
}

CPU Profile生成函數

類似地,我們使用 pprof 庫來實現 CPU Profile 的生成。

#[cfg(not(target_env = "msvc"))]
async fn dump_cpu_profile() -> Result<String, String> {
    use pprof::ProfilerGuard;
    use pprof::protos::Message;


    info!("Starting CPU profiling for 60 seconds...");


    // 創建 CPU profiler,設置采樣頻率為 100 Hz
    let guard = ProfilerGuard::new(100).map_err(|e| format!("Failed to create profiler: {}", e))?;


    // 持續采樣 60 秒
    tokio::time::sleep(std::time::Duration::from_secs(60)).await;


    // 生成報告
    let report = guard.report().build().map_err(|e| format!("Failed to build report: {}", e))?;


    // 使用時間戳生成文件名
    let timestamp = chrono::Utc::now().format("%Y%m%d_%H%M%S");
    let filename = format!("cpu_profile_{}.pb", timestamp);


    // 創建文件并寫入 pprof 數據
    let mut file = std::fs::File::create(&filename)
        .map_err(|e| format!("Failed to create file: {}", e))?;


    report.pprof()
        .map_err(|e| format!("Failed to convert to pprof: {}", e))?
        .write_to_writer(&mut file)
        .map_err(|e| format!("Failed to write profile: {}", e))?;


    info!("CPU profile dumped to: {}", filename);
    Ok(filename)
}
  •  ProfilerGuard::new()   100  Hz 意味著每秒鐘會隨機中斷程序 100 次,以記錄當前正在執行的函數調用棧
  • tokio::time::sleep(std::time::Duration::from_secs(60)).await 表示 pprof 將會持續采樣 60 秒鐘
  •  guard.report().build() 這個方法用于將收集到的所有采樣數據進行處理和聚合,最終生成一個 Report 對象。這個 Report 對象包含了所有調用棧的統計信息,但還沒有轉換成特定的文件格式
  •  report.pprof() 這是 Report 對象的一個方法,用于將報告數據轉換成 pprof 格式

五、觸發和使用 Profiling:隨時隨地捕捉性能數據

有了上述函數,我們實現了兩種靈活的觸發方式。

※ 定時自動生成

通過異步定時任務,每隔一段時間自動調用 dump_memory_profile() 和  dump_cpu_profile() 。

fn start_profilers() {
    // Memory profiler
    tokio::spawn(async {
        let mut interval = tokio::time::interval(std::time::Duration::from_secs(300));
        loop {
            interval.tick().await;
            #[cfg(not(target_env = "msvc"))]
            {
                info!("Starting memory profiler...");
                match dump_memory_profile().await {
                    Ok(profile_path) => info!("Memory profile dumped successfully: {}", profile_path),
                    Err(e) => info!("Failed to dump memory profile: {}", e),
                }
            }
        }
    });
    // 同理可以實現CPU profiler
}

※ 手動 HTTP 觸發

通過提供 /profile/memory 和 /profile/cpu 兩個 HTTP 接口,可以隨時按需觸發 Profile 文件的生成。

async fn trigger_memory_profile() -> Result<impl warp::Reply, std::convert::Infallible> {
    #[cfg(not(target_env = "msvc"))]
    {
        info!("HTTP triggered memory profile dump...");
        match dump_memory_profile().await {
            Ok(profile_path) => Ok(warp::reply::with_status(
                format!("Memory profile dumped successfully: {}", profile_path),
                warp::http::StatusCode::OK,
            )),
            Err(e) => Ok(warp::reply::with_status(
                format!("Failed to dump memory profile: {}", e),
                warp::http::StatusCode::INTERNAL_SERVER_ERROR,
            )),
        }
    }
}
//同理也可實現trigger_cpu_profile()函數
fn profile_routes() -> impl Filter<Extract = impl Reply, Error = warp::Rejection> + Clone {
    let memory_profile = warp::post()
        .and(warp::path("profile"))
        .and(warp::path("memory"))
        .and(warp::path::end())
        .and_then(trigger_memory_profile);
    
    
    let cpu_profile = warp::post()
        .and(warp::path("profile"))
        .and(warp::path("cpu"))
        .and(warp::path::end())
        .and_then(trigger_cpu_profile);
    memory_profile.or(cpu_profile)
}

現在,我們就可以通過 curl 命令,隨時在生產環境中采集性能數據了:

curl -X POST http://localhost:8080/profile/memory
curl -X POST http://localhost:8080/profile/cpu

生成的 .pb 文件,我們就可以通過 go tool pprof 工具,啟動一個交互式 Web UI,在瀏覽器中直觀查看調用圖、火焰圖等。

go tool pprof -http=localhost:8080 ./target/debug/otel-storage ./otel_storage_cpu_profile_20250806_032509.pb

六、性能剖析:火焰圖下的“真相”

通過 go tool pprof 啟動的 Web UI,我們可以看到程序的火焰圖。

如何閱讀火焰圖

※ 頂部

代表程序的根函數。

※ 向下延伸

子函數調用關系。

※ 火焰條的寬度

代表該函數在 CPU 上消耗的時間。寬度越寬,消耗的時間越多,越可能存在性能瓶頸。

CPU ProfileCPU Profile

Memory ProfileMemory Profile

在我們的 CPU 火焰圖中,一個令人意外的瓶頸浮出水面:OSS::new 占用了約 19.1% 的 CPU 時間。深入分析后發現, OSS::new 內部的 TlsConnector 在每次新建連接時都會進行 TLS 握手,這是導致 CPU 占用過高的根本原因。

原來,我們的代碼在每次寫入 OSS 時,都會新建一個 OSS 實例,隨之而來的是一個全新的 HTTP 客戶端和一次耗時的 TLS 握手。盡管 oss-rust-sdk 內部有連接池機制,但由于我們每次都創建了新實例,這個連接池根本無法發揮作用!

七、優化方案:從“每次新建”到“共享復用”

問題的核心在于重復創建 OSS 實例。我們的優化思路非常清晰:復用 OSS 客戶端實例,避免不必要的 TLS 握手開銷。

優化前

每次寫入都新建 OSS 客戶端。

fn write_oss() {
    // 每次寫入都新建一個OSS實例
    let oss_instance = create_oss_client(oss_config.clone());
    tokio::spawn(async move {
        // 獲取寫入偏移量、文件名
        // 構造OSS寫入所需資源和頭信息
        // 寫入OSS
        let result = oss_instance
            .append_object(data, file_name, headers, resources)
            .await;
}
fn create_oss_client(config: OssWriteConfig) -> OSS {
    OSS::new(
    ……
    )
}

這種方案在流量較小時可能問題不大,但在萬億流量的生產環境中,頻繁的實例創建會造成巨大的性能浪費。

優化前

※ 共享實例

讓每個處理任務( DecodeTask )持有 Arc<OSS> 共享智能指針,確保所有寫入操作都使用同一個 OSS 實例。

let oss_client = Arc::new(create_oss_client(oss_config.clone()));
let oss_instance = self.oss_client.clone(); 
// ...
let result = oss_instance
    .append_object(data, file_name, headers, resources)
    .await;

※ 自動重建機制

為了應對連接失效或網絡問題,我們引入了自動重建機制。當寫入次數達到閾值或發生寫入失敗時,我們會自動創建一個新的 OSS 實例來替換舊實例,從而保證服務的健壯性。

// 使用原子操作確保多線程環境下的計數安全
let write_count = self.oss_write_count.load(std::sync::atomic::Ordering::SeqCst);
let failure_count = self.oss_failure_count.load(std::sync::atomic::Ordering::SeqCst);


// 檢查是否需要重建實例...
fn recreate_oss_client(&mut self) {
 
    let new_oss_client = Arc::new(create_oss_client(self.oss_config.clone()));
    self.oss_client = new_oss_client;
    self.oss_write_count.store(0, std::sync::atomic::Ordering::SeqCst);
    self.oss_failure_count.store(0, std::sync::atomic::Ordering::SeqCst);
    // 記錄OSS客戶端重建次數指標
    OSS_CLIENT_RECREATE_COUNT
        .with_label_values(&[])
        .inc();
    info!("OSS client recreated");
}

八、優化效果:性能數據“一飛沖天”

優化后的服務上線后,我們觀察到了顯著的性能提升。

CPU 資源使用率

同比下降約 20%。

圖片圖片

OSS 寫入耗時

同比下降約 17.2%,成為集群中最短的寫入耗時。

※ OSS寫入耗時

圖片圖片

※ OSS相關資源只占千分之一

圖片圖片

內存使用率內存使用率

平均下降 8.77%,這部分下降可能也得益于我們將內存分配器從 mimalloc 替換為 jemalloc 的綜合效果。

圖片圖片

這次優化不僅解決了特定服務的性能問題,更重要的是,它驗證了在 Rust 中通過 Profiling 工具進行深度性能分析的可行性。即使在已經實現了初步性能提升的 Rust 服務中,仍然存在巨大的優化空間。

未來,我們將繼續探索更高效的 Profiling 方案,并深入挖掘其他潛在的性能瓶頸,以在萬億流量的生產環境中實現極致的性能和資源利用率。

 引用 

責任編輯:武曉燕 來源: 得物技術
相關推薦

2015-04-23 10:30:42

華為

2022-07-29 09:03:17

AIOPS運維工具

2025-02-11 00:11:00

NULL運算篩選

2022-07-26 07:35:30

數據庫HTAP系統

2012-04-10 09:05:49

無線交換機

2015-12-11 10:46:01

2012-09-24 15:07:09

云ERP恩信科技云應用

2022-04-19 08:09:11

PON光纖網絡

2011-12-25 20:54:57

移動支付

2017-02-21 13:30:42

數據網絡終端

2017-02-21 12:30:21

數據中心智能終端網絡

2017-09-04 16:49:25

2023-12-12 08:31:44

智能運維場景

2009-09-07 11:47:22

無線交換機

2015-11-03 13:55:44

物聯網最后一公里

2015-08-26 20:04:43

2018-01-12 05:13:35

2019-12-16 09:33:08

浪潮
點贊
收藏

51CTO技術棧公眾號

97精品久久久| 日韩精品在线观看一区二区| 特级西西444| 全国男人的天堂网| 日本不卡视频在线| 欧美大片网站在线观看| 这里只有久久精品| 中文无码日韩欧| 久草网在线观看| 欧美综合久久| 亚洲精品在线免费观看视频| 污视频免费在线观看网站| 欧美黑人xx片| 国产精品你懂的在线欣赏| 99在线热播| 懂色av蜜臀av粉嫩av喷吹| 国一区二区在线观看| 一本色道久久88综合日韩精品 | 国产一线二线在线观看| 国产午夜精品一区二区三区四区| 51国产成人精品午夜福中文下载| 欧美人一级淫片a免费播放| 亚洲高清久久| 成年人精品视频| 国产精品视频在| 一区二区小说| 亚洲国产精品大全| 日韩欧美色视频| 成人亚洲综合| 91电影在线观看| 国产精品va无码一区二区| 在线观看h网| 中文字幕制服丝袜一区二区三区| 麻豆亚洲一区| 午夜成人免费影院| 成人国产一区二区三区精品| 91免费视频国产| 岳乳丰满一区二区三区| 天堂成人国产精品一区| 隔壁老王国产在线精品| 91日韩中文字幕| 国产精品久久久久久久久久10秀 | 精灵使的剑舞无删减版在线观看| 亚洲欧洲日产国产综合网| 日本精品二区| 黄色网址在线播放| 久久久久国色av免费看影院| 牛人盗摄一区二区三区视频| 天天插天天干天天操| 从欧美一区二区三区| 成人欧美一区二区三区视频 | 丁香另类激情小说| 成人av免费电影| 亚洲精品国产一区二| 国产91富婆露脸刺激对白| 成人激情av| 免费国产精品视频| 99精品国产91久久久久久| 精品欧美一区二区三区久久久| 欧美 日韩 国产 成人 在线| 成人动漫视频在线| 精品一区二区三区自拍图片区| 五十路在线视频| 91论坛在线播放| 日韩伦理一区二区三区av在线| 国产黄色片在线播放| 国产精品久久看| 国产四区在线观看| 免费污视频在线| 精品久久中文字幕久久av| 国产91在线视频观看| 香蕉久久免费电影| 欧美精品xxxxbbbb| 人妻 丝袜美腿 中文字幕| 久久综合社区| 一区二区福利视频| 极品颜值美女露脸啪啪| 99视频精品免费观看| 日本一区二区三区在线播放| 中文字字幕在线中文乱码| 国模娜娜一区二区三区| 国产精品自拍首页| 韩日在线视频| 亚洲精品国产一区二区精华液 | 男女裸体影院高潮| 三级在线观看视频| 欧美日韩精品一区二区三区四区| 日本wwwxx| 亚洲精品推荐| 美女撒尿一区二区三区| 亚洲精品男人的天堂| 蓝色福利精品导航| 国产一区二区不卡视频在线观看| 国产露出视频在线观看| 亚洲尤物在线视频观看| 亚洲中文字幕久久精品无码喷水| 不卡精品视频| 国产视频精品在线| 日本a级片视频| 久久先锋资源| 国产精品二区三区四区| 幼a在线观看| 午夜国产精品一区| 中文字幕第一页在线视频| 日韩精品丝袜美腿| 久久影院中文字幕| 最近中文字幕av| 99国产精品视频免费观看| japanese在线视频| 亚洲欧美在线成人| 亚洲国产女人aaa毛片在线| 小嫩苞一区二区三区| 99精品久久| 91视频99| 久久久久久国产精品免费无遮挡 | 久久久久久久久久久国产| 在线观看黄色网| 久久免费看少妇高潮| 国产精品va在线观看无码| 日本a人精品| 亚洲欧美日韩区| 久久草视频在线| 国产电影一区二区三区| 一区国产精品| 另类一区二区三区| 国产亚洲综合久久| 蜜臀精品一区二区三区| 99麻豆久久久国产精品免费| 国产av熟女一区二区三区| 97久久中文字幕| 久久激情视频久久| 夜夜爽8888| 国产精品视频观看| 香港日本韩国三级网站| 中国av一区| 日本欧美精品在线| 三区在线观看| 日韩欧美国产免费播放| 99久久人妻无码中文字幕系列| 国模吧视频一区| 国产精品xxxx| 91九色国产在线播放| 精品国产污污免费网站入口| 久久高清无码视频| 成人亚洲精品久久久久软件| 成年人视频网站免费| 无码国模国产在线观看| 欧美黄色三级网站| 农村少妇久久久久久久| 午夜久久久久久| 中文字幕乱码在线| 国产农村妇女精品一二区| 欧美极品jizzhd欧美| 在线成人视屏 | 欧美日本韩国一区二区三区| 亚洲成人看片| 中文字幕综合一区| 91精品国产乱码久久久| 亚洲少妇最新在线视频| 黑人性生活视频| 在线精品福利| 欧洲高清一区二区| 另类一区二区三区| 欧美国产乱视频| 污视频网站在线播放| 欧美性高潮在线| 亚洲一级黄色录像| 国产一区福利在线| 男人天堂手机在线视频| 在线看成人短视频| 国产日韩欧美日韩| 色图在线观看| 亚洲男人天堂网| 亚洲一区精品在线观看| 一个色综合网站| 中文字幕第4页| 黄色日韩网站视频| 国产91沈先生在线播放| 色爱综合av| 成人福利网站在线观看| 爱搞国产精品| 中文字幕综合一区| 天堂在线视频网站| 欧美日韩国产a| 日本一级淫片免费放| 欧美激情中文字幕| 中国xxxx性xxxx产国| 日本aⅴ亚洲精品中文乱码| 精品一区二区三区毛片| 久久av影视| 亚洲最大福利视频网站| 欧美××××黑人××性爽 | 九九精品在线观看视频| 91网站在线观看视频| 日本一二区免费| 国产欧美大片| 国内自拍中文字幕| 精品国精品国产自在久国产应用| 成人av在线亚洲| 在线看片福利| 欧美日韩爱爱视频| 午夜免费视频在线国产| 日韩黄色在线免费观看| 国产www视频| 欧美丝袜丝nylons| 中日韩精品视频在线观看| 亚洲同性gay激情无套| 波多野结衣办公室33分钟| 国产精品资源在线观看| 波多野结衣作品集| 亚洲每日在线| 日本精品福利视频| 外国成人免费视频| 日韩视频在线播放| 日韩激情啪啪| 成人欧美一区二区三区在线观看| 日韩欧乱色一区二区三区在线| 青青草国产精品一区二区| 手机在线免费观看av| 久久久精品国产一区二区| 国产小视频在线| 日韩经典一区二区三区| 成人午夜精品福利免费| 在线播放欧美女士性生活| 国产情侣小视频| 富二代精品短视频| 豆国产97在线 | 亚洲| 亚洲精选免费视频| 亚洲伦理一区二区三区| 国产精品污污网站在线观看| 一级片视频免费看| 久久久精品一品道一区| 亚洲天堂成人av| heyzo一本久久综合| 中文字幕永久免费| 国产精品亚洲综合一区在线观看| 91插插插插插插插插| 免费成人你懂的| 天天操天天爱天天爽| 日本美女一区二区三区视频| 能看的毛片网站| 日本不卡高清视频| 婷婷免费在线观看| 蜜臀av性久久久久蜜臀av麻豆| 少妇性l交大片| 日本亚洲天堂网| 午夜免费福利视频在线观看| 久久精品国产精品亚洲综合| 蜜臀一区二区三区精品免费视频| 美女视频黄a大片欧美| 成人性生交免费看| 黄一区二区三区| 在线观看中文av| 成熟亚洲日本毛茸茸凸凹| 国产精品手机在线观看| 97se亚洲国产综合自在线不卡| 99久久人妻精品免费二区| 99久久精品国产一区二区三区| 国产成人无码一区二区在线观看| 99精品一区二区| 国产sm调教视频| 国产精品国产馆在线真实露脸| 一二三四在线观看视频| 亚洲图片欧美激情| 日本亚洲欧美在线| 日本精品视频一区二区| 91中文字幕在线播放| 欧美变态口味重另类| 天堂av资源在线| 一区二区日韩精品| 成人在线影视| 97av在线视频| 99riav视频一区二区| 91视频99| 国产一区二区精品久| 小说区视频区图片区| 亚洲经典三级| 国产又黄又猛又粗又爽的视频| 国产精品1区2区3区在线观看| 国产精品久久久久久久无码| 国产日韩欧美精品一区| 好吊色视频在线观看| 欧美午夜视频一区二区| 亚洲熟女乱色一区二区三区久久久| 欧美一级日韩不卡播放免费| 亚洲aaaaaaa| 久久天天躁日日躁| 色在线免费观看| 亚洲va男人天堂| 久久91成人| av片在线免费| 青青草国产精品亚洲专区无| 国产精品一区二区在线免费观看| 国产日韩欧美麻豆| 日韩av黄色片| 欧美精品自拍偷拍| 三级在线观看| 欧美激情影音先锋| 日本久久久久| 欧美日韩成人一区二区三区| 欧美激情精品久久久六区热门| www.xxx亚洲| 国产99久久久国产精品免费看| 成人黄色a级片| 姬川优奈aav一区二区| 亚洲中文字幕在线观看| 亚洲欧美国产精品专区久久 | 国产精品久久久久久av| 91亚洲无吗| 中文网丁香综合网| 日韩高清不卡一区二区三区| 国产国语老龄妇女a片| 亚洲欧洲www| 国产无遮挡又黄又爽又色视频| 欧美va亚洲va香蕉在线| 香蕉视频在线播放| 国产精品va在线播放| 欧美美女啪啪| 日韩国产一级片| 国产激情精品久久久第一区二区 | 日韩久久综合| 妞干网在线免费视频| 99精品1区2区| 日韩三级视频在线| 精品精品欲导航| 在线中文免费视频| 91沈先生在线观看| 欧美激情电影| av污在线观看| 国产精品无码永久免费888| 在线免费一区二区| 亚洲日韩欧美视频| 中文在线аv在线| 久久本道综合色狠狠五月| 韩日在线一区| 任你躁av一区二区三区| 亚洲综合成人在线视频| 亚洲精品第五页| 久久欧美在线电影| av成人app永久免费| 野外做受又硬又粗又大视频√| 国产高清不卡一区| 久久久久久久蜜桃| 精品国产乱码久久久久久夜甘婷婷| 亚洲淫性视频| 国产精品久久精品国产 | 国内精品在线一区| 粉嫩久久久久久久极品| 亚洲 自拍 另类小说综合图区| 国产成人午夜电影网| 四虎永久在线精品| 日韩高清av一区二区三区| 自拍偷拍亚洲视频| 奇米视频888战线精品播放| 日韩国产欧美在线播放| 少妇愉情理伦三级| 在线不卡免费欧美| 羞羞视频在线免费国产| 国产精品一区二区你懂得| 亚洲精品少妇| 免费视频91蜜桃| 欧美精品v国产精品v日韩精品 | 国产91ⅴ在线精品免费观看| 天海翼亚洲一区二区三区| 91av在线免费播放| 国产精品乱码人人做人人爱| 国产乱淫av免费| 久久久久久久亚洲精品| 国产精品密蕾丝视频下载| 中文字幕亚洲乱码| 亚洲亚洲人成综合网络| 四虎精品在线| 成人春色激情网| 亚洲小说欧美另类社区| 国产男女猛烈无遮挡a片漫画| 欧美亚洲日本国产| 图片区小说区亚洲| 欧美一区二区视频在线| 久久99久久精品欧美| 五月天综合在线| 国产亚洲精品美女久久久| 国产精品亚洲综合在线观看 | 麻豆chinese极品少妇| 日韩高清av一区二区三区| 成人在线视频观看| 2019日韩中文字幕mv| 国产欧美综合在线| www.超碰在线.com| 国产麻豆视频一区| 女女同性女同一区二区三区按摩| 国产不卡视频一区二区三区| 日韩人妻精品中文字幕| 久久国产精品久久久久| 亚洲人成亚洲精品| 亚洲一区二区偷拍| 在线视频你懂得一区二区三区| www.在线视频| 日韩和欧美的一区二区| 国产成人在线视频免费播放| 国产一级淫片a视频免费观看|