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

高性能 Java 計算服務的性能調優實戰

移動開發
本文將介紹分享 vivo push 推薦項目中的性能調優實踐,希望給大家提供一些借鑒和參考。
作者|vivo 互聯網服務器團隊- Chen Dongxing、Li Haoxuan、Chen Jinxia

隨著業務的日漸復雜,性能優化儼然成為了每一位技術人的必修課。性能優化從何著手?如何從問題表象定位到性能瓶頸?如何驗證優化措施是否有效?本文將介紹分享 vivo push 推薦項目中的性能調優實踐,希望給大家提供一些借鑒和參考。

一、背景介紹

在 Push 推薦中,線上服務從 Kafka 接收需要觸達用戶的事件,之后為這些目標用戶選出最合適的文章進行推送。服務由 Java 開發,CPU 密集計算型。

隨著業務的不斷發展,請求并發及模型計算量越來越大,導致工程上遇到了性能瓶頸,Kafka 消費出現嚴重的積壓現象,無法及時完成目標用戶的分發,業務增長訴求得不到滿足,故亟需進行性能專項優化。

圖片

二、優化衡量指標和思路

我們的性能衡量指標是吞吐量 TPS ,由經典公式 TPS = 并發數 / 平均響應時間RT  可以知道,若需提高 TPS,可以有 2 種方式:

  • 提高并發數,比如提升單機的并行線程數,或者橫向擴容機器數;
  • 降低平均響應時間 RT,包括應用線程(業務邏輯)執行時間,以及 JVM 本身的 GC 耗時。
  • 實際情況中,我們的機器 CPU 利用率已經很高,達到 80% 以上,提升單機并發數的預期收益有限,故把主要精力投入到降低 RT 上。

下面將從 熱點代碼 和 JVM GC 兩個方面進行詳解,我們如何分析定位到性能瓶頸點,并使用 3 招將吞吐量提升 100% 。

三、熱點代碼優化篇

如何快速找到應用中最耗時的熱點代碼呢?借助阿里巴巴開源的 arthas 工具,我們獲取到線上服務的 CPU 火焰圖。

圖片

火焰圖說明:火焰圖是基于 perf 結果產生的 SVG 圖片,用來展示 CPU 的調用棧。

y 軸表示調用棧,每一層都是一個函數。調用棧越深,火焰就越高,頂部就是正在執行的函數,下方都是它的父函數。

x 軸表示抽樣數,如果一個函數在 x 軸占據的寬度越寬,就表示它被抽到的次數多,即執行的時間長。注意,x 軸不代表時間,而是所有的調用棧合并后,按字母順序排列的。

火焰圖就是看頂層的哪個函數占據的寬度最大。只要有“平頂”(plateaus),就表示該函數可能存在性能問題。

顏色沒有特殊含義,因為火焰圖表示的是 CPU 的繁忙程度,所以一般選擇暖色調。

3.1 優化1:盡量避免原生 String.split 方法

3.1.1 性能瓶頸分析

從火焰圖中,我們首先發現了有 13% 的 CPU 時間花在了 java.lang.String.split 方法上。

熟悉性能優化的同學會知道,原生 split 方法是性能殺手,效率比較低,頻繁調用時會耗費大量資源。

不過業務上特征處理時確實需要頻繁地 split,如何優化呢?

通過分析 split 源碼,以及項目的使用場景,我們發現了 3 個優化點:

(1)業務中未使用正則表達式,而原生 split 在處理分隔符為 2 個及以上字符時,默認按正則表達式方式處理;眾所周知,正則表達式的效率是低下的。

圖片

(2)當分隔符為單個字符(且不為正則表達式字符)時,原生 String.split 進行了性能優化處理,但中間有些內部轉換處理,在我們的實際業務場景中反而是多余的、消耗性能的。

其具體實現是:通過 String.indexOf 及 String.substring 方法來實現分割處理,將分割結果存入 ArrayList 中,最后將 ArrayList 轉換為 string[] 輸出。而我們業務中,其實很多時候需要 list 型結果,多了 2 次 list 和 string[] 的互轉。

圖片

(3)業務中調用 split 最頻繁的地方,其實只需要 split 后的第 1 個結果;原生 split 方法或其它工具類有重載優化方法,可以指定 limit 參數,滿足 limit 數量后可以提前返回;但業務代碼中,使用 str.split(delim)[0] 方式,非性能最佳。

3.1.2 優化方案

針對業務場景,我們自定義實現了性能優化版的 split 實現。

import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
/**
* 自定義split工具
*/
public class SplitUtils {
/**
* 自定義分割函數,返回第一個
*
* @param str 待分割的字符串
* @param delim 分隔符
* @return 分割后的第一個字符串
*/
public static String splitFirst(final String str, final String delim) {
if (null == str || StringUtils.isEmpty(delim)) {
return str;
}
int index = str.indexOf(delim);
if (index < 0) {
return str;
}
if (index == 0) {
// 一開始就是分隔符,返回空串
return "";
}
return str.substring(0, index);
}
/**
* 自定義分割函數,返回全部
*
* @param str 待分割的字符串
* @param delim 分隔符
* @return 分割后的返回結果
*/
public static List<String> split(String str, final String delim) {
if (null == str) {
return new ArrayList<>(0);
}
if (StringUtils.isEmpty(delim)) {
List<String> result = new ArrayList<>(1);
result.add(str);
return result;
}
final List<String> stringList = new ArrayList<>();
while (true) {
int index = str.indexOf(delim);
if (index < 0) {
stringList.add(str);
break;
}
stringList.add(str.substring(0, index));
str = str.substring(index + delim.length());
}
return stringList;
}
}

相比原生 String.split ,主要有幾方面的改動:

  1.  放棄正則表達式的支持,僅支持按分隔符進行 split;
  2. 出參直接返回 list。分割處理實現,與原生實現中針對單字符的處理類似,使用 string.indexOf 及 string.substring 方法,分割結果放入 list 中,出參直接返回 list,減少數據轉換處理;
  3. 提供 splitFirst 方法,業務場景只需要分隔符前第一段字符串時,進一步提升性能。

3.1.3 微基準測試

如何驗證我們的優化效果呢?首先選用 jmh 作為微基準測試工具,對照選用 原生 String.split 以及 apache 的 StringUtils.split方法,測試結果如下:

選用單字符作為分隔符

圖片

可以看出,原生實現與apache的工具類性能差不多,而自定義實現性能提升了約 50%。

選用多字符作為分隔符

圖片

當分隔符使用 2 個長度的字符時,原始實現的性能大幅降低,只有單 char 時的 1/3 ;而apache的實現也降低至原來的 2/3 ,而自定義實現與原來基本保持一致。

選用單字符作為分隔符,只需返回第 1 個分割結果

圖片

選用單字符作為分隔符,并只需第 1 個分割結果時,自定義實現的性能是原生實現的 2 倍,并是取原生實現完整結果的 5 倍。

3.1.4 端到端優化效果

經微基準測試驗證收益后,我們將優化部署到在線服務中,驗證端到端整體的性能收益;

重新使用arthas采集火焰圖,split 方法耗時降低至 2% 左右;端到端整體耗時下降了 31.77% ,吞吐量上漲了 45.24% ,性能收益特別明顯。

3.2 優化2:加快 map 的查表效率

3.2.1 性能瓶頸分析

從火焰圖中,我們發現 HashMap.getOrDefault 方法耗時占比也特別多,達到了 20%,主要在查詢權重 map 上,這是因為:

  1. 業務中確實需高頻調用,特征交叉處理后數量膨脹,單機的調用并發達到了約 1000w ops/s。
  2. 權重 map 本身也很大,存儲了 1000 萬多的 entry,占用了很大一塊內存;同時 hash 碰撞的概率也增大,碰撞時的查詢效率由 O(1) 降低成了 O(n) (鏈表) 或 O(logn) (紅黑樹)。

Hashmap 本身是非常高效的 map 實現,起初我們嘗試了調整加載因子 loadFactor 或 換用其它 map 實現,均未取得明顯收益。

如何才能提升 get 方法的性能呢?

3.2.2 優化方案

分析過程中我們發現查詢 map 的 key(交叉處理后的特征 key )是字符串型,且平均長度在 20 以上;我們知道 string 的 equals 方法其實是遍歷比對 char[] 中的字符,key 越長則比對效率越低。

public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}

是否可以將 key 的長度縮短,或者甚至換成數值型?通過簡單的微基準測試,我們發現思路應該是可行的。

于是與算法同學溝通,巧的是算法同學正好也有相同訴求,他們在切換新訓練框架過程中發現 string 的效率特別低,需要把特征換成數值型。

一拍即合,方案很快確定:

  1. 算法同學將特征 key 映射成 long 型數值,映射方法為自定義的 hash 實現,盡量減少 hash 碰撞概率;
  2. 算法同學訓練輸出新模型的權重 map ,可以保留更多 entry ,以打平基線模型的效果指標;
  3. 打平基線模型的效果指標后,在線服務端灰度新模型,權重 map 的 key 改用 long 型,驗證性能指標。

3.2.3 優化效果

在增加了 30% 的特征 entry 數下(模型效果超過基線),工程上的性能也達到了明顯收益;

端到端整體耗時下降了 20.67%,吞吐量上漲了 26.09%;此外內存使用上也取得了良好收益,權重map的內存大小下降了30%。

圖片

四、JVM GC優化篇

Java 設計垃圾自動回收的目的是將應用程序開發人員從手動動態內存管理中解放出來。開發人員無需關心內存的分配與回收,也不用關注分配的動態內存的生存期。這完全消除了一些與內存管理相關的錯誤,代價是增加了一些運行時開銷。

在小型系統上開發時,GC 的性能開銷可以忽略,但擴展到大型系統(尤其是那些具有大量數據、許多線程和高事務率的應用程序)時,GC 的開銷不可忽視,甚至可能成為重要的性能瓶頸。

圖片

上圖 模擬了一個理想的系統,除了垃圾收集之外,它是完全可伸縮的。紅線表示在單處理器系統上只花費 1% 時間進行垃圾收集的應用程序。這意味著在擁有 32 個處理器的系統上,吞吐量損失超過 20% 。洋紅色線顯示,對于垃圾收集時間為 10% 的應用程序(在單處理器應用程序中,垃圾收集時間不算太長),當擴展到 32 個處理器時,會損失 75% 以上的吞吐量。

故 JVM GC 也是很重要的性能優化措施。

我們的推薦服務使用高配計算資源(64核256G),GC的影響因素挺可觀;通過采集監控在線服務 GC 數據,發現我們的服務 GC 情況挺糟糕的,每分鐘YGC累計耗時約 10s。

GC 開銷為何這么大,如何降低 GC 的耗時呢?

4.1 優化3:使用堆外緩存代替堆內緩存

4.1.1 性能瓶頸分析

圖片

我們 dump 了服務的存活堆對象,使用 mat 工具進行內存分析,發現有 2 個對象特別巨大,占了總存活堆內存的 76.8%。其中:

  1. 第 1 大對象是本地緩存,存儲了細粒度級別的常用數據,每臺機器千萬級別數據量;使用 caffine 緩存組件,緩存自動刷新周期設定 1 小時;目的是盡量減少 IO 查詢次數;
  2.  第 2 大對象是模型權重 map 本身,常駐內存中,不會 update,等新模型載入后被作為舊模型進行卸載。

4.1.2 優化方案

如何能盡量緩存較多的數據,同時避免過大的 GC 壓力呢?

我們想到了把緩存對象移到堆外,這樣可以不受堆內內存大小的限制;并且堆外內存,并不受 JVM GC 的管控,避免了緩存過大對 GC 的影響。經過調研,我們決定采用成熟的開源堆外緩存組件 OHC 。

(1)OHC 介紹

簡介

OHC 全稱為 off-heap-cache,即堆外緩存,是 2015 年針對 Apache Cassandra 開發的緩存框架,后來從 Cassandra 項目中獨立出來,成為單獨的類庫,其項目地址為https://github.com/snazy/ohc 。

特性

  • 數據存儲在堆外,只有少量元數據存儲堆內,不影響 GC
  • 支持為每個緩存項設置過期時間
  • 支持配置 LRU、W_TinyLFU 驅逐策略
  • 能夠維護大量的緩存條目
  • 支持異步加載緩存
  • 讀寫速度在微秒級別

(2)OHC 用法

快速開始:

OHCache ohCache = OHCacheBuilder.newBuilder().
keySerializer(yourKeySerializer)
.valueSerializer(yourValueSerializer)
.build();

可選配置項:

圖片

在我們的服務中,設置 capacity 容量 12G,segmentCount 分段數 1024,序列化協議使用 kryo。

4.1.3 優化效果

切換到堆外緩存后,服務 YGC 降低到了 800ms / 每分鐘,端到端的整體吞吐量上漲了約 20%。

4.2 思考題

在Java GC優化中,我們把本地緩存對象從Java堆內移到了堆外,取得了不錯的性能收益。 還記得上文提到的另一個巨型對象, 模型權重 map 嗎 ?模型權重 map 能否也從 Java 堆內移除?

答案是可以的。我們使用C++改寫了模型推理計算部分,包括權重map的存儲與檢索、排序得分計算等邏輯;然后將C++代碼輸出為 so 庫文件,Java程序通過 native 方式調用,實現將權重map從 Jvm 堆內移出,獲得了很好的性能收益。

圖片

五、結束語

通過上文介紹的 3 個措施,我們從 熱點代碼優化 與 Jvm GC兩方面改善了服務負載與性能,整體吞吐量翻了 1 倍,達到了階段性的預期目標。

不過性能調優是永無止境的,而且每個業務場景、每個系統的實際情況也都是千差萬別,很難用1篇文章去涵蓋介紹所有的優化場景。希望本文介紹的一些調優實戰經驗,比如如何確定優化方向、如何著手分析以及如何驗證收益,能給大家一些借鑒和參考。

責任編輯:未麗燕 來源: vivo互聯網技術
相關推薦

2024-12-04 15:49:29

2013-02-28 13:37:59

系統性能調優技術實戰

2011-02-15 09:31:56

ASP.NET

2012-06-20 11:05:47

性能調優攻略

2011-03-10 14:40:54

LAMPMysql

2017-07-21 08:55:13

TomcatJVM容器

2021-01-27 12:40:09

NginHTTPS前端

2018-05-09 08:35:59

2011-05-20 15:02:01

Oracle性能調優

2020-11-30 11:40:35

NginxLinux性能調優

2011-11-14 10:28:23

2023-08-25 09:36:43

Java編程

2011-09-09 15:49:19

AIX操作系統JAVA

2021-03-04 08:39:21

SparkRDD調優

2017-05-25 10:50:16

Python高性能服務

2020-01-14 09:13:48

Tomcat調優配置

2019-03-01 11:03:22

Lustre高性能計算

2014-12-01 11:30:06

PostgreSQL

2010-01-19 08:50:30

Web2.0網站性能調

2013-03-20 17:18:07

Linux系統性能調優
點贊
收藏

51CTO技術棧公眾號

国产欧美视频一区二区| 午夜亚洲精品| 亚洲国产精品视频在线观看| 国产h视频在线播放| 久久手机免费观看| 美女视频黄a大片欧美| 精品自在线视频| 黄色在线观看av| 国产精品麻豆| 日韩欧美成人免费视频| 男女h黄动漫啪啪无遮挡软件| 亚洲国产精品久久久久久久| 久久一日本道色综合久久| 美女av一区二区三区| 实拍女处破www免费看| 精品视频国内| 在线观看一区不卡| 国产日韩欧美精品在线观看| 在线观看麻豆蜜桃| 国产又黄又爽视频| 视频二区欧美毛片免费观看| 色欧美乱欧美15图片| 人妻激情另类乱人伦人妻| 番号集在线观看| 波多野结衣亚洲一区| 成人黄在线观看| 中文字幕在线播| 亚洲国产黄色| 欧美激情喷水视频| 成人三级视频在线观看| 九九在线高清精品视频| 亚洲福利在线看| 一个人看的视频www| 欧美成人福利| 欧美色综合影院| 黑人糟蹋人妻hd中文字幕| 波多野结衣中文在线| 亚洲美女偷拍久久| 一级全黄肉体裸体全过程| av中文字幕在线| 国产蜜臀av在线一区二区三区| 成人免费的视频| 欧美美最猛性xxxxxx| 国产男女猛烈无遮挡在线喷水| 欧美手机在线| 这里只有视频精品| 99久久99久久精品免费| 少妇精品久久久一区二区三区| 亚洲精品大尺度| 黄色录像a级片| 任你躁在线精品免费| 亚洲国产成人久久| 粉嫩av懂色av蜜臀av分享| 国内精品免费| 日韩电影中文字幕在线| 亚洲调教欧美在线| 日韩av系列| 国产亚洲精品久久| 男人的午夜天堂| 亚洲精品一区二区妖精| 久久综合色88| 国产亚洲精品码| 亚洲大胆视频| 日av在线播放中文不卡| 人人草在线观看| 捆绑调教一区二区三区| 91天堂在线视频| 欧美一级淫片aaaaaa| 成人av一区二区三区| 欧美午夜视频在线| 午夜视频在线观看网站| 亚洲精品欧美二区三区中文字幕| aaa免费在线观看| 超碰在线最新网址| 色狠狠色噜噜噜综合网| 亚洲最大成人在线观看| 久久九九精品视频| 亚洲福利在线观看| 亚洲午夜久久久久久久国产| 国产韩日影视精品| 欧美激情国内偷拍| 日韩电影在线观看一区二区| 久久国产欧美日韩精品| 亚洲中国色老太| 无码h黄肉3d动漫在线观看| 国产视频在线观看一区二区三区| 亚洲激情图片| cao在线视频| 欧美日韩在线播放一区| 男人的天堂免费| 国产欧美一区二区精品久久久| 中文字幕亚洲激情| 日韩精品久久久久久久| 久久精品国产**网站演员| 国产精品美女黄网| a黄色在线观看| 亚洲成va人在线观看| 婷婷免费在线观看| 欧美日韩一本| 久久亚洲影音av资源网| 台湾佬中文在线| 国产精品69久久久久水密桃| 欧美伦理一区二区| 污污视频在线看| 在线亚洲+欧美+日本专区| 日本人dh亚洲人ⅹxx| 欧美日韩一区二区三区视频播放| 精品中文字幕在线观看| 欧美一级做a爰片免费视频| 成人妖精视频yjsp地址| 亚洲日本一区二区三区在线不卡| 国产在线美女| 日韩视频一区二区三区在线播放| 我不卡一区二区| 日韩视频中文| 国产福利91精品一区二区三区| 国产精品免费在线免费| 天天干天天色天天| 尤物视频一区二区| 手机在线成人免费视频| 色先锋久久影院av| 欧美激情精品久久久久久久变态| 探花国产精品一区二区| gogo大胆日本视频一区| 91国在线高清视频| 亚洲高清影院| 日韩资源在线观看| 色婷婷久久综合中文久久蜜桃av| 99久久精品99国产精品 | 国产日产精品_国产精品毛片| 欧美国产中文字幕| 亚洲av少妇一区二区在线观看| 国产精品嫩草影院av蜜臀| aaa毛片在线观看| 欧美韩一区二区| 97精品免费视频| 四虎永久在线观看| 亚洲福利视频导航| 无码人妻一区二区三区免费n鬼沢| 久久国产亚洲| 国产精品一区二区三区成人| av中文字幕在线| 欧美日韩一级片网站| 亚洲精品国产熟女久久久| 蜜桃av综合| 日本视频一区二区不卡| 欧美日韩美女| 一区二区三区高清国产| 一级特黄免费视频| 欧美经典三级视频一区二区三区| 丁香婷婷激情网| 日韩精品2区| 成人av在线天堂| 国产淫片在线观看| 日韩精品一区二区在线| 91精品国产乱码在线观看| av综合在线播放| 亚洲爆乳无码专区| 精品日本12videosex| 国产精品一区专区欧美日韩| 91网在线播放| 欧美一区二区网站| 国产在线视频第一页| 99久久久国产精品| 黄在线观看网站| 日韩一区自拍| 成人av播放| 波多视频一区| 在线性视频日韩欧美| 国产免费的av| 亚洲成人7777| 91资源在线播放| 狠狠狠色丁香婷婷综合激情 | 日韩免费看网站| 日本网站在线播放| 欧美激情在线观看视频免费| 手机在线观看日韩av| 尤物在线精品| 三区精品视频观看| 亚洲精品18| 人九九综合九九宗合| 黄色在线视频网站| 亚洲激情视频网站| 亚洲熟妇av乱码在线观看| 一区二区久久久久| av网站免费在线看| 国产精品一区专区| 99蜜桃臀久久久欧美精品网站| 久久精品99久久无色码中文字幕| 91久久偷偷做嫩草影院| 亚洲日本天堂| 欧美成人四级hd版| 国产高清免费在线播放| 日韩欧美亚洲国产另类| 91丝袜一区二区三区| 亚洲精品综合在线| 女女互磨互喷水高潮les呻吟| 精品在线观看视频| 日本精品一区在线观看| 一区二区中文| 亚洲精品中文综合第一页| 激情小说亚洲图片| 国产热re99久久6国产精品| 黄视频免费在线看| 日韩天堂在线视频| 欧美日韩国产亚洲沙发| 日韩美女视频在线| 一区二区 亚洲| 疯狂做受xxxx欧美肥白少妇| 久久久久久久久毛片| 国产亲近乱来精品视频 | 欧美高清一级片在线观看| 69xxx免费视频| 国产一区在线精品| 日本激情综合网| 午夜在线精品偷拍| 国产天堂视频在线观看| 亚洲天天影视网| 日本一区二区在线视频| 欧美亚洲色图校园春色| 99伊人久久| 国产日本亚洲| 国产免费成人av| 99久久亚洲国产日韩美女| 日本成人黄色片| 日本不卡免费高清视频在线| 欧美激情免费看| 黄网av在线| 欧美肥臀大乳一区二区免费视频| 国产高清一区二区三区视频| 中文字幕亚洲二区| 亚洲乱亚洲乱妇| 色老头一区二区三区| jyzzz在线观看视频| 国产午夜精品视频| xxxxx日韩| 一区国产精品视频| 成年人在线观看| 中文字幕在线国产精品| av在线中文| 中文字幕在线精品| 免费a在线看| 蜜月aⅴ免费一区二区三区| 最新黄网在线观看| 欧美成人三级视频网站| 欧美aaaxxxx做受视频| 久久免费精品日本久久中文字幕| 日本片在线看| 久久露脸国产精品| 亚洲人成在线网站| 日韩av电影中文字幕| 亚洲mmav| 成人福利在线视频| 国产午夜亚洲精品一级在线| 亚洲一区二区免费| 国产一级成人av| 欧美亚洲免费高清在线观看 | 国产一区二区三区精品在线观看| 成人免费淫片aa视频免费| 国产一区二区视频在线看| 5g国产欧美日韩视频| 成人春色在线观看免费网站| 久久精品国产精品国产精品污| 亚洲国产合集| 亚洲欧美国产精品桃花| 欧美激情性爽国产精品17p| 日本中文字幕在线视频观看| 亚洲综合丁香| av网站在线不卡| 国产久卡久卡久卡久卡视频精品| 黄色激情在线观看| 国产婷婷色一区二区三区| 性色国产成人久久久精品| 亚洲自拍偷拍图区| 日韩不卡在线播放| 91精品欧美综合在线观看最新| 狠狠躁日日躁夜夜躁av| 一区二区三区亚洲| 自拍亚洲图区| 欧美一级成年大片在线观看| 色噜噜成人av在线| 国产一区在线免费| 人人狠狠综合久久亚洲婷| 成人一级生活片| 日韩va欧美va亚洲va久久| 亚欧精品在线视频| 久久―日本道色综合久久| 紧身裙女教师波多野结衣| 狠狠色噜噜狠狠狠狠97| 91久久久久久久久久久久| 欧美精品一区二区三区蜜桃| 最新真实国产在线视频| 国内成人精品一区| 日韩在线你懂得| 久99久在线| 亚洲精品成人| 国产性生交xxxxx免费| 成人免费福利片| 亚洲视频重口味| 日韩欧美国产高清91| 精品久久久免费视频| 中文字幕日韩有码| 黄色激情在线播放| 亚洲在线一区二区| 清纯唯美日韩| 欧美视频第一区| 成人综合婷婷国产精品久久免费| 男女男精品视频网站| 欧美日韩在线免费观看| www.香蕉视频| 精品国产拍在线观看| 春暖花开亚洲一区二区三区| 国产精选一区二区| 欧美三级不卡| 一级片黄色免费| 国产精品成人一区二区三区夜夜夜 | 欧美影院在线播放| 中文字幕亚洲在线观看 | 久久久久亚洲av无码a片| 亚洲福利一二三区| 亚洲精品国产av| 久久影视电视剧免费网站| 精品肉辣文txt下载| 热re99久久精品国产99热| 在线综合亚洲| 91精品啪在线观看国产| 亚洲欧美成aⅴ人在线观看| 一级特黄免费视频| 国产午夜一区二区| 深夜成人影院| 欧美精品尤物在线| 蜜桃伊人久久| 亚洲一区二区自偷自拍| 色婷婷久久综合| 男生女生差差差的视频在线观看| 2019中文字幕在线| 日韩欧美天堂| 中国丰满人妻videoshd| 91在线精品一区二区三区| 免费日韩一级片| 精品亚洲永久免费精品| 一本大道色婷婷在线| 蜜桃久久精品乱码一区二区| 国产欧美日韩一级| 亚洲精品理论片| 欧美性猛交xxxx偷拍洗澡| 黄色av免费在线看| 国产精品video| 91欧美在线| 国产精品999.| 亚洲在线观看免费| 天天操天天干天天干| 8090成年在线看片午夜| 群体交乱之放荡娇妻一区二区| 男人操女人逼免费视频| www国产成人免费观看视频 深夜成人网| 国产精品999在线观看| 日韩经典一区二区三区| 电影亚洲一区| 在线观看免费黄色片| 成人午夜免费视频| www.中文字幕在线观看| 国产午夜精品免费一区二区三区| 看片一区二区| 99久久久精品视频| 91蝌蚪porny九色| 日本三级一区二区三区| 麻豆国产精品va在线观看不卡| 91精品国产自产精品男人的天堂| 奇米影视亚洲色图| 国产色爱av资源综合区| 一道本无吗一区| 97精品一区二区三区| 国产欧美日韩在线观看视频| 久国产精品视频| 午夜伊人狠狠久久| 黄色国产在线| 91原创国产| 噜噜噜在线观看免费视频日韩| 蜜桃av.com| 亚洲精品久久视频| 成人不卡视频| 国产素人在线观看| 中文字幕av不卡| 免费国产精品视频| 国产精品日韩电影| 伊人久久综合| 国产欧美小视频| 亚洲国产日韩欧美在线99| 成人精品一区二区三区电影| 成人精品视频在线播放| 中文字幕av资源一区| 少妇一区二区三区四区| 国产精品永久免费| 一二三区精品| 唐朝av高清盛宴| 色综合影院在线| 色天下一区二区三区| 亚洲av无码久久精品色欲| 欧美性一二三区|