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

Linux系列:如何用perf跟蹤.NET程序的mmap泄露

系統(tǒng) Linux
Linux 上的 perf 你可以簡單的理解成 Windows 上的 perfview,前者是基于 perf_events 子系統(tǒng),后者是基于 etw事件,這里就不做具體介紹了,這里我們用它監(jiān)控 mmap 的調(diào)用,因為拿到調(diào)用線程棧之后,就可以知道到底是誰導(dǎo)致的泄露。

一、背景

1. 講故事

如何跟蹤.NET程序的mmap泄露,這個問題困擾了我差不多一年的時間,即使在官方的github庫中也找不到切實可行的方案,更多海外大佬只是推薦valgrind這款工具,但這款工具底層原理是利用模擬器,它的地址都是虛擬出來的,你無法對valgrind 監(jiān)控的程序抓dump,并且valgrind顯示的調(diào)用棧無法映射出.NET函數(shù)以及地址,這幾天我仔仔細細的研究這個問題,結(jié)合大模型的一些幫助,算是找到了一個相對可行的方案。

二、mmap 導(dǎo)致的內(nèi)存泄露

1. 一個測試案例

為了方便講述,我們通過 C 調(diào)用 mmap 方法分配256個 4M 的內(nèi)存塊,即總計 1G 的內(nèi)存泄露,參考代碼如下:

#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <sys/mman.h>
#include <unistd.h>

#define BLOCK_SIZE (4096 * 1024)            // 每個塊 4096KB (4MB)
#define TOTAL_SIZE (1 * 1024 * 1024 * 1024) // 總計 1GB
#define BLOCKS (TOTAL_SIZE / BLOCK_SIZE)    // 計算需要的塊數(shù)

void mmap_allocation() {
    uint8_t* blocks[BLOCKS]; // 存儲每個塊的指針

    // 使用 mmap 分配 1GB 內(nèi)存,分成多個 4MB 塊
    for (size_t i = 0; i < BLOCKS; i++) {
        blocks[i] = (uint8_t*)mmap(NULL, BLOCK_SIZE,
            PROT_READ | PROT_WRITE,
            MAP_PRIVATE | MAP_ANONYMOUS,
            -1, 0);

        if (blocks[i] == MAP_FAILED) {
            perror("mmap 失敗");
            return;
        }

        // 確保每個塊都被實際占用
        memset(blocks[i], 20, BLOCK_SIZE);
    }

    printf("已經(jīng)使用 mmap 分配 1GB 內(nèi)存(分成 %d 個 %dKB 塊)!\n", 
           BLOCKS, BLOCK_SIZE/1024);
    printf("程序?qū)和?10 秒,可以使用 top/htop 查看內(nèi)存使用情況...\n");
    sleep(10);
}

int main() {
    mmap_allocation();
    return0;
}

為了能夠讓 C# 調(diào)用,我們將這個 c 編譯成 so 庫,即 windows 中的 dll 文件,參考命令如下:

root@ubuntu2404:/data2/c# gcc -shared -o Example_18_1_5.so -fPIC -g -O0 Example_18_1_5.c
root@ubuntu2404:/data2/c# ls -lh
total 24K
-rw-r--r-- 1 root root 1.2K May  7 10:47 Example_18_1_5.c
-rwxr-xr-x 1 root root  18K May  7 10:47 Example_18_1_5.so

接下來創(chuàng)建一個名為 MyConsoleApp 的 Console控制臺項目。

root@ubuntu2404:/data2# dotnet new console -n MyConsoleApp --framework net8.0 --use-program-main
The template "Console App" was created successfully.

Processing post-creation actions...
Restoring /data2/MyConsoleApp/MyConsoleApp.csproj:
  Determining projects to restore...
  Restored /data2/MyConsoleApp/MyConsoleApp.csproj (in 1.73 sec).
Restore succeeded.

root@ubuntu2404:/data2# cd MyConsoleApp
root@ubuntu2404:/data2/MyConsoleApp# dotnet run
Hello, World!

項目創(chuàng)建好之后,接下來就可以調(diào)用 Example_18_1_5.so 中的mmap_allocation方法了,在真正調(diào)用之前故意用Console.ReadLine();攔截,主要是方便用 perf 去介入監(jiān)控,最后不要忘了將生成好的 Example_18_1_5.so文件丟到 bin 目錄下,參考代碼如下:

using System.Runtime.InteropServices;

namespaceMyConsoleApp;

classProgram
{
    [DllImport("Example_18_1_5.so", CallingConvention = CallingConvention.Cdecl)]
    public static extern void mmap_allocation();

    static void Main(string[] args)
    {
        MyTest();

        for (int i = 0; i < int.MaxValue; i++)
        {
            Console.WriteLine($"{DateTime.Now} :i={i} 執(zhí)行完畢,自我輪詢中...");

            Thread.Sleep(1000);
        }

        Console.ReadLine();
    }

    static void MyTest()
    {
        Console.WriteLine("MyTest 已執(zhí)行,準備執(zhí)行 mmap_allocation 方法");
        Console.ReadLine();
        mmap_allocation();
        Console.WriteLine("MyTest 已執(zhí)行,準備執(zhí)行 mmap_allocation 方法");
    }
}

2. 使用 perf 監(jiān)控mmap事件

Linux 上的 perf 你可以簡單的理解成 Windows 上的 perfview,前者是基于 perf_events 子系統(tǒng),后者是基于 etw事件,這里就不做具體介紹了,這里我們用它監(jiān)控 mmap 的調(diào)用,因為拿到調(diào)用線程棧之后,就可以知道到底是誰導(dǎo)致的泄露。

為了能夠讓 perf 識別到 .NET 的托管棧,微軟做了一些特別支持,即開啟 export DOTNET_PerfMapEnabled=1 環(huán)境變量,截圖如下:

圖片圖片

更多資料參考:https://learn.microsoft.com/zh-cn/dotnet/core/runtime-config/debugging-profiling

  • 在 終端1 上啟動 C# 程序。
root@ubuntu2404:/data2/MyConsoleApp/bin/Debug/net8.0# export DOTNET_PerfMapEnabled=1
root@ubuntu2404:/data2/MyConsoleApp/bin/Debug/net8.0# dotnet MyConsoleApp.dll
MyTest 已執(zhí)行,準備執(zhí)行 mmap_allocation 方法
  • 終端2 上開啟 perf 對dontet程序的mmap進行跟蹤。
root@ubuntu2404:/data2/MyConsoleApp# ps -ef | grep Console
root        3074    2197  0 11:14 pts/1    00:00:00 dotnet MyConsoleApp.dll
root        3241    3106  0 11:56 pts/3    00:00:00 grep --color=auto Console
root@ubuntu2404:/data2/MyConsoleApp# perf record -p 3074 -g -e syscalls:sys_enter_mmap

啟動跟蹤之后記得在 終端1 上按下Enter回車讓程序繼續(xù)執(zhí)行,當跟蹤差不多(大量的內(nèi)存泄露)的時候,我們在 終端2 上按下 Ctrl+C 停止跟蹤,截圖如下:

圖片圖片

root@ubuntu2404:/data2/MyConsoleApp# perf record -p 3074 -g -e syscalls:sys_enter_mmap
^C[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.139 MB perf.data (333 samples) ]

從輸出看當前的 perf.data 有 333 個樣本,0.13M 的大小,由于在 linux 上分析不方便,而且又是二進制的,所以我們將 perf.data 轉(zhuǎn)成 perf.txt 然后傳輸?shù)?windows 上分析,參考命令如下:

root@ubuntu2404:/data2/MyConsoleApp# ls
MyConsoleApp.csproj  Program.cs  bin  obj  perf.data
root@ubuntu2404:/data2/MyConsoleApp# perf script > perf.txt
root@ubuntu2404:/data2/MyConsoleApp# sz perf.txt

經(jīng)過仔細的分析 perf.txt 的 mmap 調(diào)用棧,很快就會發(fā)現(xiàn)有人調(diào)了 256 次 4M 的 mmap 分配吃掉了絕大部分內(nèi)存,那個上層的 memfd:doublemapper 就是 JIT 代碼所存放的內(nèi)存臨時文件,由于有 DOTNET_PerfMapEnabled=1 的加持,可以看到 [unknown] 前面的方法返回地址,截圖如下:

圖片圖片

3. 這些地址對應(yīng)的 C# 方法是什么

本來我以為 JIT很給力,在 perf 生成的 /tmp/perf-3074.map 文件中弄好了符號信息,結(jié)果搜了下沒有對應(yīng)的方法名,比較尷尬。

root@ubuntu2404:/data2/MyConsoleApp# grep "7f42f3f11967" /tmp/perf-3074.map
root@ubuntu2404:/data2/MyConsoleApp# grep "7f42f3f11a90" /tmp/perf-3074.map
root@ubuntu2404:/data2/MyConsoleApp#

那怎么辦呢?只能抓dump啦,這也是我非常擅長的,可以用 dotnet-dump抓一個,然后使用 !ip2md 觀察便知。

root@ubuntu2404:/data2/MyConsoleApp# dotnet-dump collect -p 3074

Writing full to /data2/MyConsoleApp/core_20250507_113516
Complete
root@ubuntu2404:/data2/MyConsoleApp# ls -lh 
total 1.2G
-rw-r--r-- 1 root root  242 May  710:50 MyConsoleApp.csproj
-rw-r--r-- 1 root root  769 May  711:05 Program.cs
drwxr-xr-x 3 root root 4.0K May  710:51 bin
-rw------- 1 root root 1.2G May  711:35 core_20250507_113516
drwxr-xr-x 3 root root 4.0K May  710:51 obj
-rw------- 1 root root 164K May  711:16 perf.data
-rw-r--r-- 1 root root 874K May  711:21 perf.txt
root@ubuntu2404:/data2/MyConsoleApp# dotnet-dump analyze core_20250507_113516
Loading core dump: core_20250507_113516 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
> ip2md 7f42f3f11967                                                                                                                            
MethodDesc:   00007f42f3f9f320
Method Name:          MyConsoleApp.Program.Main(System.String[])
Class:                00007f42f3fbb648
MethodTable:          00007f42f3f9f368
mdToken:              0000000006000002
Module:               00007f42f3f9cec8
IsJitted:             yes
Current CodeAddr:     00007f42f3f11920
Version History:
  ILCodeVersion:      0000000000000000
  ReJIT ID:           0
  IL Addr:            00007f437307e250
     CodeAddr:           00007f42f3f11920  (MinOptJitted)
     NativeCodeVersion:  0000000000000000
Source file:  /data2/MyConsoleApp/Program.cs @ 12
> ip2md 7f42f3f11a90                                                                                                                            
MethodDesc:   00007f42f3f9f338
Method Name:          MyConsoleApp.Program.MyTest()
Class:                00007f42f3fbb648
MethodTable:          00007f42f3f9f368
mdToken:              0000000006000003
Module:               00007f42f3f9cec8
IsJitted:             yes
Current CodeAddr:     00007f42f3f11a50
Version History:
  ILCodeVersion:      0000000000000000
  ReJIT ID:           0
  IL Addr:            00007f437307e2d2
     CodeAddr:           00007f42f3f11a50  (MinOptJitted)
     NativeCodeVersion:  0000000000000000
Source file:  /data2/MyConsoleApp/Program.cs @ 28
> ip2md 7f42f3f13557                                                                                                                            
MethodDesc:   00007f42f42f42b8
Method Name:          ILStubClass.IL_STUB_PInvoke()
Class:                00007f42f42f41e0
MethodTable:          00007f42f42f4248
mdToken:              0000000006000000
Module:               00007f42f3f9cec8
IsJitted:             yes
Current CodeAddr:     00007f42f3f134d0
Version History:
  ILCodeVersion:      0000000000000000
  ReJIT ID:           0
  IL Addr:            0000000000000000
     CodeAddr:           00007f42f3f134d0  (MinOptJitted)
     NativeCodeVersion:  0000000000000000
>

從 dotnet-dump 給的輸出看,可以清楚的看到調(diào)用關(guān)系為: Main -> MyTest -> ILStubClass.IL_STUB_PInvoke -> mmap_allocation -> mmap 。

至此真相大白于天下。

三、總結(jié)

這類問題的泄露真的費了我不少心思,曾經(jīng)讓我糾結(jié)過,迷茫過,我也搗鼓過 strace,最終都無法找出棧上的托管函數(shù),真的,目前 .NET 在 Linux 調(diào)試生態(tài)上還是很弱,好無奈,這篇文章我相信彌補了國內(nèi),甚至國外在這一塊領(lǐng)域的空白,也算是這一年來對自己的一個交代。

責(zé)任編輯:武曉燕 來源: 一線碼農(nóng)聊技術(shù)
相關(guān)推薦

2024-07-26 00:00:12

2025-03-04 04:00:00

C++代碼windows

2023-07-07 13:56:54

2023-08-01 09:52:16

GDI泄露內(nèi)存

2023-07-26 07:39:06

2023-07-17 11:25:35

.NET程序WinDbgPerfview

2020-06-23 09:48:09

Python開發(fā)內(nèi)存

2023-09-25 10:13:59

Java識別

2011-04-25 16:35:06

Linux調(diào)用

2022-06-14 13:41:22

WiFi探測隱私

2011-07-22 13:22:10

Java.NETDataTable

2015-03-27 11:34:59

JavaJava編寫引發(fā)內(nèi)存泄露

2009-12-23 16:16:57

Linux操作系統(tǒng)

2019-06-18 07:15:22

Linux拼寫look命令

2021-05-17 07:45:06

Linux系統(tǒng)程序

2020-12-29 15:00:46

PerfVTune工具

2025-08-04 03:05:00

2019-09-08 15:00:47

區(qū)塊鏈連鎖超市食品跟蹤

2025-07-09 02:00:00

2009-08-20 16:07:39

C#和ADO.NET訪
點贊
收藏

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

日本不卡123| 欧美调教视频| 快she精品国产999| 亚洲小视频在线| 浓精h攵女乱爱av| 老司机午夜在线| 福利91精品一区二区三区| 日韩成人在线电影网| 欧美日韩在线中文| 毛片在线看网站| av中文字幕在线不卡| 国产精品美乳在线观看| 久草中文在线视频| 精品久久不卡| 精品成人一区二区| 中文字幕丰满乱码| 国产剧情av在线播放| 国产精品国产三级国产aⅴ中文| 国产91免费视频| 中文字幕永久免费视频| 在线精品观看| 精品国产一区二区三区久久| 好吊日免费视频| 欧洲精品久久久久毛片完整版| 五月婷婷激情综合| 国产精品久久成人免费观看| 日本大臀精品| 欧美午夜久久| 中文字幕日本欧美| 一级做a爰片毛片| 亚洲日本va| 欧美妇女性影城| 老头吃奶性行交视频| 成人bbav| 亚洲一级二级在线| 久久最新免费视频| 色网站免费在线观看| 久久久精品蜜桃| 精品久久久久久亚洲| 国产黄色av片| 国产一区二区在线看| 国产区亚洲区欧美区| 国产91丝袜美女在线播放| 国产精品色在线网站| 日韩欧美中文一区| 中文字幕无码精品亚洲资源网久久| 午夜国产福利在线| 中文字幕 久热精品 视频在线| 久久久综合香蕉尹人综合网| 欧美自拍第一页| 岛国一区二区三区| 国产精品一区而去| 风流老熟女一区二区三区| 国产精品主播直播| 92看片淫黄大片欧美看国产片| 欧美日韩在线观看免费| 羞羞答答成人影院www| 日韩在线欧美在线国产在线| 韩国三级hd中文字幕有哪些| 国产精品99久久免费| 欧美精品高清视频| 少妇性l交大片7724com| 免费观看在线一区二区三区| 欧美一级二级在线观看| 337p日本欧洲亚洲大胆张筱雨| 日韩三级精品| 一本大道久久精品懂色aⅴ| 欧美 日本 亚洲| 久久国产精品高清一区二区三区| 成人黄色在线视频| 精品国产乱码久久久久| 日韩亚洲视频在线观看| 久久久三级国产网站| 色综合电影网| 国产调教视频在线观看| 亚洲一区二区三区自拍| 成年人视频观看| ww久久综合久中文字幕| 91精品福利在线一区二区三区| 69久久精品无码一区二区| 成人爽a毛片免费啪啪红桃视频| 亚洲精品国产福利| 夫妇露脸对白88av| 欧美一区二区| 国产亚洲人成网站在线观看| 1024手机在线观看你懂的| 亚洲xxx拳头交| 午夜精品久久久久久99热| 免费污网站在线观看| 精品久久免费| 欧美精品一区二区三区蜜桃视频| 亚洲熟妇无码av| 91麻豆国产自产在线观看亚洲| 精品中文字幕在线2019| 国产原创视频在线| 九色|91porny| 国产精品一区视频网站| 国产在线视频网站| 樱桃视频在线观看一区| 亚洲精品国产精品国自产| 亚洲精品国产精品国| 91丨porny丨国产入口| 神马影院午夜我不卡| 欧美黑人猛交的在线视频| 久久久国产午夜精品| 午夜啪啪免费视频| 手机在线理论片| 91麻豆精品国产91久久久久久| 国产1区2区在线| 国产精品久一| 国产亚洲一区精品| 日本高清www免费视频| 久久91精品久久久久久秒播| 精品一区二区三区日本| 久久bbxx| 欧美吻胸吃奶大尺度电影| 日本精品一区二区三区四区| av在线精品| 亚洲午夜女主播在线直播| 精品少妇theporn| 久久国产成人午夜av影院| 久久久影院一区二区三区| av免费在线观| 欧美另类高清zo欧美| www在线观看免费视频| 欧美1区2区3区| 国产欧洲精品视频| www亚洲人| 欧美特级www| 影音先锋黄色资源| 黄色日韩精品| y111111国产精品久久婷婷| 欧美激情午夜| 欧美日韩综合不卡| 中文天堂资源在线| 日韩不卡一区二区三区| 欧美另类视频在线| videos性欧美另类高清| 亚洲激情成人网| 国产精品6666| www.欧美日韩国产在线| 一级一片免费播放| 国产精久久一区二区| 日韩中文字幕欧美| 国产精品一区无码| 97aⅴ精品视频一二三区| 日韩欧美精品免费| 香蕉成人app| 欧美日本在线视频中文字字幕| 99久久精品国产色欲| 亚洲人成影院在线观看| 欧美久久在线观看| 88久久精品| 国产69精品久久久久99| 天堂网在线观看视频| 五月婷婷久久丁香| 自拍偷拍视频亚洲| 奇米精品一区二区三区在线观看 | 午夜一级黄色片| 久久久久国产一区二区三区四区 | 激情综合网av| 先锋影音男人资源| 一区二区网站| 91av视频在线观看| 国产三级在线免费观看| 欧美亚洲国产怡红院影院| sm捆绑调教视频| 国产一区二区精品久久| 国内少妇毛片视频| 亚洲激情播播| 久久久999精品| 少妇一级淫片免费放中国| 337p粉嫩大胆色噜噜噜噜亚洲| 日本免费一级视频| 手机亚洲手机国产手机日韩| 97se国产在线视频| free性欧美| 国产一区二区三区18| 夜夜狠狠擅视频| 一区二区理论电影在线观看| 国产精品久久久免费观看| 久久激情中文| 懂色av一区二区三区四区五区| 欧美国产中文高清| 日本在线精品视频| 国产黄网站在线观看| 亚洲激情视频在线播放| 中文字幕欧美人妻精品一区蜜臀| 亚洲视频图片小说| 国产肉体xxxx裸体784大胆| 免费精品视频在线| 精品国产一区二区三区无码| 亚洲小说图片| av电影成人| 成人四虎影院| 97视频色精品| 国产在线观看av| 亚洲男人7777| 国产丰满美女做爰| 欧美亚洲国产一区二区三区va| 久久艹精品视频| 中文在线一区二区| 久久人人妻人人人人妻性色av| 久久99精品国产麻豆婷婷洗澡| 黄页网站大全在线观看| 99热国内精品永久免费观看| 国内外成人免费视频| 只有精品亚洲| 国产国语刺激对白av不卡| av剧情在线观看| 久久精品国产亚洲7777| 美女做暖暖视频免费在线观看全部网址91 | 亚洲国产99精品国自产| 亚洲自拍第二页| 91久久国产综合久久| 日本少妇在线观看| 亚洲欧美福利一区二区| 综合 欧美 亚洲日本| 久久一日本道色综合| 国产精品一级无码| 九色|91porny| 日本超碰在线观看| 老司机亚洲精品| 九色在线视频观看| 国内久久视频| 日本道在线视频| 久久亚洲影视| 视频一区二区三| 亚洲+变态+欧美+另类+精品| 爱情岛论坛亚洲入口| 国产一区二区三区| 国产日韩精品入口| 久久久久久久性潮| 国产精品免费久久久久影院 | 国产欧美日韩91| 神马电影网我不卡| 日本电影亚洲天堂| 伊人色综合一区二区三区影院视频| 欧美激情小视频| 亚洲第一图区| 亚洲成人久久一区| www.黄色国产| 欧美成人免费网站| 国产综合视频在线| 亚洲第一在线视频| 四虎在线视频免费观看| 亚洲丁香久久久| 人妻一区二区三区| 日韩精品欧美激情| 欧美理论在线观看| 国产亚洲精品久久| 亚洲麻豆精品| 久久精品国产一区二区电影| av在线导航| 欧美激情2020午夜免费观看| 三级在线观看| 亚洲欧美激情另类校园| 玖玖综合伊人| 综合欧美国产视频二区| 精品国产丝袜高跟鞋| 久久福利视频网| 69av成人| 青青草99啪国产免费| 99久久精品一区二区成人| 国产日韩精品在线播放| 警花av一区二区三区| 成人欧美一区二区三区视频xxx| 都市激情亚洲欧美| 欧美亚洲另类久久综合| 波多野结衣在线观看一区二区三区 | 亚洲精品二区三区| 精品一区二区三区无码视频| 亚洲一区二区三区高清不卡| 日本免费观看网站| 国产一区二区不卡| 中文文字幕文字幕高清| 国产亚洲欧洲997久久综合| 黄色激情小视频| 亚洲网友自拍偷拍| 久久这里只有精品9| 日韩欧美视频在线| 欧美日韩激情视频一区二区三区| 中文亚洲视频在线| 日本理论片午伦夜理片在线观看| 57pao国产精品一区| 久草综合在线| 精品国产一区二区三区麻豆免费观看完整版| 亚洲免费福利一区| dy888午夜| 视频一区欧美精品| 特种兵之深入敌后| 国产日韩欧美亚洲| 久久精品久久国产| 欧美日韩和欧美的一区二区| 亚洲精品18在线观看| 在线观看成人黄色| 成入视频在线观看| 成人久久久久久| 国产亚洲一区二区手机在线观看| 久久久亚洲成人| 美女福利一区二区三区| 99久久精品免费看国产一区二区三区| 亚洲品质自拍| 日本黄色片一级片| 蜜桃视频第一区免费观看| 国产二级一片内射视频播放 | 亚洲视频在线视频| 日韩精品卡一| 国产精品亚洲第一区| 香蕉久久精品| 每日在线观看av| 国产一区二区三区观看| 日韩欧美黄色网址| 日韩欧美成人免费视频| 成人毛片在线免费观看| 久久视频在线直播| 播放一区二区| 欧美成人在线免费观看| 尤物网精品视频| 97超碰人人看| 亚洲欧美偷拍另类a∨色屁股| 亚洲成人第一网站| 日韩精品免费在线视频| 黑人另类精品××××性爽| 91精品久久久久久久久久| 欧美理论视频| 国产偷人视频免费| 久久久久国产精品厨房| 国产欧美日韩另类| 亚洲国产日韩欧美在线99| av片在线观看网站| 91中文精品字幕在线视频| 97久久视频| 国产无遮挡猛进猛出免费软件| 久久久不卡影院| 日韩熟女一区二区| 亚洲欧美精品一区二区| 欧美另类老肥妇| 久久国产精品精品国产色婷婷| 尤物在线精品| 国产肉体xxxx裸体784大胆| 红桃av永久久久| 亚洲欧洲成人在线| 2019中文字幕免费视频| 欧美a一欧美| 亚洲乱码中文字幕久久孕妇黑人| 99免费精品视频| 中文字幕视频网| 亚洲天堂av在线免费| 日韩免费小视频| 一区二区精品在线| 精品91在线| 国产精品成人99一区无码| 亚洲成人av一区二区三区| 天堂中文在线官网| 欧洲日韩成人av| 成人无号精品一区二区三区| 日本不卡一区二区在线观看| 国产精品久久久久一区| 国产成人无码一区二区三区在线| 精品日韩一区二区三区免费视频| 神马午夜伦理不卡| 激情小说综合区| 日本不卡中文字幕| 麻豆精品国产免费| 精品欧美一区二区三区精品久久| 1024在线看片你懂得| 欧洲亚洲一区二区三区四区五区| 日本va欧美va精品| 欧洲美女女同性互添| 精品国产麻豆免费人成网站| 精品丝袜在线| 亚洲国产一区二区精品视频| 国产在线一区观看| 日韩精品视频免费看| 亚洲三级免费看| 久久69av| 亚洲欧美另类动漫| 亚洲理论在线观看| 亚洲三区在线播放| 国产日韩欧美中文| 亚洲乱亚洲高清| 永久av免费网站| 亚洲国产天堂久久国产91| 99久久久国产精品免费调教网站| 亚洲精品少妇一区二区| 91美女片黄在线观看91美女| 一级二级三级视频| 性欧美在线看片a免费观看| 日韩国产欧美| 亚洲精品乱码久久| 欧美一区二区人人喊爽| 依依综合在线| 国产欧美123| 国产精品色噜噜| 亚洲三区在线观看无套内射| 91色视频在线观看| 老司机精品久久| 人人干人人干人人干| 欧美成人性生活|