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

飛書 Android 升級 JDK 11 引發的 CI 構建性能問題

原創 精選
移動開發 Android
本文從飛書 Android 升級 JDK 11 意外引發的 CI 構建性能劣化談起,結合高版本 JDK 在 Docker 容器和 GC 方面的新特性,深挖 JVM 和 Gradle 的源碼實現,抽絲剝繭地介紹了分析過程和修復方法,供其他升級 JDK 的團隊參考。

作者|秦兵兵 & 宋志陽

一、摘要

本文從飛書 Android 升級 JDK 11 意外引發的 CI 構建性能劣化談起,結合高版本 JDK 在 Docker 容器和 GC 方面的新特性,深挖 JVM 和 Gradle 的源碼實現,抽絲剝繭地介紹了分析過程和修復方法,供其他升級 JDK 的團隊參考。

二、背景

最近飛書適配 Android 12 時把 targetSdkVersion 和 compileSdkVersion 改成了 31,改完后遇到了如下的構建問題。

圖片

在 StackOverflow 上有不少人遇到同樣的問題,簡單無侵入的解決方案是把構建用的 JDK 版本從 8 升到 11。

圖片

飛書目前用的 AGP 是 4.1.0,考慮到將來升級 AGP 7.0 會強制要求 JDK 11,而且新版 AS 已經做了鋪墊,所以就把構建用的 JDK 版本也升到了 11。

圖片

三、問題

升級后不少同學反饋子倉發組件(即發布 AAR)很慢,看大盤指標確實上漲了很多。

圖片

除了子倉發組件指標明顯上升,每周例行分析指標時發現主倉打包指標也明顯上升,從 17m上升到了 26m,漲幅約 50%。

圖片

四、分析

1.主倉打包和子倉發組件變成了單線程

子倉發組件指標和主倉打包指標,都在 06-17 劣化到了峰值,找了 06-17 主倉打包最慢的 10 次構建進行分析。

圖片

初步分析就有一個大發現:10 次構建都是單線程。

圖片

而之前正常的構建是并發的

圖片

子倉發組件的情況也一樣,由并發發布變成了單線程發布。

圖片

圖片

2.并發變單線程和升級 JDK 有關

查了下并發構建相關的屬性,org.gradle.parallel 一直為 true,并沒有更改。然后對比機器信息,發現并發構建用的是JDK 8,可用核心數是 96;單線程構建用的是 JDK 11,可用核心數是 1。初步分析,問題應該就在這里,從 JDK 8 升到 JDK 11 后,由并發構建變成了單線程構建,導致耗時明顯上升。而且升級 JDK 11 的修改是在 06-13 合入主干的,06-14 構建耗時明顯上升,時間上吻合。

圖片

圖片

3.整體恢復了并發,但指標沒下降

為了恢復并發構建,容易聯想到另一個相關的屬性 org.gradle.workers.max。

圖片

由于 PC 和服務器可用核心數有差異,為了不寫死,就試著在 CI 打包時動態指定了 --max-workers 參數。設置參數后主倉打包恢復了并發構建,子倉發組件也恢復了并發。

圖片

但觀察了一周大盤指標后,發現構建耗時并沒有明顯的回落,穩定在 25 m,遠高于之前 17 m的水平。

圖片

4.重點 Task 的耗時沒下降

細化分析,發現 ByteXTransform(ByteX是字節推出的基于 AGP Transform 的開源字節碼處理框架,通過把多個串行執行重復 IO 的 Transform 整合成一個 Transform 和并發處理 Class來優化 Transform 性能,詳見相關資料)和 DexBuilder 的走勢和構建整體的走勢一致,06-21 后都維持在高位,沒有回落。ByteXTransform 劣化了約 200 s,DexBuilder 劣化了約 200 s,而且這兩個 Task 是串行執行,合在一起劣化了約 400 s,接近構建整體的劣化9 m。GC 情況在 06-21 后也沒有好轉。

圖片

圖片

圖片

5.獲取 CPU 核心數的 API 有變化

進一步分析發現其他 Transform (由于歷史原因,有些 Transform 還沒有接入 ByteX)并沒有劣化,只有 ByteXTransform 明顯劣化了 200s。聯想到 ByteXTransform 內部使用了并發來處理 Class,而其他 Transform 默認都是單線程處理 Class,排查的同學定位到了一行可能出問題的代碼。

圖片

調試 DexBuilder 時發現核心邏輯 convertToDexArchive 也是并發執行。

圖片

再聯想到雖然使用 --max-workers 恢復了并發構建,但 OsAvailableProcessors 字段仍然為 1,而這個字段在源碼中是通過下面的 API 獲取的ManagementFactory.getOperatingSystemMXBean().getAvailableProcessors()

圖片

ManagementFactory.getOperatingSystemMXBean().getAvailableProcessors() 和Runtime.getRuntime().availableProcessors() 的效果一樣,底層也是 Native 方法。綜上推斷,可能是 JDK 11 的 Native 實現導致了獲取核心數的 API 都返回了 1,從而導致雖然構建整體恢復了并發,但依賴 API 進行并發設置的 ByteXTransform 和 DexBuilder 仍然有問題,進而導致這兩個 Task 的耗時一直沒有回落。

圖片

直接在 .gradle 腳本中調用這兩個 API 驗證上面的推斷,發現返回的核心數果然從 96 變成了 1。

圖片

圖片

另外有同學發現并不是所有的 CI 構建都發生了劣化,只有用 Docker 容器的 CI 構建發生了明顯的劣化,而 Linux 原生環境下的構建正常。所以獲取核心數的 Native 實現可能和 Docker 容器有關。

GC 劣化推斷也是同樣的原因。下面用 -XX:+PrintFlagsFinal 打印所有的 JVM 參數來驗證推斷。可以看到單線程構建用的是 SerialGC,GC 變成了單線程,沒能利用多核優勢,GC 耗時占比高。并發構建用的是 G1GC,而且 ParallelGCThreads = 64,ConcGCThreads = 16(約是 ParallelGCThreads 的 1/4),GC 并發度高,兼顧 Low Pause 和 High Throughput,GC 耗時占比自然就低。

// 單線程構建時 GC 相關的參數值
bool UseG1GC = false {product} {default}
bool UseParallelGC = false {product} {default}
bool UseSerialGC = true {product} {ergonomic}
uint ParallelGCThreads = 0 {product} {default}
uint ConcGCThreads = 0 {product} {default}
// 并發構建時 GC 相關的參數值
bool UseG1GC = true {product} {ergonomic}
bool UseParallelGC = false {product} {default}
bool UseSerialGC = false {product} {default}
uint ParallelGCThreads = 63 {product} {default}
uint ConcGCThreads = 16 {product} {ergonomic}

圖片

圖片

6.Native 源碼分析

下面分析下 JDK 8 和 JDK 11 獲取可用核心數的 Native 實現,由于 AS 默認使用 OpenJDK,這里就用OpenJDK 的源碼進行分析。

JDK 8 實現

圖片

JDK 11 實現

圖片

JDK 11 默認沒有設置可用核心數并開啟了容器化,所以可用核心數由 OSContainer::active_processor_count() 決定。

查詢 Docker 環境下的 CPU 參數并代入計算邏輯,很容易得出可用核心數是 1,從而導致 Native 方法返回 1

cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us
cat /sys/fs/cgroup/cpu/cpu.cfs_period_us
cat /sys/fs/cgroup/cpu/cpu.shares

圖片

五、修復

1.設置相關的 JVM 參數

總結上面的分析可知,問題的核心是在 Docker 容器默認的參數配置下 JDK 11 獲取核心數的 API 返回值有了變化。Gradle 構建時 org.gradle.workers.max 屬性的默認值、ByteXTransform 的線程數、DexBuilder 設置的 maxWorkers、OsAvailableProcessors 字段、GC 方式都依賴了獲取核心數的 API,用 JDK 8 構建時 API 返回 96,用 JDK 11 構建時返回 1,修復的思路就是讓 JDK 11 也能正常返回 96。

從源碼看,修復該問題主要有兩種辦法:

圖片

設置 -XX:ActiveProcessorCount=[count],指定 JVM 的可用核心數

設置 -XX:-UseContainerSupport,讓 JVM 禁用容器化

設置 -XX:ActiveProcessorCount=[count]

圖片

根據 Oracle 官方文檔和源碼,可以指定 JVM 的可用核心數來影響 Gradle 構建。

這個方法適用于進程常駐的場景,避免資源被某個 Docker 實例無限占用。例如 Web 服務的常駐進程,若不限制資源,當程序存在 Bug 或出現大量請求時,JVM 會不斷向操作系統申請資源,最終進程會被 Kubernetes 或操作系統殺死。

設置 -XX:-UseContainerSupport

圖片

根據 Oracle 官方文檔和源碼,通過顯式設置 -XX:-UseContainerSupport 可以禁用容器化,不再通過 Docker 容器相關的配置信息來設置 CPU 數,而是直接查詢操作系統來設置。

這個方法適用于構建任務耗時不長的場景,應最大程度調度資源快速完成構建任務。目前 CI 上均為短時間的構建任務,當任務完成后,Docker 實例會視情況進行緩存或銷毀,資源也會被釋放。

選擇的參數

對于 CI 構建,雖然可以查詢物理機的可用核心數,然后設置-XX:ActiveProcessorCount。但這里根據使用場景,選擇了設置更簡單的 -XX:-UseContainerSupport 來提升構建性能。

2.怎么設置參數

通過命令行設置

這個是最先想到的方法,但執行命令 "./gradlew clean, app:lark-application:assembleProductionChinaRelease -Dorg.gradle.jvmargs=-Xms12g -Xss4m -XX:-UseContainerSupport" 后有意外發現。雖然 OsAvailableProcessors 字段和 ByteXTransform 的耗時恢復正常;但構建整體仍然是單線程且 DexBuilder 的耗時也沒回落。

這個和 Gradle 的構建機制有關。

  • 執行上面的命令時會觸發 GradleWrapperMain#main 方法啟動 GradleWrapperMain 進程(下面簡稱 wrapper 進程)
  • wrapper 進程會解析 org.gradle.jvmargs 屬性,然后通過 Socket 傳遞給 Gradle Daemon 進程(下面簡稱 daemon 進程),所以上面的 -XX:-UseContainerSupport 只對 daemon 進行有效,對 wrapper 進程無效,同時 wrapper 進程也會初始化DefaultParallelismConfiguration#maxWorkerCount 然后傳給 daemon 進程
  • daemon 進程禁用了容器化,所以能通過 API 獲取到正確的核心數,從而正確顯示 OsAvailableProcessors 字段和并發執行 ByteXTransform;但 wrapper 進程沒有禁用容器化,所以獲取的核心數是 1 ,傳給 daemon 進程后導致構建整體和 DexBuilder 都是單線程執行。

圖片

圖片

圖片

這里有個不好理解的點是 ByteXTransform 和 DexBuilder 都是 daemon 進程中執行的 Task,為什么 ByteXTransform 恢復正常了,而 DexBuilder 沒有?

因為 ByteXTransform 內部主動調了 API ,能獲取到正確的核心數,所以 ByteXTransform 可以并發執行;但 DexBuilder 受 Gradle Worker API (詳見相關資料)的調度,執行時的 maxWorkers 是被動設置的(wrapper 進程傳給 daemon 進程的)。如果通過 -XX:ActiveProcessorCount=[count] 給 wrapper 進程指定核心數,然后斷點,會發現 maxWorkers = count 。所以當 wrapper 進程沒有禁用容器化時,獲取的核心數是 1,DexBuilder 會單線程執行,因而沒有恢復正常。

圖片

圖片

上面引出來的一個點是既然構建整體和 DexBuilder 都受 Gradle Worker API 調度,為什么之前在 CI 上執行“./gradlew clean, app:lark-application:assembleProductionChinaRelease --max-workers=96”時,構建整體恢復了并發,但 DexBuilder 仍然沒有恢復正常?

因為 DexBuilder 的并發度除了受 maxWorkers 影響,還受 numberOfBuckets 的影響。

對于 Release 包,DexBuilder 的輸入是上游 MinifyWithProguard (不是MinifyWithR8,因為顯式關閉了R8)的輸出(minified.jar),minified.jar 會分成 numberOfBuckets 個 ClassBucket,每個 ClassBucket 會作為 DexWorkActionParams 的一部分設置給 DexWorkAction,最后把 DexWorkAction 提交給 WorkerExecutor 分配的線程完成 Class 到 DexArchive 的轉換

圖片

圖片

圖片

默認情況下,numberOfBuckets = DexArchiveBuilderTask#DEFAULT_NUM_BUCKETS = Math.max(12 / 2, 1) = 6

圖片

雖然通過 --max-workers 把 DexBuilder 的 maxWorkers 設置成了12,但由于 daemon 進程默認開啟了容器化,通過 Runtime.getRuntime().availableProcessors() 獲取的可用核心數是 1,因此 numberOfBuckets 并不是預期的 6 而是 1,所以轉 dex 時不能把 Class 分組然后并發處理,導致 DexBuilder 的耗時沒有恢復正常。CI 上也是一樣的邏輯,numberOfBuckets 從 48 變成了 1,極大的降低了并發度。

圖片

所以要讓構建整體恢復并發,讓DexBuilder 的耗時恢復正常,還需要讓 daemon進程接收的 maxWorkers 恢復正常,即讓wrapper 進程獲取到正確的核心數。通過給工程根目錄下的 gradlew 腳本設置 DEFAULT_JVM_OPTS 可以達到這個效果。

圖片

所以最終執行如下構建命令時,wrapper 進程和 daemon 進程都能通過 API 獲取到正確的核心數,從而讓構建整體、ByteXTransform、DexBuilder、OsAvailableProcessors 字段顯示都恢復正常。

圖片

但上面的命令在 CI Docker 容器中執行時正常,在本地 Mac 執行時會報無法識別 UseContainerSupport。通過判斷構建機器和環境(本地 Mac,CI Linux 原生環境,CI Docker 容器)動態設置參數可以解這個問題,但顯然比較麻煩。

圖片

通過環境變量設置

后來發現環境變量 JAVA_TOOL_OPTIONS 在創建 JVM 時就會檢測,簡單設置后對 wrapper 進程和 daemon 進程都有效,也可以解決上面所有的問題。

圖片

選擇的設置方法

對比上面兩種設置方法,這里選擇了更簡單的即通過環境變量來設置 -XX:-UseContainerSupport。

3.新老分支同時可用

由于飛書自身的業務特點,老分支也需要長期維護,老分支上存在和 JDK 11 不兼容的構建邏輯,為了新老分支都能正常出包,需要動態設置構建用的 JDK 版本。

另外 UseContainerSupport 是 JDK 8u191 引入的(也就是說高版本的 JDK 8 也有上面的問題,教育團隊升 AGP 4.1.0 時把 JDK 升到了 1.8.0_332,就遇到上面的問題),直接設置給 JDK 1.8.0_131 會無法識別,導致無法創建 JVM。

圖片

所以飛書最終的解決方案是根據分支動態設置構建用的 JDK 版本,并且只在使用 JDK 11 時顯式設置JAVA_TOOL_OPTIONS 為 -XX:-UseContainerSupport。對于其他團隊,如果老分支用 JDK 11 也能正常構建,可以選擇默認使用 JDK 11 且內置了該環境變量的 Docker 鏡像,無需修改構建邏輯。

六、效果

06-30 22點以后合入了修改,07-01 的構建整體耗時明顯下降,恢復到了 06-13(合入了 JDK 11 的升級)之前的水平,ByteXTransform 和 DexBuilder 的耗時也回落到了之前的水平,構建指標恢復正常,OsAvailableProcessors 字段也恢復正常,GC 情況恢復正常,世界又清靜了。

圖片

圖片

圖片

圖片

圖片

七、總結

雖然最后解決了構建性能劣化的問題,但在整個引入問題-->發現問題-->分析問題的流程中還是有不少點可以改進。比如對基礎構建工具(包括Gradle、AGP、Kotlin、JDK)變更進行更充分的測試可以事前發現問題,完善的防劣化機制可以有效攔截問題,有區分度的監控報警可以及時發現劣化,強大的自動歸因機制可以給分析問題提供更多輸入,后面會持續完善這些方面來提供更好的研發體驗。

責任編輯:未麗燕 來源: 字節跳動技術團隊
相關推薦

2020-06-05 07:20:41

測試自動化環境

2010-01-07 11:21:25

2021-10-18 22:42:54

Windows 11操作系統微軟

2021-10-09 08:57:46

Windows 11操作系統微軟

2021-10-09 20:21:55

微軟Windows 11Windows

2009-06-30 16:08:19

性能問題代碼寫法

2022-02-22 09:00:00

軟件開發CI/CD 管道工具

2020-11-11 10:00:13

NAT性能內核

2024-04-10 07:16:17

JDBC驅動MySQL數據庫

2025-11-05 02:00:00

2025-07-09 13:19:22

2023-02-19 15:28:39

CI/CD 管道集成開發

2013-09-30 09:18:39

2013-06-20 09:59:12

Javascriptvar

2025-08-01 02:00:00

2022-12-16 13:16:47

2010-02-04 15:01:07

Android架構

2010-02-04 10:27:33

Android DDM

2017-12-28 10:27:28

2021-11-11 20:49:22

數字化
點贊
收藏

51CTO技術棧公眾號

久草免费在线观看视频| 国自产拍偷拍精品啪啪一区二区| 中文字幕观看在线| 综合激情视频| 日韩av中文在线| 精品久久久久久久无码| 欧美精品hd| 成人一区在线观看| 国产精品久久999| 国模无码国产精品视频| 秋霞影院一区二区三区| 欧美视频中文字幕| 日韩五码在线观看| 日本在线人成| 91麻豆国产福利精品| 成人久久精品视频| 一级片在线观看免费| 永久91嫩草亚洲精品人人| 亚洲成人a级网| 国产精品自拍视频在线| 欧美一级鲁丝片| 亚洲欧美综合另类在线卡通| 久久综合九色综合久99| 国产成人三级在线播放| 日本美女视频一区二区| 久久久久日韩精品久久久男男| 亚洲一区二区自偷自拍| 国产精品xxx在线观看| 欧美美女bb生活片| 欧美综合在线观看视频| 1234区中文字幕在线观看| 国产精品国产三级国产aⅴ入口| 国产精品制服诱惑| 国产精品人人爽| 日韩va欧美va亚洲va久久| 97在线视频免费播放| 男人的天堂久久久| 成人3d动漫在线观看| 亚洲精品网址在线观看| 亚洲精品无码一区二区| 国产精品1区在线| 欧美怡红院视频| 黄色片视频在线免费观看| 俄罗斯一级**毛片在线播放 | 91欧美精品午夜性色福利在线 | 国产欧美69| 欧美日韩福利视频| 九九九免费视频| 亚洲字幕久久| 精品久久久av| 亚洲色图27p| 日韩精品第一区| 在线看国产精品| 欧美 日韩 成人| 成人同人动漫免费观看| 在线播放日韩专区| 五月激情四射婷婷| 欧美3p视频| 久久精彩免费视频| 美女视频久久久| 91精品国产91久久久久久密臀| 色狠狠av一区二区三区香蕉蜜桃| 三上悠亚影音先锋| 欧美日韩老妇| y97精品国产97久久久久久| 亚洲天堂精品一区| 外国成人免费视频| 欧美成年人在线观看| 欧美激情国产精品免费| 精品91久久久久| 国内精品久久久久伊人av| 久久精品国产亚洲av高清色欲| 欧美网站在线| 午夜精品一区二区三区在线视频 | 欧美三区在线观看| 欧美成人乱码一二三四区免费| 欧美网站免费| 91麻豆精品久久久久蜜臀| 亚欧精品在线视频| 国产精品毛片视频| 亚洲美女喷白浆| 秋霞网一区二区三区| 91精品电影| 欧美精品www| 老熟妇仑乱一区二区av| 麻豆精品在线播放| 成人久久18免费网站漫画| 日本毛片在线观看| 国产亚洲精品福利| 99热一区二区三区| 不卡的av影片| 欧美午夜寂寞影院| 人妻激情偷乱频一区二区三区| 日本天堂一区| 日韩中文字幕在线视频播放| 中文字幕av免费在线观看| 野花国产精品入口| 国产精品丝袜久久久久久高清 | 精品人妻人人做人人爽| 伊人色综合一区二区三区影院视频| 色琪琪一区二区三区亚洲区| 天天干天天色天天干| 国产精品调教视频| 最新的欧美黄色| 欧美成人aaaaⅴ片在线看| 久久久久久一区二区| 亚洲最大的成人网| 蜜桃免费在线| 亚洲综合自拍偷拍| 亚洲精品午夜在线观看| 蜜臀av一区| 欧美成人激情视频免费观看| 日韩欧美在线观看免费| 国产成人免费av在线| 神马影院午夜我不卡| av中文字幕在线看| 777久久久精品| 男女做爰猛烈刺激| 日韩视频二区| 444亚洲人体| 日本福利在线| 色欧美日韩亚洲| 西西大胆午夜视频| 欧美三级免费| 成人午夜激情网| 国产一级免费在线观看| 亚洲宅男天堂在线观看无病毒| 超碰在线97免费| 欧美调教网站| 久久电影一区二区| 在线观看不卡的av| 国产欧美日产一区| 黑人糟蹋人妻hd中文字幕| 一本色道69色精品综合久久| 日韩有码在线播放| 人妻中文字幕一区二区三区| www.色综合.com| 欧美大黑帍在线播放| 超碰国产精品一区二页| 中文字幕成人在线| 人人草在线观看| 91麻豆产精品久久久久久| 欧美精品久久久久久久自慰| 在线综合色站| 九九精品在线播放| 国产av无码专区亚洲av| 日韩一区中文字幕| 性欧美在线视频| 日韩欧美三级| 国产一区私人高清影院| 在线视频1区2区| 欧美日韩欧美一区二区| 肉色超薄丝袜脚交69xx图片| 日韩av电影天堂| 亚洲春色综合另类校园电影| 一区在线影院| 久久精品亚洲热| 99久久久久成人国产免费| 亚洲少妇最新在线视频| 欧美激情第一区| 欧美日韩国产免费观看| 99久热re在线精品视频| av日韩国产| 日韩电影中文字幕在线| 国产成人免费看| 欧美激情一区二区在线| 九九九九九国产| 亚洲视频中文| 久久精品ww人人做人人爽| 在线天堂资源www在线污| 亚洲人在线视频| 国产精品第六页| 日韩美女啊v在线免费观看| 免费成人黄色大片| 国一区二区在线观看| 国产在线精品一区| 日韩国产激情| 久久视频中文字幕| 女人18毛片水真多18精品| 一本一道久久a久久精品| 亚洲国产日韩一区无码精品久久久| 七七婷婷婷婷精品国产| 激情图片qvod| 欧美日韩一区二区三区在线电影| 国产精品www| a黄色片在线观看| 亚洲护士老师的毛茸茸最新章节| www五月天com| 亚洲男人的天堂一区二区| av av在线| 免费在线欧美视频| 日韩成人三级视频| 精品久久影视| 国产精品久久精品视| 日本精品不卡| 欧美激情在线一区| 成人午夜在线观看视频| 日韩一区二区高清| 午夜一区二区三区四区| 亚洲伊人伊色伊影伊综合网| 国产美女永久免费无遮挡| 国产剧情一区二区| 无码无遮挡又大又爽又黄的视频| 2023国产精品久久久精品双| 精品日韩电影| 欧美一级片网址| 国产精品国内视频| heyzo一区| 久久伊人91精品综合网站| 激情综合闲人网| 亚洲成人av在线播放| 国产毛片一区二区三区va在线| 黑人巨大精品欧美一区二区三区| 999精品在线视频| 国产目拍亚洲精品99久久精品| 成人区人妻精品一区二| 九一久久久久久| 日韩中文字幕免费在线| 亚洲国产影院| 蜜臀在线免费观看| 99成人在线视频| 欧洲精品久久| 伦理一区二区| 国产精品区二区三区日本| **欧美日韩在线| 国产大片精品免费永久看nba| av人人综合网| 欧美激情18p| 18加网站在线| 久久视频在线观看免费| 免费黄色网址在线观看| 中文字幕一区电影| 成年人视频在线观看免费| 日韩毛片在线观看| 亚洲 美腿 欧美 偷拍| 精品国产一二三| 成人精品在线播放| 精品日韩在线观看| 精品国产一级片| 欧美mv日韩mv| www.国产欧美| 精品久久国产字幕高潮| 性做久久久久久久久久| 91精品国产欧美一区二区| 国产精品女同一区二区| 在线播放日韩导航| 国产成人三级一区二区在线观看一 | 亚洲高清在线观看一区| 国产一区二区精品久| 欧美一卡2卡3卡4卡无卡免费观看水多多| 国产伦理久久久久久妇女| 国产麻豆日韩| 欧美调教网站| 日本精品一区二区三区不卡无字幕| 日本欧美高清| 婷婷亚洲婷婷综合色香五月| 日韩欧美视频在线播放| 精品国产无码在线| 欧美三级在线| 999在线观看视频| 亚洲免费中文| 成人免费xxxxx在线视频| 看电视剧不卡顿的网站| 亚洲最大天堂网| 国产一区二区三区蝌蚪| 色诱av手机版| 99国产精品久| 在线视频第一页| 最新国产成人在线观看| 久热这里有精品| 性久久久久久久久| 免费又黄又爽又猛大片午夜| 欧美精品 国产精品| 亚洲国产欧美另类| 亚洲精品在线观看www| h视频在线播放| 欧美国产在线视频| 欧美成人影院| 亚洲a级在线播放观看| 风间由美中文字幕在线看视频国产欧美| 91啪九色porn原创视频在线观看| 91久久久久久久久久久久久久| 久久精品亚洲麻豆av一区二区| 免费看日本黄色片| 亚洲日本丝袜连裤袜办公室| 国产在线一二区| 国产精品sm| 五月天激情图片| 久久成人一区| 佐山爱在线视频| 久久噜噜亚洲综合| 性欧美疯狂猛交69hd| 图片区小说区区亚洲影院| 波多野结衣电影在线播放| 欧美一区二区三区啪啪| 黄网在线观看| 欧美激情一级欧美精品| 色豆豆成人网| 国产伦一区二区三区色一情| 日韩在线观看| 国产原创popny丨九色 | 91禁外国网站| 亚洲人成777| 欧美极品色图| 欧美三级第一页| 亚洲一区精品视频在线观看| 97精品超碰一区二区三区| 成人自拍小视频| 91国产精品成人| 人妻少妇精品无码专区| 久久影视电视剧免费网站| 性欧美超级视频| 精品国产91亚洲一区二区三区www| 色综合色综合| mm1313亚洲国产精品无码试看| 丁香婷婷综合激情五月色| 国产成人在线网址| 在线免费观看成人短视频| 日本精品久久久久| 欧美高清视频在线| 99视频有精品高清视频| 色播亚洲婷婷| 亚洲一区一卡| 国产熟女高潮一区二区三区| 亚洲精品成人天堂一二三| 在线观看亚洲国产| 永久免费精品影视网站| 超碰国产一区| 久久手机视频| 日韩一级在线| 国产高潮失禁喷水爽到抽搐 | 99精品视频一区二区三区| 美女的奶胸大爽爽大片| 欧美日本精品一区二区三区| 国产一级在线观看| 日本久久91av| 国产不卡一区| 欧美激情国产精品日韩| 99精品视频在线免费观看| 久久久国产精品成人免费| 亚洲高清在线观看| 欧美久久天堂| 欧美一区激情视频在线观看| 亚洲综合日本| 人妻少妇一区二区| 日本道免费精品一区二区三区| 日韩精品一二| 国产91热爆ts人妖在线| 精品视频97| 91亚洲免费视频| 亚洲日本va在线观看| 精品欧美一区二区精品少妇| 久久91精品国产91久久久| 一区二区三区在线免费看| 免费看欧美黑人毛片| 99精品国产91久久久久久| 欧产日产国产69| 日韩在线视频网| 久久的色偷偷| 国产亚洲黄色片| 91理论电影在线观看| 波多野结衣视频观看| 最新69国产成人精品视频免费| 久久伊人精品| 少妇av一区二区三区无码| 久久久久久久久久久99999| 国产精品xxxxxx| 久久精品人人做人人爽| 成人精品毛片| 日日摸天天爽天天爽视频| 中文字幕一区二区三区不卡| 精品国产一级片| 91高潮在线观看| 日韩中文在线电影| 性高潮久久久久久| 精品久久久国产| yw193.com尤物在线| 波多野结衣一区二区三区在线观看| 影院欧美亚洲| 成熟人妻av无码专区| 日韩欧美中文字幕精品| 在线黄色的网站| 正在播放一区| av在线不卡免费看| 这里只有精品国产| 欧美激情亚洲自拍| 欧美一区电影| 黄色性视频网站| 欧美少妇一区二区| f2c人成在线观看免费视频| 视频一区国产精品| 成人自拍视频在线| 中文字幕人妻色偷偷久久| 久久久久久尹人网香蕉| 精品欧美久久| 日本性生活一级片| 欧美日韩精品电影| 中文字幕影音在线| 丁香色欲久久久久久综合网| 欧美激情中文字幕|