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

一個全新的 Go pprof 視角 - 對象引用分析

開發
為了更高效地分析和解決這些問題,CloudWeGo 團隊開發了一款新的工具——Goref。Goref 基于 Delve,能夠深入分析Go程序的堆對象引用,顯示內存引用的分布,幫助開發者快速定位內存泄漏或優化GC開銷。

在Go語言開發中,內存泄漏問題往往難以定位,傳統的Pprof工具雖然能提供一定幫助,但在復雜場景下其能力有限。為了更高效地分析和解決這些問題,CloudWeGo 團隊開發了一款新的工具——Goref。Goref 基于 Delve,能夠深入分析Go程序的堆對象引用,顯示內存引用的分布,幫助開發者快速定位內存泄漏或優化GC開銷。該工具不僅支持運行時進程的分析,還能分析核心轉儲文件,為 Go 開發者提供了一個強大的內存分析工具。項目已開源在 GitHub 上,歡迎社區貢獻和使用。

Pprof的局限性

作為 Go 研發有時會遇到內存泄露的情況,大部分人第一時間會嘗試打一個 heap profile 看問題原因。但很多時候,heap profile 火焰圖對問題排查起不到什么幫助,因為它只記錄了對象是在哪創建的。在一些復雜業務場景下,對象經過多層依賴傳遞或者內存池復用,幾乎已經無法根據創建的堆棧信息定位根因。

以如下 heap profile 為例,FastRead 函數棧是 Kitex 框架反序列化函數,如果業務協程泄露了請求對象,實際上并不能反映到對應泄露的代碼位置,而只能體現在 FastRead 函數棧占據了內存。

圖片

眾所周知, Go 是帶 GC 的語言,一個對象無法釋放,幾乎 100% 是由于 GC 通過引用分析將其標記為存活。而同樣作為 GC 語言,Java 的分析工具就更加完善了,比如 JProfiler 可以有效地展示對象引用關系。因此,我們也想在 Go 上實現一個高效的引用分析工具,能夠準確直接地告訴我們內存引用分布和引用關系,幫我們從艱難的靜態分析中解放出來。好消息是,我們已基本完成了這個工具的開發工作,已開源在 https://github.com/cloudwego/goref 倉庫下,使用方式見 README 文檔。

以下將分享這個工具的設計思路和詳細實現。

思路

GC 標記過程

在講具體實現之前,我們先回顧一下 GC 是怎么標記對象的存活的。

Go 采用類似于 tcmalloc 的分級分配方案,每個堆對象在分配時會指定到一個mspan上,它的 size 是固定的。在 GC 時,一個堆地址會調用runtime.spanOf從多級索引中查找到這個mspan,從而得到原始對象的 base address 和 size。

// simplified code
func spanOf(p uintptr) *mspan {
    ri := arenaIndex(p)
    ha := mheap_.arenas[ri.l1()][ri.l2()]
    return ha.spans[(p/pageSize)%pagesPerArena]
}

通過 runtime.heapBitsForAddr 函數可以獲得一個對象地址范圍內的 GC bitmap。而 GC bitmap 中標記了一個對象所在內存的每 8 字節對齊的地址是否是一個指針類型,從而判斷是否進一步標記下游對象。

例如以下 Go 代碼片段:

type Object struct {
    A string
    B int64
    C *[]byte
}
// global variables
var a = echo()
var b *int64 = &echo().B
func echo() *Object {
    bytes := make([]byte, 1024)
    return &Object{A: string(bytes), C: &bytes}
}

GC 在掃描變量b時,不是只簡單地掃描B int64這個字段的內存,而是通過mspan索引查找出baseelem size后再進行掃描,因此,字段 A 和 C 以及它們的下游對象的內存都會被標記為存活。

GC 掃描變量a變量時,發現對應的 GC bit 是1001,怎么理解呢?可以認為是base+0base+24的地址是指針,要繼續掃描下游對象,這里A stringC *[]byte都包含了一個指向下游對象的指針。

圖片

基于以上的簡要分析,我們可以發現,要找到所有存活的對象,簡單的原理就是從 GC Root 出發,挨個掃描對象的 GC bit,如果某個地址被標記為1,就繼續向下掃描,每個下游地址都要確定它的 mspan,從而獲取完整的對象基地址、大小和 GC bit。

DWARF 類型信息

然而,光知道對象的引用關系對于問題排查幾乎沒有任何幫助。因為它不能輸出任何有效的可供研發定位問題的變量名稱。所以,還有一個很關鍵的步驟是,獲取到這些對象的變量名和類型信息。

Go 本身是靜態語言,對象一般不直接包含其類型信息,比如我們通過obj=new(Object)調用創建一個對象,實際內存只存儲了A/B/C三個字段的值,在內存中只有 32 字節大小。既然如此,有什么辦法能拿到類型信息呢?

Goref 的實現

Delve 工具介紹

有過 Go 開發經歷的同學應該都用過 Delve,如果你覺得自己沒用過,不要懷疑,你在 Goland IDE 上玩的代碼調試功能,底層就是基于 Delve 的。說到這里,相信大家已經回憶起 Debug 時調試窗口的畫面了,沒錯,調試窗口所展示的變量名,變量值,變量類型這些信息,不正是我們需要的類型信息嗎!

$ ./dlv attach 270
(dlv) ...
(dlv) locals
tccCli = ("*code.byted.org/gopkg/tccclient.ClientV2")(0xc000782240)
ticker = (*time.Ticker)(0xc001086be0)

那么,Delve 是怎么獲取這些變量信息的呢?在我們 attach 進程時,Delve 從/proc/<pid>/exe讀取軟鏈接到實際 elf 文件路徑的可執行文件。Go 編譯時會生成一些調試信息,以 DWARF 標準格式存儲在可執行文件的 .debug_* 前綴的 section 節里。引用分析所需要的全局變量和局部變量的類型信息就可以通過這些 DWARF 信息解析得到。

對于全局變量:Delve 迭代讀取所有 DWARF Entry ,解析出帶Variable標簽的全局變量的 DWARF Entry。這些 Entry 包含了 Location、Type、Name 等屬性。

  1. 1. 其中,Type 屬性記錄了它的類型信息,按 DWARF 格式遞歸遍歷,可以進一步確定變量的每一個子對象類型;
  2. 2. Location 則是一個相對復雜的屬性,它記錄了一個可執行的表達式或者一個簡單的變量地址,作用是確定一個變量的內存地址,或者返回寄存器的值。在全局變量解析時,Delve 通過它獲得了變量的內存地址。

Goroutine 中的局部變量解析的原理與全局變量大同小異,不過還是要更復雜一些。比如需要根據 PC 確定 DWARF offset,同時 location 表達式也會更復雜,還涉及到寄存器訪問。這里不再展開。

GC 分析的元信息構建

通過 Delve 提供的進程 attach 和 core 文件分析功能,我們還可以獲取到內存訪問權限。我們仿照 GC 標記對象的做法,在工具的運行時內存中構建待分析進程的必要元信息。這包括:

  1. 1. 待分析進程的各個 Goroutine stack 的地址空間范圍,并包括每個 Goroutine stack 存儲 gcmask 的 stackmap,用來標記是否可能指向一個存活的堆對象;
  2. 2. 待分析進程的各個 data/bss segment 的地址空間范圍,包括每個 segment 的 gcmask,也是用來標記是否可能指向一個存活的堆對象;
  3. 3. 以上兩步都是獲取 GC Roots 的必要信息;
  4. 4. 最后一步是讀取待分析進程的 mspan 索引,以及每個 mspan 的 base、elem size、gcmask等信息,在工具的內存中復原這個索引;

以上步驟是大概的流程,其中還有一些細節問題的處理,例如對 GC finalizer 對象的處理,以及對 Go 1.22 版本 allocation header 特性的特殊處理,這里不再展開。

DWARF 類型掃描

萬事俱備,只欠東風。不管是堆掃描的 GC 元信息,還是 GC Root 變量的類型信息都已經完成解析。那么所謂的“東風”就是最關鍵的對象引用關系分析環節了。

對于每個 GC Root 變量,我們調用findRef函數,按不同的 DWARF 類型訪問對象的內存,假設是一個可能指向下游對象的指針,則讀取指針的值,在 GC 元信息里找到這個下游對象。這時,按前所述,我們得到了對象的 base address、elem size、gcmask 等信息。

如果對象被訪問到,記錄一個 mark bit 位,以避免對象被重復訪問。通過 DWARF 子對象類型構造一個新的變量,再次遞歸調用findRef直至所有已知類型的對象被全部確認。

然而,這種引用掃描方式和 GC 的做法是完全相悖的。主要原因在于,Go 里面有大量不安全的類型轉換,可能某個對象在創建后是帶了指針字段的對象,比如:

func echo() *byte {
    bytes := make([]byte, 1024)
    obj := &Object{A: string(bytes), C: &bytes}
    return (*byte)(unsafe.Pointer(obj))
}

從 GC 的角度出發,雖然 unsafe 轉換了類型為*byte,但并沒有影響其 gcmask 的標記,所以在掃描下游對象時,仍然能掃描到完整的Object對象,識別到bytes這個下游對象,從而將其標記為存活。

但 DWARF 類型掃描可做不到,在掃描到 byte 類型時,會被認為是無指針的對象,直接跳過進一步的掃描了。所以,唯一的辦法是,優先以 DWARF 類型掃描,對于無法掃到的對象,再用 GC 的方式來標記。

要實現這一點,做法是每當我們用 DWARF 類型訪問一個對象的指針時,都將其對應的 gcmask 從 1 標記為 0,這樣在掃描完一個對象后,如果對象的地址空間范圍內仍然有非 0 標記的指針,就把它記錄到最終標記的任務里。等到所有對象通過 DWARF 類型掃描完成后,再把這些最終標記任務取出來,以 GC 的做法二次掃描。

圖片

例如,上述 Object 對象訪問時,其 gcmask 是1001,讀取字段 A 后,gcmask 變成 1000,如果字段 C 因為類型強轉沒有訪問到,則在最終掃描的 GC 標記時就會被統計到。

除了類型強轉外,引用內存越界問題也很常見,如上文示例代碼var b *int64 = &echo().B所示,字段 A 和 C 都屬于無法被 DWARF 類型掃描的內存,也會在最終掃描時被統計。

最終掃描

上述的被類型強轉的字段,或者因為超過了 DWARF 定義的地址范圍而無法訪問到的字段,又或者像 unsafe.Pointer 這種無法確定類型的變量,都會在最終掃描時被標記。因為這些對象沒法確定具體的類型,所以不需要專門輸出,只需要把 size 和 count 記錄到已知的引用鏈路中即可。

在 Go 原生實現中,有不少常用庫都采用了unsafe.Pointer,導致子對象識別出現問題,這類類型要做特殊處理。

輸出文件格式

所有對象掃描完畢后,將引用鏈路及其對象數、對象內存空間輸出到文件,文件對齊 pprof 二進制文件格式,采用 protobuf 編碼。


  1. 1. 輸出的根對象格式:
  • ? 棧變量格式:包名 + 函數名 + 棧變量名 github.com/cloudwego/kitex/client.invokeHandleEndpoint.func1.sendMsg
  • ? 全局變量格式:包名 + 全局變量名 github.com/cloudwego/kitex/pkg/loadbalance/lbcache.balancerFactories

  1. 2. 輸出的子對象格式:
  • ? 輸出子對象的字段名和類型名,形如:Conn.(net.Conn)
  • ? 如果是 map key 或 value 字段,則以 $mapkey. (type_name) 或 $mapval. (type_name) 的形式輸出;
  • ? 如果是數組的元素,以 [0]. (type_name) 格式輸出,大于等于 10 的以 [10+]. (type_name) 格式輸出;

效果展示

以下是一個真實業務用工具采樣后的對象引用火焰圖:

圖片

圖中展示了每個 root 變量的名稱,以及其引用的字段名和類型名。注:由于 Go1.23 之前 DWARF Info 沒有支持閉包類型的字段 offset,所以閉包變量wpool.(*Pool).GoCtx.func1.task暫時無法展示下游對象。

選擇 inuse_objects 標簽,還可以查看對象數分布火焰圖:

圖片

項目地址:https://github.com/cloudwego/goref

責任編輯:龐桂玉 來源: 字節跳動技術團隊
相關推薦

2021-03-16 08:56:35

Go interface面試

2013-01-25 09:53:40

GitHub

2015-08-19 09:29:35

Git協議編寫

2022-03-21 08:49:01

存儲引擎LotusDB

2024-01-25 11:41:00

Python開發前端

2015-10-12 15:50:07

PaaS云平臺開發go

2011-07-22 17:00:14

java

2020-06-02 10:04:58

IT部門首席信息官CIO

2021-05-30 07:59:00

String引用類型

2023-02-17 15:03:30

人工智能DevOps團隊

2015-12-02 11:23:38

DockerUber容器服務

2010-03-31 17:21:04

云計算

2021-04-19 14:18:17

數據分析互聯網運營大數據

2024-03-01 18:55:54

內存調試Go 語言

2023-02-26 01:37:57

goORM代碼

2023-05-10 08:05:41

GoWeb應用

2014-10-15 11:01:02

Web應用測試應用

2022-06-15 08:14:40

Go線程遞歸

2024-05-27 00:00:20

2021-04-25 08:58:00

Go拍照云盤
點贊
收藏

51CTO技術棧公眾號

姬川优奈av一区二区在线电影| 人妻与黑人一区二区三区| 国产精品精品国产一区二区| 欧美精品九九99久久| www.亚洲成人网| 免费动漫网站在线观看| 麻豆精品在线播放| 欧美激情精品久久久久久蜜臀| 波多野结衣一二三区| 91综合国产| 亚洲成av人片在线| 亚洲欧洲另类精品久久综合| 性一交一乱一色一视频麻豆| 久久国产欧美| 欧美片一区二区三区| 蜜桃传媒一区二区亚洲av| 精品视频一二| 欧美在线观看你懂的| 亚洲色欲久久久综合网东京热| 国产视频精品久久| 成人av在线一区二区| 国产精品激情自拍| 国产成人精品亚洲男人的天堂| 精品视频国产| 亚洲娇小xxxx欧美娇小| 91视频福利网| 农村妇女一区二区| 欧美性高潮在线| 轻点好疼好大好爽视频| 久久日韩视频| 欧美韩国日本不卡| 老牛影视免费一区二区| 亚洲AV无码一区二区三区性| 麻豆精品国产传媒mv男同| 97婷婷大伊香蕉精品视频| 男人与禽猛交狂配| 97精品国产福利一区二区三区| 日韩国产精品一区| 毛茸茸free性熟hd| 日韩精品一区二区三区免费视频| 91久久一区二区| 欧美日韩在线中文| av在线加勒比| 亚洲最大成人综合| 青青在线视频免费观看| 国产精品va在线观看视色| 国产精品久久久久久亚洲毛片 | 欧美成人在线网站| 亚洲色图日韩精品| 第一社区sis001原创亚洲| 日韩精品在线播放| 99久久人妻无码中文字幕系列| 亚洲精品在线a| 日韩欧美一区二区视频| 国内精品国产三级国产aⅴ久| 另类一区二区三区| 欧美揉bbbbb揉bbbbb| 日本久久久久久久久久久久| av亚洲一区二区三区| 色爱区综合激月婷婷| 亚洲中文字幕无码不卡电影| 天堂网在线最新版www中文网| 亚洲丰满少妇videoshd| 久草热视频在线观看| 欧产日产国产精品视频| 岛国av一区二区三区| 亚洲国产精品久久久久婷蜜芽| 亚洲电影观看| 在线观看日韩电影| 91女神在线观看| 亚洲毛片在线免费| 日韩女优av电影| 99久久人妻无码中文字幕系列| 亚洲精品白浆高清| 一区二区欧美亚洲| www深夜成人a√在线| 欧美69wwwcom| 91精品国产91久久| 免费无码国产精品| 精品一区二区三区蜜桃| 成人一区二区三区四区| 香蕉视频免费在线看| 国产清纯白嫩初高生在线观看91 | 国产日韩视频| 日韩免费观看网站| 91禁在线观看| 国产高清在线精品| 欧美精品一区二区三区四区五区| av女优在线| 亚洲一区二区3| 六月丁香婷婷激情| 综合久草视频| 亚洲国模精品一区| 亚洲色图27p| 在线亚洲观看| 成人国产在线激情| 手机看片福利在线| 国产精品久久久久影院亚瑟| 又大又硬又爽免费视频| 日韩欧美另类一区二区| 欧美一区二区三区爱爱| 泷泽萝拉在线播放| 欧美fxxxxxx另类| 日韩免费不卡av| 亚洲精品网站在线| 中文子幕无线码一区tr| 91黄色在线看| 亚洲伊人伊成久久人综合网| 日韩av影视综合网| 成人性生活毛片| 石原莉奈在线亚洲二区| 成人h在线播放| av大片在线看| 色综合天天在线| 国产香蕉精品视频| 婷婷亚洲图片| 国产精品久久久av久久久| www黄色网址| 国产精品久久99| 免费日韩中文字幕| 久久草在线视频| 色综合天天狠天天透天天伊人| 亚洲精品91天天久久人人| 99re这里只有精品首页| www国产免费| 视频欧美精品| 尤物yw午夜国产精品视频| 天海翼一区二区| 国产成人在线免费| 佐佐木明希av| 亚洲日本中文| 日韩中文字幕在线精品| www.欧美色| 91蜜桃在线免费视频| 国产情侣第一页| 日韩最新av| 久久视频在线视频| 国产精品国产三级国产普通话对白| 久久影院电视剧免费观看| 老太脱裤让老头玩ⅹxxxx| av成人男女| 久久久噜噜噜久久久| www.色呦呦| 一区二区三区蜜桃网| 涩多多在线观看| 久久久久亚洲| 5566av亚洲| caopen在线视频| 日韩一区二区高清| 538精品在线观看| 国产成人av电影在线观看| mm131午夜| 日韩中文字幕在线一区| 欧美激情一区二区三区在线视频观看| 国产美女免费视频| 亚洲免费伊人电影| 少妇献身老头系列| 在线精品在线| 麻豆精品传媒视频| 天天综合网站| 色天天综合狠狠色| 国产激情视频在线播放| 亚洲一区二区三区免费视频| zjzjzjzjzj亚洲女人| 亚洲二区免费| 日韩国产精品一区二区| 成人精品国产亚洲| 久久亚洲精品小早川怜子66| a在线观看免费| 天天av天天翘天天综合网| 9.1成人看片| 日本中文在线一区| 国产系列第一页| 999在线精品| 欧美在线日韩在线| 99riav在线| 欧美一区二区视频在线观看2022| 中文字幕av免费在线观看| 国产·精品毛片| 男人揉女人奶房视频60分| 日韩大片在线| 91视频99| 欧美色网一区| 欧美成人免费全部| 天天av综合网| 欧美挠脚心视频网站| 久久精品视频日本| 国产日韩精品视频一区| 在线免费看v片| 久久aⅴ国产紧身牛仔裤| 亚洲午夜高清视频| 成人在线tv视频| 国产精品日韩欧美综合| 波多野结衣中文字幕久久| 国产香蕉精品视频一区二区三区| 国产成人精品亚洲精品色欲| 色综合激情久久| 青青操视频在线播放| 久久久久久久电影| 亚洲欧美日韩中文字幕在线观看| 玖玖精品视频| 免费看毛片的网址| 成人羞羞动漫| 久久99久久99精品蜜柚传媒| 91成人app| 日本aⅴ大伊香蕉精品视频| 精品国产99久久久久久| 亚洲精品综合精品自拍| 亚洲成人一级片| 欧美日韩精品一区视频| 国产专区第一页| 亚洲一区二区三区四区在线| 免费看91的网站| 成人午夜激情在线| 天堂网在线免费观看| 在线日韩av| 偷拍盗摄高潮叫床对白清晰| 欧亚精品一区| 亚洲综合社区网| 性欧美freehd18| 97精品国产97久久久久久免费| av成人手机在线| 精品香蕉一区二区三区| 99久久婷婷国产一区二区三区| 色偷偷一区二区三区| 亚洲国产成人精品激情在线| 亚洲人成在线观看一区二区| 国产又黄又粗视频| 久久亚洲二区三区| 久久久久9999| 成人一区二区在线观看| 97人人模人人爽人人澡| 精品在线一区二区三区| 爆乳熟妇一区二区三区霸乳| 亚洲欧美成人综合| 欧美,日韩,国产在线| 黄色成人在线网址| 国产在线视频综合| 欧美精品午夜| 肉大捧一出免费观看网站在线播放 | 亚洲最大福利网站| 亚洲a成人v| 91精品国产自产在线观看永久| 91福利精品在线观看| 国产suv精品一区二区| 久久久久久久| 国产精品久久久久久久久久| 手机看片久久| 国产精品www网站| 99riav视频一区二区| 国产精品爽爽ⅴa在线观看| 成人a在线观看高清电影| 国产精品视频久久久| 欧美一区=区三区| 91沈先生作品| 98视频精品全部国产| 国产伦精品一区二区三区免费视频| youjizzjizz亚洲| 精品欧美国产| jiujiure精品视频播放| 亚洲蜜桃在线| 91成人免费| 国产成人在线小视频| 99国产精品私拍| 成年人免费在线播放| 日本在线不卡一区| 特黄视频免费观看| 国产91色综合久久免费分享| 伊人久久一区二区三区| 久久久久久黄色| 亚洲精品久久久久久国| 亚洲自拍另类综合| 制服.丝袜.亚洲.中文.综合懂色| 色天天综合久久久久综合片| 影音先锋国产资源| 日韩精品一区二区三区三区免费| 天天操天天干天天爱| 亚洲人成电影在线观看天堂色| 春暖花开成人亚洲区| 久久天天躁狠狠躁夜夜av| 黄页在线观看免费| 国产精品18久久久久久首页狼 | 超碰97国产在线| 亚洲人成网77777色在线播放| 亚洲成人午夜在线| 亚洲无吗在线| 亚洲天堂2018av| 成人精品一区二区三区四区 | 蜜臀91精品国产高清在线观看| 亚洲国产精品www| 欧美日本一区二区视频在线观看 | 91免费在线视频观看| 你懂得视频在线观看| 亚洲国产成人av好男人在线观看| 最近中文字幕免费观看| 精品国精品国产| jzzjzzjzz亚洲成熟少妇| 久久久久成人精品| 992tv国产精品成人影院| 韩国精品一区二区三区六区色诱| 99久久精品费精品国产风间由美| 水蜜桃色314在线观看| 久久精品国产网站| 国产精品1000部啪视频| 一区二区三区资源| 这里只有久久精品视频| 亚洲大胆人体在线| 黄色成年人视频在线观看| 欧美与黑人午夜性猛交久久久| 国产精品igao视频网网址不卡日韩| 久久精品一区二区三区不卡免费视频| 亚洲经典一区| 亚洲欧美日韩精品一区| 久久先锋影音av| 国产污视频在线观看| 911精品产国品一二三产区| 黄色视屏网站在线免费观看| 欧美国产日韩精品| 亚洲国产精选| 亚洲 国产 欧美一区| 午夜一区在线| 亚洲天堂2024| 亚洲一区二区三区四区五区黄 | 日本少妇全体裸体洗澡| 91精品在线免费观看| av网站在线免费观看| 国产精品成熟老女人| 国产成人手机高清在线观看网站| 黄色片网址在线观看| 成人免费观看av| 欧美精品xxxxx| 欧美一级xxx| 青春草视频在线观看| 91久久精品www人人做人人爽| 天天做天天爱天天综合网2021| 日本在线一二三区| 国产欧美日本一区视频| 无码无套少妇毛多18pxxxx| 亚洲精品视频久久| 久久爱91午夜羞羞| 欧美精品v日韩精品v国产精品| 亚洲视频大全| 黄色短视频在线观看| 精品福利在线观看| 亚洲色图狠狠干| 青草青草久热精品视频在线观看| 日韩精品免费一区二区三区竹菊 | 国产精品1区二区.| 可以直接看的黄色网址| 欧美一区二区三区喷汁尤物| 91cn在线观看| 成人av资源网| 亚洲专区一区二区三区| 亚洲永久精品ww.7491进入| 一本大道久久a久久精二百| 国产福利在线观看| 国产精品香蕉国产| 永久91嫩草亚洲精品人人| 涩视频在线观看| 黄色一区二区在线观看| 青青国产在线| 国产精品美女呻吟| 亚洲国产日韩欧美在线| 95视频在线观看| 欧美日韩一区二区三区在线免费观看| 日本福利片在线| 国产美女久久精品| 自拍日韩欧美| 强迫凌虐淫辱の牝奴在线观看| 色综合久久中文综合久久牛| av在线电影院| 99电影在线观看| 国产日韩欧美一区在线| 五月婷婷六月香| 精品对白一区国产伦| xx欧美xxx| 亚洲天堂av免费在线观看| 波多野结衣在线一区| 最近中文字幕免费观看| 欧美大片在线看| 视频精品在线观看| 中文字幕第六页| 色噜噜久久综合| 黄色网页在线免费观看| 精品在线观看一区二区| 日本伊人色综合网| 劲爆欧美第一页| 国产一区二区久久精品| 欧美一区一区| 丁香婷婷激情网| 亚洲一线二线三线久久久| sese一区| 国产私拍一区| 激情综合网激情| 日日夜夜操视频| 国内精品久久影院| 天天射综合网视频| 国精产品一区一区三区免费视频| 在线综合视频播放| 亚洲第一会所|