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

如何實現 Java 服務性能優化,提升 QPS

開發 后端
前段時間我們的服務遇到了性能瓶頸,由于前期需求太急沒有注意這方面的優化,到了要還技術債的時候就非常痛苦了。

[[435677]]

背景

前段時間我們的服務遇到了性能瓶頸,由于前期需求太急沒有注意這方面的優化,到了要還技術債的時候就非常痛苦了。

在很低的 QPS 壓力下服務器 load 就能達到 10-20,CPU 使用率 60% 以上,而且在每次流量峰值時接口都會大量報錯,雖然使用了服務熔斷框架 Hystrix,但熔斷后服務卻遲遲不能恢復。每次變更上線更是提心吊膽,擔心會成為壓死駱駝的最后一根稻草,導致服務雪崩。

在需求終于緩下來后,leader 給我們定下目標,限我們在兩周內把服務性能問題徹底解決。近兩周的排查和梳理中,發現并解決了多個性能瓶頸,修改了系統熔斷方案,最終實現了服務能處理的 QPS 翻倍,能實現在極高 QPS(3-4倍)壓力下服務正常熔斷,且能在壓力降低后迅速恢復正常,以下是部分問題的排查和解決過程。

服務器高CPU、高負載

首先要解決的問題就是服務導致服務器整體負載高、CPU 高的問題。

我們的服務整體可以歸納為從某個存儲或遠程調用獲取到一批數據,然后就對這批數據進行各種花式變換,最后返回。由于數據變換的流程長、操作多,系統 CPU 高一些會正常,但平常情況下就 CPU us 50% 以上,還是有些夸張了。

我們都知道,可以使用 top 命令在服務器上查詢系統內各個進程的 CPU 和內存占用情況。可是 JVM 是 Java 應用的領地,想查看 JVM 里各個線程的資源占用情況該用什么工具呢?

jmc 是可以的,但使用它比較麻煩,要進行一系列設置。我們還有另一種選擇,就是使用 jtop,jtop 只是一個 jar 包,它的項目地址在 yujikiriki/jtop, 我們可以很方便地把它復制到服務器上,獲取到 java 應用的 pid 后,使用 java -jar jtop.jar [options] 即可輸出 JVM 內部統計信息。

jtop 會使用默認參數 -stack n打印出最耗 CPU 的 5 種線程棧。

形如: 

  1. Heap Memory: INIT=134217728  USED=230791968  COMMITED=450363392  MAX=1908932608  
  2. NonHeap Memory: INIT=2555904  USED=24834632  COMMITED=26411008  MAX=-1  
  3. GC PS Scavenge  VALID  [PS Eden Space, PS Survivor Space]  GC=161  GCT=440  
  4. GC PS MarkSweep  VALID  [PS Eden Space, PS Survivor Space, PS Old Gen]  GC=2  GCT=532  
  5. ClassLoading LOADED=3118  TOTAL_LOADED=3118  UNLOADED=0  
  6. Total threads: 608  CPU=2454 (106.88%)  USER=2142 (93.30%)  
  7. NEW=0  RUNNABLE=6  BLOCKED=0  WAITING=2  TIMED_WAITING=600  TERMINATED=0  
  8. main  TID=1  STATE=RUNNABLE  CPU_TIME=2039 (88.79%)  USER_TIME=1970 (85.79%) Allocted: 640318696  
  9.     com.google.common.util.concurrent.RateLimiter.tryAcquire(RateLimiter.java:337)  
  10.     io.zhenbianshu.TestFuturePool.main(TestFuturePool.java:23)  
  11. RMI TCP Connection(2)-127.0.0.1  TID=2555  STATE=RUNNABLE  CPU_TIME=89 (3.89%)  USER_TIME=85 (3.70%) Allocted: 7943616  
  12.     sun.management.ThreadImpl.dumpThreads0(Native Method)  
  13.     sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:454)  
  14.     me.hatter.tools.jtop.rmi.RmiServer.listThreadInfos(RmiServer.java:59)  
  15.     me.hatter.tools.jtop.management.JTopImpl.listThreadInfos(JTopImpl.java:48)  
  16.     sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  17.     ... ... 

通過觀察線程棧,我們可以找到要優化的代碼點。

在我們的代碼里,發現了很多 json 序列化和反序列化和 Bean 復制耗 CPU 的點,之后通過代碼優化,通過提升 Bean 的復用率,使用 PB 替代 json 等方式,大大降低了 CPU 壓力。

熔斷框架優化

服務熔斷框架上,我們選用了 Hystrix,雖然它已經宣布不再維護,更推薦使用 resilience4j 和阿里開源的 sentinel,但由于部門內技術棧是 Hystrix,而且它也沒有明顯的短板,就接著用下去了。

先介紹一下基本情況,我們在控制器接口最外層和內層 RPC 調用處添加了 Hystrix 注解,隔離方式都是線程池模式,接口處超時時間設置為 1000ms,最大線程數是 2000,內部 RPC 調用的超時時間設置為 200ms,最大線程數是 500。

響應時間不正常

要解決的第一個問題是接口的響應時間不正常。在觀察接口的 access 日志時,可以發現接口有耗時為 1200ms 的請求,有些甚至達到了 2000ms 以上。由于線程池模式下,Hystrix 會使用一個異步線程去執行真正的業務邏輯,而主線程則一直在等待,一旦等待超時,主線程是可以立刻返回的。所以接口耗時超過超時時間,問題很可能發生在 Hystrix 框架層、Spring 框架層或系統層。

這時候可以對運行時線程棧來分析,我使用 jstack 打印出線程棧,并將多次打印的結果制作成火焰圖(參見 應用調試工具-火焰圖)來觀察。

如上圖,可以看到很多線程都停在 LockSupport.park(LockSupport.java:175) 處,這些線程都被鎖住了,向下看來源發現是 HystrixTimer.addTimerListener(HystrixTimer.java:106), 再向下就是我們的業務代碼了。

Hystrix 注釋里解釋這些 TimerListener 是 HystrixCommand 用來處理異步線程超時的,它們會在調用超時時執行,將超時結果返回。而在調用量大時,設置這些 TimerListener 就會因為鎖而阻塞,進而導致接口設置的超時時間不生效。

接著排查調用量為什么 TimerListener 特別多。

由于服務在多個地方依賴同一個 RPC 返回值,平均一次接口響應會獲取同樣的值 3-5 次,所以接口內對這個 RPC 的返回值添加了 LocalCache。排查代碼發現 HystrixCommand 被添加在了 LocalCache 的 get 方法上,所以單機 QPS 1000 時,會通過 Hystrix 調用方法 3000-5000 次,進而產生大量的 Hystrix TimerListener。

代碼類似于:   

  1. @HystrixCommand(  
  2.            fallbackMethod = "fallBackGetXXXConfig" 
  3.            commandProperties = {  
  4.                    @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds"value = "200"),  
  5.                    @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage"value = "50")},  
  6.            threadPoolProperties = {  
  7.                    @HystrixProperty(name = "coreSize"value = "200"),  
  8.                    @HystrixProperty(name = "maximumSize"value = "500"),  
  9.                    @HystrixProperty(name = "allowMaximumSizeToDivergeFromCoreSize"value = "true")})  
  10.    public XXXConfig getXXXConfig(Long uid) {  
  11.        try {  
  12.            return XXXConfigCache.get(uid);  
  13.        } catch (Exception e) {  
  14.            return EMPTY_XXX_CONFIG;  
  15.        }  
  16.    } 

修改代碼,將 HystrixCommand 修改到 localCache 的 load 方法上來解決這個問題。此外為了進一步降低 Hystrix 框架對性能的影響,將 Hystrix 的隔離策略改為了信號量模式,之后接口的最大耗時就穩定了。而且由于方法都在主線程執行,少了 Hystrix 線程池維護和主線程與 Hystrix 線程的上下文切換,系統 CPU 使用率又有進一步下降。

但使用信號量隔離模式也要注意一個問題:信號量只能限制方法是否能夠進入執行,在方法返回后再判斷接口是否超時并對超時進行處理,而無法干預已經在執行的方法,這可能會導致有請求超時時,一直占用一個信號量,但框架卻無法處理。

服務隔離和降級

另一個問題是服務不能按照預期的方式進行服務降級和熔斷,我們認為流量在非常大的情況下應該會持續熔斷時,而 Hystrix 卻表現為偶爾熔斷。

最開始調試 Hystrix 熔斷參數時,我們采用日志觀察法,由于日志被設置成異步,看不到實時日志,而且有大量的報錯信息干擾,過程低效而不準確。后來引入 Hystrix 的可視化界面后,才提升了調試效率。

Hystrix 可視化模式分為服務端和客戶端,服務端是我們要觀察的服務,需要在服務內引入 hystrix-metrics-event-stream 包并添加一個接口來輸出 Metrics 信息,再啟動 hystrix-dashboard 客戶端并填入服務端地址即可。

通過類似上圖的可視化界面,Hystrix 的整體狀態就展示得非常清楚了。

由于上文中的優化,接口的最大響應時間已經完全可控,可以通過嚴格限制接口方法的并發量來修改接口的熔斷策略了。假設我們能容忍的最大接口平均響應時間為 50ms,而服務能接受的最大 QPS 為 2000,那么可以通過 2000*50/1000=100 得到適合的信號量限制,如果被拒絕的錯誤數過多,可以再添加一些冗余。

這樣,在流量突變時,就可以通過拒絕一部分請求來控制接口接受的總請求數,而在這些總請求里,又嚴格限制了最大耗時,如果錯誤數過多,還可以通過熔斷來進行降級,多種策略同時進行,就能保證接口的平均響應時長了。

熔斷時高負載導致無法恢復

接下來就要解決接口熔斷時,服務負載持續升高,但在 QPS 壓力降低后服務遲遲無法恢復的問題。

在服務器負載特別高時,使用各種工具來觀測服務內部狀態,結果都是不靠譜的,因為觀測一般都采用打點收集的方式,在觀察服務的同時已經改變了服務。例如使用 jtop 在高負載時查看占用 CPU 最高的線程時,獲取到的結果總是 JVM TI 相關的棧。

不過,觀察服務外部可以發現,這個時候會有大量的錯誤日志輸出,往往在服務已經穩定好久了,還有之前的錯誤日志在打印,延時的單位甚至以分鐘計。大量的錯誤日志不僅造成 I/O 壓力,而且線程棧的獲取、日志內存的分配都會增加服務器壓力。而且服務早因為日志量大改為了異步日志,這使得通過 I/O 阻塞線程的屏障也消失了。

之后修改服務內的日志記錄點,在打印日志時不再打印異常棧,再重寫 Spring 框架的 ExceptionHandler,徹底減少日志量的輸出。結果符合預期,在錯誤量極大時,日志輸出也被控制在正常范圍,這樣熔斷后,就不會再因為日志給服務增加壓力,一旦 QPS 壓力下降,熔斷開關被關閉,服務很快就能恢復正常狀態。

Spring 數據綁定異常

另外,在查看 jstack 輸出的線程棧時,還偶然發現了一種奇怪的棧。 

  1. at java.lang.Throwable.fillInStackTrace(Native Method)  
  2. at java.lang.Throwable.fillInStackTrace(Throwable.java:783)  
  3.   - locked <0x00000006a697a0b8> (a org.springframework.beans.NotWritablePropertyException) 
  4.   ...  
  5. org.springframework.beans.AbstractNestablePropertyAccessor.processLocalProperty(AbstractNestablePropertyAccessor.java:426)  
  6. at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:278)  
  7.   ...  
  8. at org.springframework.validation.DataBinder.doBind(DataBinder.java:735)  
  9. at org.springframework.web.bind.WebDataBinder.doBind(WebDataBinder.java:197)  
  10. at org.springframework.web.bind.ServletRequestDataBinder.bind(ServletRequestDataBinder.java:107)  
  11. at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:161)  
  12.  ...  
  13. at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991) 

jstack 的一次輸出中,可以看到多個線程的棧頂都停留在 Spring 的異常處理,但這時候也沒有日志輸出,業務也沒有異常,跟進代碼看了一下,Spring 竟然偷偷捕獲了異常且不做任何處理。 

  1. List<PropertyAccessException> propertyAccessExceptions = null 
  2. List<PropertyValue> propertyValues = (pvs instanceof MutablePropertyValues ?  
  3.     ((MutablePropertyValues) pvs).getPropertyValueList() : Arrays.asList(pvs.getPropertyValues()));  
  4. for (PropertyValue pv : propertyValues) {  
  5.   try {  
  6.     // This method may throw any BeansException, which won't be caught  
  7.     // here, if there is a critical failure such as no matching field.  
  8.     // We can attempt to deal only with less serious exceptions.  
  9.     setPropertyValue(pv);  
  10.   }  
  11.   catch (NotWritablePropertyException ex) {  
  12.     if (!ignoreUnknown) {  
  13.       throw ex;  
  14.     }  
  15.     // Otherwise, just ignore it and continue...  
  16.   }  
  17.   ... ...  

結合代碼上下文再看,原來 Spring 在處理我們的控制器數據綁定,要處理的數據是我們的一個參數類 ApiContext。

控制器代碼類似于: 

  1. @RequestMapping("test.json")  
  2.  public Map testApi(@RequestParam(name = "id") String id, ApiContext apiContext) {} 

按照正常的套路,我們應該為這個 ApiContext 類添加一個參數解析器(HandlerMethodArgumentResolver),這樣 Spring 會在解析這個參數時會調用這個參數解析器為方法生成一個對應類型的參數。可是如果沒有這么一個參數解析器,Spring 會怎么處理呢?

答案就是會使用上面的那段”奇怪”代碼,先創建一個空的 ApiContext 類,并將所有的傳入參數依次嘗試 set 進這個類,如果 set 失敗了,就 catch 住異常繼續執行,而 set 成功后,就完成了 ApiContext 類內一個屬性的參數綁定。

而不幸的是,我們的接口上層會為我們統一傳過來三四十個參數,所以每次都會進行大量的”嘗試綁定”,造成的異常和異常處理就會導致大量的性能損失,在使用參數解析器解決這個問題后,接口性能竟然有近十分之一的提升。

小結

性能優化不是一朝一夕的事,把技術債都堆到最后一塊解決絕不是什么好的選擇。平時多注意一些代碼寫法,在使用黑科技時注意一下其實現有沒有什么隱藏的坑才是正解,還可以進行定期的性能測試,及時發現并解決代碼里近期引入的不安定因素。 

 

責任編輯:龐桂玉 來源: JAVA高級架構
相關推薦

2012-12-24 09:55:15

JavaJava WebJava優化

2017-09-26 14:56:57

MongoDBLBS服務性能

2023-03-08 18:43:50

GPU模型隔離

2011-07-19 10:46:49

Windows 7優化

2010-01-08 09:43:23

SQL Server分Analysis Se

2021-05-19 08:04:11

ASP.Net服務性原則

2022-05-31 10:51:12

架構技術優化

2022-11-10 08:16:19

java性能服務性能

2021-06-30 10:16:54

微服務架構測試

2018-11-14 10:48:52

蘇寧管理系統服務性能

2009-11-05 10:45:58

WCF服務

2025-09-08 11:20:00

2024-08-01 08:06:11

虛擬線程性能

2013-04-09 15:44:12

智能網絡云服務網絡性能

2013-04-10 09:26:59

智能網絡云服務

2024-11-25 09:11:43

2021-07-06 12:07:27

Go 服務性能

2012-04-26 14:08:52

2009-11-06 17:10:34

WCF服務性能計數器

2022-09-26 09:19:38

服務器優化
點贊
收藏

51CTO技術棧公眾號

欧美二区三区91| 久久蜜桃一区二区| 国模极品一区二区三区| 亚洲啪av永久无码精品放毛片 | 欧美激情视频三区| 亚洲av片不卡无码久久| 国产黄色一区| 午夜精品爽啪视频| 亚洲国产欧美日韩| 欧美一级性视频| 日韩福利视频导航| 欧美激情在线观看| 国产亚洲精品精品精品| 超碰精品在线观看| 欧美久久久久久久久| 中国丰满人妻videoshd| 羞羞的网站在线观看| 久久久久久免费网| 国产精品久久波多野结衣| 最近中文字幕免费在线观看| 亚洲久久一区二区| 久久久久999| 亚洲色成人网站www永久四虎| heyzo欧美激情| 欧美精品一二三| 91视频最新入口| 久久99亚洲网美利坚合众国| 国产精品久久久久久久岛一牛影视| 国产乱码精品一区二区三区不卡| 国产一区二区三区三州| 日韩精品每日更新| 国模精品一区二区三区色天香| 992在线观看| 女优一区二区三区| 日韩黄在线观看| 国产人妖在线观看| 清纯唯美激情亚洲| 欧美精品久久久久久久多人混战 | 啊啊啊久久久| 一区二区三区在线免费视频| 一级日韩一区在线观看| 国产无套粉嫩白浆在线2022年| 波多野结衣视频一区| 99久热re在线精品996热视频 | 中文字幕资源网在线观看免费 | 久操视频在线免费观看| 亚洲欧美bt| 青青草精品毛片| 中文字幕精品三级久久久| 伊人久久综合| 久久久久久久久爱| 日本午夜精品理论片a级app发布| 国产一在线精品一区在线观看| 欧美成人性生活| 美国黄色小视频| 欧美日本一区二区视频在线观看| 美女精品久久久| 校园春色 亚洲| 狠狠88综合久久久久综合网| 九色精品美女在线| 国产在线免费视频| 亚洲网站视频| 欧美在线视频免费播放| 无码视频一区二区三区| 日韩精品一二三区| 国产精品专区h在线观看| 最新中文字幕第一页| 麻豆极品一区二区三区| 国产欧美一区二区| 99久久精品国产色欲| 国产一区二区在线观看免费| 99热最新在线| 亚洲欧美一区二区三| 久久久夜色精品亚洲| 婷婷四月色综合| 黄色精品免费看| 亚洲国产一区视频| 欧美日韩国产精品激情在线播放| 亚洲午夜天堂| 6080午夜不卡| 无码人妻精品一区二区三区99不卡| 老汉色老汉首页av亚洲| 亚洲最新av网址| 国产三级国产精品国产国在线观看| 欧美午夜一区二区福利视频| 欧美在线xxx| 精品国产青草久久久久96| 国内成+人亚洲+欧美+综合在线| 51国偷自产一区二区三区| 天天摸天天干天天操| 日本一区二区三区在线观看| 欧美一区二区三区综合| 小视频免费在线观看| 欧美精品丝袜中出| 亚洲国产精品无码久久久久高潮| 欧美三级伦理在线| 欧美精品videos| 一区二区乱子伦在线播放| 国产精品一区在线观看乱码| 久久国产欧美精品| 巨大荫蒂视频欧美大片| 午夜亚洲福利老司机| 中文字幕有码av| 全球av集中精品导航福利| 日韩在线观看你懂的| 日韩免费一级片| 精品一区二区在线观看| 久久久久久久久久码影片| 久操视频在线观看| 色视频成人在线观看免| 中文字幕乱码在线人视频| 国产不卡av一区二区| 欧美黑人性视频| 国产一区二区三区四区视频| 99re这里只有精品6| 中文字幕一区二区三区四区五区六区 | 女人抽搐喷水高潮国产精品| 久久天堂av综合合色| 天码人妻一区二区三区在线看| 久久99精品国产.久久久久| 麻豆一区区三区四区产品精品蜜桃| 超鹏97在线| 欧美亚洲一区二区三区四区| 亚洲欧美日本一区| 你懂的国产精品| 成人看片人aa| 亚洲乱亚洲乱妇| 色婷婷综合在线| avtt香蕉久久| 极品av少妇一区二区| 3d动漫啪啪精品一区二区免费 | 国产不卡av在线免费观看| 亚洲精品一区二区三区区别| 最近日韩中文字幕| mm131国产精品| 国产欧美一区| 日本久久91av| 天天操天天爱天天干| 亚洲国产精品久久不卡毛片| 26uuu国产| 欧美日韩中文| www.一区二区三区| 在线观看电影av| 欧美一区二区大片| 国产三级国产精品国产国在线观看| 麻豆精品国产91久久久久久| 一区不卡视频| 国产欧美视频在线| 九九热精品在线| 亚洲第一大网站| 亚洲一区中文在线| 国产十八熟妇av成人一区| 亚洲午夜久久久久久尤物 | 丰满熟妇乱又伦| 亚洲综合另类小说| 国产a√精品区二区三区四区| 欧美激情1区2区3区| 成人激情直播| 成人免费图片免费观看| 亚洲国产高潮在线观看| 色婷婷在线观看视频| 26uuu久久天堂性欧美| 91黄色小网站| 青青草国产免费一区二区下载| 国产精品日韩精品| av香蕉成人| 精品国产一二三| 影音先锋亚洲天堂| 久久久精品欧美丰满| 高清一区在线观看| 亚洲九九在线| 精品国产免费久久久久久尖叫| 日韩精品极品| 最近中文字幕日韩精品| 国产成人精品一区二三区四区五区 | 国产ktv在线视频| 亚洲日韩中文字幕| 91亚洲国产成人精品一区| 一区二区三区不卡视频| 亚洲一区二区乱码| 精品一区二区三区在线播放视频| 日韩欧美一级在线| 伊人久久大香线蕉无限次| 国产精品日韩专区| 欧美wwww| 一本色道久久88综合日韩精品| 97超碰人人模人人人爽人人爱| 亚洲 欧美综合在线网络| 在线免费看黄视频| 国产精品一二三在| 久热免费在线观看| 一区二区在线| 日韩精品最新在线观看| 日韩成人精品| 国产精品扒开腿做爽爽爽视频| 老司机午夜在线| 日韩精品极品视频| 国产ts人妖调教重口男| 欧美午夜久久久| 青娱乐av在线| 国产午夜精品美女毛片视频| 欧美熟妇另类久久久久久多毛| 免费在线日韩av| av动漫在线播放| 成人久久一区| 精品国产一区二区三区麻豆免费观看完整版| 日韩a**中文字幕| 欧美激情精品久久久久久| 亚洲麻豆精品| 亚洲天堂av在线免费| 国精产品乱码一区一区三区四区| 在线观看不卡一区| 国产做受高潮漫动| 亚洲精品日日夜夜| 又色又爽的视频| 久久久精品日韩欧美| 久久久久久婷婷| 国产经典欧美精品| 亚洲精品mv在线观看| 日韩制服丝袜先锋影音| 欧美久久久久久久久久久久久| 66视频精品| 亚洲精品在线视频观看| 日韩欧美黄色| 国产在线精品一区二区三区》| 日本在线视频一区二区三区| 91精品视频在线免费观看| 国产亚洲一区二区手机在线观看| 欧美亚洲视频一区二区| 电影k8一区二区三区久久 | 亚洲精品国产免费| 亚洲精品久久久久久久久久 | 91老司机精品视频| yiren22亚洲综合| 国产精品色婷婷视频| 欧美日韩不卡| 国产成人jvid在线播放| 日本不卡网站| 欧美在线xxx| 中文字幕一区久| 45www国产精品网站| 久草在线中文最新视频| 国内精品久久久久久| 国产高清在线a视频大全| 久久久久久久色| 羞羞的视频在线看| 久久久久久国产| av小说在线播放| 欧美亚洲视频在线看网址| xxxxx性欧美特大| 国产成人97精品免费看片| 成人欧美magnet| 国产精品91视频| 日韩三区四区| 成人欧美在线视频| 视频亚洲一区二区| 国产精品av一区| 女同一区二区三区| 日本一区美女| 国产精品不卡| 麻豆一区二区三区在线观看| 国精品一区二区三区| 国产伦精品一区二区三区四区视频_| 亚洲精品麻豆| 又粗又黑又大的吊av| 奇米亚洲午夜久久精品| 999这里有精品| 国产成人一区在线| 午夜男人的天堂| 国产日韩欧美高清在线| 卡通动漫亚洲综合| 亚洲午夜久久久| 一级片视频在线观看| 欧美性感一类影片在线播放| 一级黄色大片免费观看| 欧美成人精品二区三区99精品| 天天干天天摸天天操| 国产一区二区久久精品| 成人黄色网址| 欧美亚洲在线视频| 亚洲福利影视| 国内精品久久国产| 爽成人777777婷婷| 欧美中文字幕在线观看视频| 日韩精品视频网站| 深夜视频在线观看| 久久蜜臀精品av| 青草影院在线观看| 欧美日韩一区二区三区| 亚洲中文字幕一区二区| 精品日韩成人av| 国产福利电影在线| 久久久久久久av| 91国拍精品国产粉嫩亚洲一区| 91午夜理伦私人影院| 丝袜美腿综合| xxxxxx在线观看| 视频在线观看一区二区三区| aaaaaaaa毛片| 欧美国产日韩a欧美在线观看| 久久精品一级片| 欧美美女网站色| 免费在线国产| 久久久之久亚州精品露出| 成人不卡视频| 蜜桃传媒视频麻豆第一区免费观看| 亚洲蜜桃视频| 91看片在线免费观看| av色综合久久天堂av综合| 在线日韩国产网站| 色欧美日韩亚洲| 少妇无码一区二区三区| 久久精品中文字幕一区| 亚洲日本网址| 久久精品一二三区| 欧美精品国产一区| 做a视频在线观看| 国产欧美一区二区精品性色超碰| 久久久久无码国产精品| 欧美猛男超大videosgay| 三级视频网站在线| 久久免费观看视频| 美女日韩一区| 国产精品夜夜夜爽张柏芝| 蜜桃传媒麻豆第一区在线观看| 波多野结衣 在线| 黄色精品在线看| 免费国产精品视频| 欧美成人午夜激情| 久久三级中文| 国产成人精品免费看在线播放 | 欧美性猛交视频| 日本激情一区二区三区| 久久久久久久久久婷婷| 99久久免费精品国产72精品九九| 国产精品88久久久久久妇女| 久久aⅴ国产欧美74aaa| 国产又粗又长又黄的视频| 欧美色精品天天在线观看视频| 国产福利在线观看| 国产精品午夜视频| 99久久亚洲精品| 日本在线播放一区二区| 国产精品家庭影院| 国产精品久久久久久久久久久久久久久久久久 | 日韩在线观看www| 国产人妖伪娘一区91| 日韩精品午夜| 国产精品999.| 亚洲综合网站在线观看| 丰满少妇高潮在线观看| 97视频在线观看免费高清完整版在线观看| ady日本映画久久精品一区二区| 亚洲理论电影在线观看| 91免费视频网址| 无码人妻精品一区二区三区不卡| 亚洲精选一区二区| h1515四虎成人| 先锋影音男人资源| 成人中文字幕电影| 亚洲国产成人无码av在线| 国产亚洲欧洲黄色| 国产亚洲高清一区| 日韩亚洲欧美视频| 久久色视频免费观看| 中文字幕在线网站| 成人444kkkk在线观看| 欧美电影在线观看完整版| 99福利在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 国产免费叼嘿网站免费| 欧美精品videosex牲欧美| 免费一区二区三区视频导航| 欧美成人乱码一二三四区免费| 一区二区三区四区在线播放 | 国产精品成人久久电影| 久久综合九色欧美综合狠狠| 中文字幕第2页| 欧美黄色性视频| 黄色不卡一区| 久久久久久无码精品人妻一区二区| 欧美日韩国产在线| 香蕉视频免费在线播放| 国产精品日韩欧美一区二区| 日韩激情在线观看| 青娱乐国产盛宴| 国产亚洲人成网站在线观看| 深夜福利一区二区三区| 黄色动漫在线免费看| **欧美大码日韩| 同心难改在线观看| 成人h片在线播放免费网站| 国产精品五区| 日日噜噜夜夜狠狠久久波多野| 精品视频在线播放免| 在线视频成人| 成人在线观看黄| 亚洲午夜电影在线观看| 色网站免费在线观看| 精品综合在线|