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

只改了五行代碼接口吞吐量提升了10倍!

開發(fā) 前端
結(jié)果是好的,過程是曲折的。總的來說還是知識的欠缺,文章看起來還算順暢,但都是事后諸葛亮,不對,應(yīng)該是時候臭皮匠。基本都是邊查資料邊分析邊操作,前后花費了4天時間,嘗試了很多。

公司的一個ToB系統(tǒng),因為客戶使用的也不多,沒啥并發(fā)要求,就一直沒有經(jīng)過壓測。這兩天來了一個“大客戶”,對并發(fā)量提出了要求:核心接口與幾個重點使用場景單節(jié)點吞吐量要滿足最低500/s的要求。

當(dāng)時一想,500/s吞吐量還不簡單。Tomcat按照100個線程,那就是單線程1S內(nèi)處理5個請求,200ms處理一個請求即可。這個沒有問題,平時接口響應(yīng)時間大部分都100ms左右,還不是分分鐘滿足的事情。

然而壓測一開,100 的并發(fā),吞吐量居然只有 50 ...

圖片圖片

而且再一查,100的并發(fā),CPU使用率居然接近 80% ...

從上圖可以看到幾個重要的信息。

最小值:表示我們非并發(fā)場景單次接口響應(yīng)時長。還不足100ms。挺好!

最大值:并發(fā)場景下,由于各種鎖或者其他串行操作,導(dǎo)致部分請求等待時長增加,接口整體響應(yīng)時間變長。5秒鐘。有點過分了!!!

再一看百分位,大部分的請求響應(yīng)時間都在4s。無語了!!!

所以 1s鐘的 吞吐量 單節(jié)點只有 50 。距離 500 差了10倍。難受!!!!

分析過程

定位“慢”原因

這里暫時先忽略 CPU 占用率高的問題

首先平均響應(yīng)時間這么慢,肯定是有阻塞。先確定阻塞位置。重點檢查幾處:

  • 鎖 (同步鎖、分布式鎖、數(shù)據(jù)庫鎖)
  • 耗時操作 (鏈接耗時、SQL耗時)

結(jié)合這些先配置耗時埋點。

  • 接口響應(yīng)時長統(tǒng)計。超過500ms打印告警日志。
  • 接口內(nèi)部遠程調(diào)用耗時統(tǒng)計。200ms打印告警日志。
  • Redis訪問耗時。超過10ms打印告警日志。
  • SQL執(zhí)行耗時。超過100ms打印告警日志。

上述配置生效后,通過日志排查到接口存在慢SQL。具體SQL類似與這種:

<!-- 主要類似與庫存扣減 每次-1 type 只有有限的幾種且該表一共就幾條數(shù)據(jù)(一種一條記錄)-->  
<!-- 壓測時可以認為 type = 1 是寫死的 -->  
update table set field = field - 1 where type = 1 and filed > 1;

上述SQL相當(dāng)于并發(fā)操作同一條數(shù)據(jù),肯定存在鎖等待。日志顯示此處的等待耗時占接口總耗時 80% 以上。

二話不說先改為敬。因為是壓測環(huán)境,直接改為異步執(zhí)行,確認一下效果。

PS:當(dāng)時心里是這么想的:妥了,大功告成。就是這里的問題!絕壁是這個原因!優(yōu)化一下就解決了。當(dāng)然,如果這么簡單就沒有必要寫這篇文章了...

優(yōu)化后的效果:

圖片圖片

嗯...

emm...

好!這個優(yōu)化還是很明顯的,提升提升了近2倍。

此時已經(jīng)感覺到有些不對了,慢SQL已經(jīng)解決了(異步了~ 隨便吧~ 你執(zhí)行 10s我也不管了),雖然對吞吐量的提升沒有預(yù)期的效果。但是數(shù)據(jù)是不會騙人的。

  • 最大值:已經(jīng)從 5s -> 2s
  • 百分位值:4s -> 1s

這已經(jīng)是很大的提升了。

繼續(xù)定位“慢”的原因

通過第一階段的“優(yōu)化”,我們距離目標(biāo)近了很多。廢話不多說,繼續(xù)下一步的排查。

我們繼續(xù)看日志,此時日志出現(xiàn)類似下邊這種情況:

2023-01-0415:17:05:347 INFO **.**.**.***.50 [TID: 1s22s72s8ws9w00] **********************  
2023-01-0415:17:05:348 INFO **.**.**.***.21 [TID: 1s22s72s8ws9w00] **********************  
2023-01-0415:17:05:350 INFO **.**.**.***.47 [TID: 1s22s72s8ws9w00] **********************  

2023-01-0415:17:05:465 INFO **.**.**.***.234 [TID: 1s22s72s8ws9w00] **********************  
2023-01-0415:17:05:467 INFO **.**.**.***.123 [TID: 1s22s72s8ws9w00] **********************  

2023-01-0415:17:05:581 INFO **.**.**.***.451 [TID: 1s22s72s8ws9w00] **********************  

2023-01-0415:17:05:702 INFO **.**.**.***.72 [TID: 1s22s72s8ws9w00] **********************

前三行info日志沒有問題,間隔很小。第4 ~ 第5,第6 ~ 第7,第7 ~ 第8 很明顯有百毫秒的耗時。檢查代碼發(fā)現(xiàn),這部分沒有任何耗時操作。那么這段時間干什么了呢?

  • 發(fā)生了線程切換,換其他線程執(zhí)行其他任務(wù)了。(線程太多了)
  • 日志打印太多了,壓測5分鐘日志量500M。(記得日志打印太多是有很大影響的)
  • STW。(但是日志還在輸出,所以前兩種可能性很高,而且一般不會停頓百毫秒)

按照這三個思路做了以下操作:

首先,提升日志打印級別到DEBUG。emm... 提升不大,好像增加了10左右。

然后,拆線程 @Async 注解使用線程池,控制代碼線程池數(shù)量(之前存在3個線程池,統(tǒng)一配置的核心線程數(shù)為100)結(jié)合業(yè)務(wù),服務(wù)總核心線程數(shù)控制在50以內(nèi),同步增加阻塞最大大小。結(jié)果還可以,提升了50,接近200了。

最后,觀察JVM的GC日志,發(fā)現(xiàn)YGC頻次4/s,沒有FGC。1分鐘內(nèi)GC時間不到1s,很明顯不是GC問題,不過發(fā)現(xiàn)JVM內(nèi)存太小只有512M,直接給了4G。吞吐量沒啥提升,YGC頻次降低為2秒1次。

唉,一頓操作猛如虎。

PS:其實中間還對數(shù)據(jù)庫參數(shù)一通瞎搞,這里不多說了。

其實也不是沒有收獲,至少在減少服務(wù)線程數(shù)量后還是有一定收獲的。

另外,已經(jīng)關(guān)注到了另外一個點:CPU使用率,減少了線程數(shù)量后,CPU的使用率并沒有明顯的下降,這里是很有問題的,當(dāng)時認為CPU的使用率主要與開啟的線程數(shù)量有關(guān),之前線程多,CPU使用率較高可以理解。但是,在砍掉了一大半的線程后,依然居高不下這就很奇怪了。

此時關(guān)注的重點開始從代碼“慢”方向轉(zhuǎn)移到“CPU高”方向。

定位CPU使用率高的原因

CPU的使用率高,通常與線程數(shù)相關(guān)肯定是沒有問題的。當(dāng)時對居高不下的原因考慮可能有以下兩點:

  • 有額外的線程存在。
  • 代碼有部分CPU密集操作。

然后繼續(xù)一頓操作:

  • 觀察服務(wù)活躍線程數(shù)。
  • 觀察有無CPU占用率較高線程。

在觀察過程中發(fā)現(xiàn),沒有明顯CPU占用較高線程。所有線程基本都在10%以內(nèi)。類似于下圖,不過有很多線程。

圖片圖片

沒有很高就證明大家都很正常,只是多而已...

此時沒有下一步的排查思路了。當(dāng)時想著,算了打印一下堆棧看看吧,看看到底干了啥~

在看的過程中發(fā)現(xiàn)這段日志:

"http-nio-6071-exec-9" #82 daemon prio=5 os_prio=0 tid=0x00007fea9aed1000 nid=0x62 runnable [0x00007fe934cf4000]  
   java.lang.Thread.State: RUNNABLE  
 at org.springframework.core.annotation.AnnotationUtils.getValue(AnnotationUtils.java:1058)  
 at org.springframework.aop.aspectj.annotation.AbstractAspectJAdvisorFactory$AspectJAnnotation.resolveExpression(AbstractAspectJAdvisorFactory.java:216)  
 at org.springframework.aop.aspectj.annotation.AbstractAspectJAdvisorFactory$AspectJAnnotation.<init>(AbstractAspectJAdvisorFactory.java:197)  
 at org.springframework.aop.aspectj.annotation.AbstractAspectJAdvisorFactory.findAnnotation(AbstractAspectJAdvisorFactory.java:147)  
 at org.springframework.aop.aspectj.annotation.AbstractAspectJAdvisorFactory.findAspectJAnnotationOnMethod(AbstractAspectJAdvisorFactory.java:135)  
 at org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory.getAdvice(ReflectiveAspectJAdvisorFactory.java:244)  
 at org.springframework.aop.aspectj.annotation.InstantiationModelAwarePointcutAdvisorImpl.instantiateAdvice(InstantiationModelAwarePointcutAdvisorImpl.java:149)  
 at org.springframework.aop.aspectj.annotation.InstantiationModelAwarePointcutAdvisorImpl.<init>(InstantiationModelAwarePointcutAdvisorImpl.java:113)  
 at org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory.getAdvisor(ReflectiveAspectJAdvisorFactory.java:213)  
 at org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory.getAdvisors(ReflectiveAspectJAdvisorFactory.java:144)  
 at org.springframework.aop.aspectj.annotation.BeanFactoryAspectJAdvisorsBuilder.buildAspectJAdvisors(BeanFactoryAspectJAdvisorsBuilder.java:149)  
 at org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator.findCandidateAdvisors(AnnotationAwareAspectJAutoProxyCreator.java:95)  
 at org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator.shouldSkip(AspectJAwareAdvisorAutoProxyCreator.java:101)  
 at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:333)  
 at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:291)  
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:455)  
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1808)  
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)  
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)  
 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:353)  
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)  
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1282)  
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1243)  
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveBean(DefaultListableBeanFactory.java:494)  
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:349)  
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:342)  
 at cn.hutool.extra.spring.SpringUtil.getBean(SpringUtil.java:117)  
        ......    
        ......

上邊的堆棧發(fā)現(xiàn)了一個點:在執(zhí)行getBean的時候,執(zhí)行了createBean方法。我們都知道Spring托管的Bean都是提前實例化好放在IOC容器中的。createBean要做的事情有很多,比如Bean的初始化,依賴注入其他類,而且中間還有一些前后置處理器執(zhí)行、代理檢查等等,總之是一個耗時方法,所以都是在程序啟動時去掃描,加載,完成Bean的初始化。

而我們在運行程序線程堆棧中發(fā)現(xiàn)了這個操作。而且通過檢索發(fā)現(xiàn)竟然有近200處。

通過堆棧信息很快定位到執(zhí)行位置:

<!--BeanUtils 是 hutool 工具類。也是從IOC容器獲取Bean 等價于 @Autowired 注解 -->  
RedisTool redisTool = BeanUtils.getBean(RedisMaster.class);

而RedisMaster類

@Component  
@Scope("prototype")  
public class RedisMaster implements IRedisTool {  
    // ......  
}

沒錯就是用了多例。而且使用的地方是Redis(系統(tǒng)使用Jedis客戶端,Jedis并非線程安全,每次使用都需要新的實例),接口對Redis的使用還是比較頻繁的,一個接口得有10次左右獲取Redis數(shù)據(jù)。也就是說執(zhí)行10次左右的createBean邏輯 ...

嘆氣!!!

趕緊改代碼,直接使用萬能的 new 。

在看結(jié)果之前還有一點需要提一下,由于系統(tǒng)有大量統(tǒng)計耗時的操作。實現(xiàn)方式是通過:

long start = System.currentTimeMillis();  
// ......  
long end = System.currentTimeMillis();  
long runTime = start - end;

或者Hutool提供的StopWatch

這里感謝一下huoger 同學(xué)的評論,當(dāng)時還誤以為該方式能夠降低性能的影響,但是實際上也只是一層封裝。底層使用的是 System.nanoTime()

StopWatch watch = new StopWatch();  
watch.start();  
// ......  
watch.stop();  
System.out.println(watch.getTotalTimeMillis());

而這種在并發(fā)量高的情況下,對性能影響還是比較大的,特別在服務(wù)器使用了一些特定時鐘的情況下。這里就不多說,感興趣的可以自行搜索一下。

最終結(jié)果:

圖片圖片

排查涉及的命令如下:

  • 查詢服務(wù)進程CPU情況:top –Hp pid
  • 查詢JVM GC相關(guān)參數(shù):jstat -gc pid 2000 (對 pid [進程號] 每隔 2s 輸出一次日志)
  • 打印當(dāng)前堆棧信息:jstack -l pid >> stack.log

總結(jié)

結(jié)果是好的,過程是曲折的。總的來說還是知識的欠缺,文章看起來還算順暢,但都是事后諸葛亮,不對,應(yīng)該是時候臭皮匠。基本都是邊查資料邊分析邊操作,前后花費了4天時間,嘗試了很多。

  • Mysql :Buffer Pool 、Change Buffer 、Redo Log 大小、雙一配置...
  • 代碼 : 異步執(zhí)行,線程池參數(shù)調(diào)整,tomcat 配置,Druid連接池配置...
  • JVM : 內(nèi)存大小,分配,垃圾收集器都想換...

總歸一通瞎搞,能想到的都試試。

后續(xù)還需要多了解一些性能優(yōu)化知識,至少要做到排查思路清晰,不瞎搞。

最后5行代碼有哪些:

  • new Redis實例: 1
  • 耗時統(tǒng)計: 3
  • SQL異步執(zhí)行 @Async: 1

上圖最終的結(jié)果是包含該部分的,時間原因未對SQL進行處理,后續(xù)會考慮Redis原子操作+定時同步數(shù)據(jù)庫方式來進行,避免同時操數(shù)據(jù)庫

TODO

問題雖然解決了。但是原理還不清楚,需要繼續(xù)深挖。

為什么createBean對性能影響這么大?

如果影響這么大,Spring為什么還要有多例?

首先非并發(fā)場景速度還是很快的。這個毋庸置疑。畢竟接口響應(yīng)時間不足50ms。

所以問題一定出在,并發(fā)createBean同一對象的鎖等待場景。根據(jù)堆棧日志,翻了一下Spring源碼,果然發(fā)現(xiàn)這里出現(xiàn)了同步鎖。相信鎖肯定不止一處。

圖片圖片

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean

圖片圖片

System.currentTimeMillis并發(fā)度多少才會對性能產(chǎn)生影響,影響有多大?

很多公司(包括大廠)在業(yè)務(wù)代碼中,還是會頻繁的使用System.currentTimeMillis獲取時間戳。比如:時間字段賦值場景。所以,性能影響肯定會有,但是影響的門檻是不是很高。

繼續(xù)學(xué)習(xí)性能優(yōu)化知識

吞吐量與什么有關(guān)?

首先,接口響應(yīng)時長。直接影響因素還是接口響應(yīng)時長,響應(yīng)時間越短,吞吐量越高。一個接口響應(yīng)時間100ms,那么1s就能處理10次。

其次,線程數(shù)。現(xiàn)在都是多線程環(huán)境,如果同時10個線程處理請求,那么吞吐量又能增加10倍。當(dāng)然由于CPU資源有限,所以線程數(shù)也會受限。理論上,在 CPU 資源利用率較低的場景,調(diào)大tomcat線程數(shù),以及并發(fā)數(shù),能夠有效的提升吞吐量。

最后,高性能代碼。無論接口響應(yīng)時長,還是 CPU 資源利用率,都依賴于我們的代碼,要做高性能的方案設(shè)計,以及高性能的代碼實現(xiàn),任重而道遠。

CPU使用率的高低與哪些因素有關(guān)?

CPU使用率的高低,本質(zhì)還是由線程數(shù),以及CPU使用時間決定的。

假如一臺10核的機器,運行一個單線程的應(yīng)用程序。正常這個單線程的應(yīng)用程序會交給一個CPU核心去運行,此時占用率就是10%。而現(xiàn)在應(yīng)用程序都是多線程的,因此一個應(yīng)用程序可能需要全部的CPU核心來執(zhí)行,此時就會達到100%。

此外,以單線程應(yīng)用程序為例,大部分情況下,我們還涉及到訪問Redis/Mysql、RPC請求等一些阻塞等待操作,那么CPU就不是時刻在工作的。

所以阻塞等待的時間越長,CPU利用率也會越低。也正是因為如此,為了充分的利用CPU資源,多線程也就應(yīng)運而生(一個線程雖然阻塞了,但是CPU別閑著,趕緊去運行其他的線程)。

一個服務(wù)線程數(shù)在多少比較合適(算上Tomcat,最終的線程數(shù)量是226),執(zhí)行過程中發(fā)現(xiàn)即使tomcat線程數(shù)量是100,活躍線程數(shù)也很少超過50,整個壓測過程基本維持在20左右。

責(zé)任編輯:武曉燕 來源: 碼猿技術(shù)專欄
相關(guān)推薦

2024-12-13 13:58:53

2020-07-22 08:30:02

代碼開發(fā)工具

2025-07-08 09:33:08

2024-05-23 16:41:40

2024-01-19 13:42:00

模型訓(xùn)練

2022-09-09 09:33:14

支付寶代碼性能

2024-10-29 08:21:05

2024-11-02 10:28:03

2025-06-05 03:00:00

Spring異步接口

2025-05-27 01:55:00

TypeScript開發(fā)者項目

2022-05-26 15:17:54

訓(xùn)練模型

2020-03-26 12:38:15

代碼節(jié)點數(shù)據(jù)

2024-11-01 20:25:28

2024-09-12 15:24:29

2024-06-06 16:15:00

2024-09-09 14:12:38

2023-12-07 06:51:18

AI模型

2023-12-01 14:36:33

模型數(shù)據(jù)

2025-09-11 02:00:00

2010-04-14 16:02:09

IDF
點贊
收藏

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

亚洲成人自拍网| 美女精品在线观看| 精品国产伦一区二区三区免费| 大陆av在线播放| 日本天堂在线| 久久精品国产久精国产爱| 欧美精品少妇videofree| 日韩免费高清一区二区| jvid一区二区三区| 亚洲综合色丁香婷婷六月图片| 久久久久久久有限公司| 又骚又黄的视频| 亚洲特色特黄| 色噜噜狠狠狠综合曰曰曰| www.com日本| 开心久久婷婷综合中文字幕 | www久久久久久久| 视频一区中文字幕精品| 欧美无砖砖区免费| 国内精品在线观看视频| 麻豆传媒视频在线观看| 久久无码av三级| 成人网在线免费看| 国产精品久久久久久久久久精爆| 亚州av乱码久久精品蜜桃| 亚洲欧美激情四射在线日| 苍井空张开腿实干12次| 91av一区| 亚洲成人7777| 日本高清视频免费在线观看| 国产午夜精品一区理论片| 成人免费毛片嘿嘿连载视频| 成人在线视频福利| 欧美a视频在线观看| 亚洲大片在线| 欧美放荡办公室videos4k| 波多野结衣久久久久| 精品亚洲成人| 亚洲免费电影在线观看| 亚洲精品第二页| 影音先锋欧美激情| 欧美一区二区三区在线| 亚洲高清免费在线观看| 日本免费久久| 色天天综合色天天久久| 欧美啪啪一区| 日韩h在线观看| 88av在线播放| 国产精品videossex| 日韩免费性生活视频播放| 五月天开心婷婷| 日韩午夜电影免费看| 91高清视频在线| 成人精品视频一区二区| 成人免费看黄| 色呦呦日韩精品| 北条麻妃在线一区| 免费观看欧美大片| 欧美午夜视频一区二区| 欧洲av无码放荡人妇网站| 色在线中文字幕| 欧美视频一区二区三区…| 亚洲中文字幕无码专区| 偷拍自拍在线看| 一本大道久久a久久综合婷婷| www.国产区| jizz欧美| 精品日韩99亚洲| 99re久久精品国产| 久久99精品久久久久久园产越南| 国产一区二区日韩| 日韩av网站在线播放| 亚洲国产老妈| 欧美黑人xxx| 日韩乱码人妻无码中文字幕| 久久精品网址| 国产欧美久久一区二区| av老司机久久| 99re这里都是精品| 日韩一区不卡| 黄色网在线播放| 亚洲主播在线观看| 国产精品视频一区二区三区四区五区| 欧美片第1页| 欧美精品九九99久久| 午夜性福利视频| 日韩欧美中文字幕电影| 色系列之999| 久草网视频在线观看| 国产精品日韩精品欧美精品| 国产精品久久久久秋霞鲁丝 | 91精品国产入口在线| 中文字幕永久免费| 国产探花一区二区| 久久好看免费视频| 国产精品视频久久久久久久| 日韩成人精品视频| 国产精品久久久久久免费观看| 日本精品专区| 亚洲精品一二三| 超碰网在线观看| 日韩免费高清视频网站| 亚洲免费一级电影| 亚洲成人生活片| 久久久久久久波多野高潮日日| 91亚洲永久免费精品| 免费播放片a高清在线观看| 亚洲精品免费在线播放| 成人免费毛片播放| 成人动漫视频| 日韩最新在线视频| 久久国产视频一区| 国产精品99久久久久| 欧美一级二级三级| 搞黄网站在线看| 欧美日高清视频| 亚洲综合网在线观看| 国模吧视频一区| 91精品视频在线播放| 黄色免费在线播放| 亚洲超碰精品一区二区| 激情图片中文字幕| 国产一卡不卡| 2019中文字幕在线| 亚洲国产成人在线观看| 一区在线播放视频| 日日噜噜夜夜狠狠| 九九热爱视频精品视频| 97视频国产在线| 亚洲AV无码一区二区三区少妇| 中文欧美字幕免费| 日韩亚洲在线视频| 色老板在线视频一区二区| 欧美高清视频在线观看| 国产日韩免费视频| 国产精品久久精品日日| 爆乳熟妇一区二区三区霸乳| 蜜臀91精品国产高清在线观看| 欧美—级a级欧美特级ar全黄 | 日韩av网址在线观看| 久久久国产精品人人片| 国产一二三精品| 在线观看精品视频| 日韩一区中文| 精品国产依人香蕉在线精品| 亚洲无码久久久久久久| 欧美韩日一区二区三区四区| 日韩欧美黄色大片| 精品国产一区二区三区小蝌蚪 | 亚洲人成精品久久久| 91精品国产高清自在线看超| 日韩一级片免费| 性做久久久久久| 日本护士做爰视频| 国产精品毛片在线| 欧美一区二区三区成人久久片 | av软件在线观看| 678五月天丁香亚洲综合网| 亚洲人与黑人屁股眼交| 国产精品一区二区久久精品爱涩 | 99久久99久久精品免费| 人人狠狠综合久久亚洲| 一区二区欧美日韩| 老司机亚洲精品一区二区| 欧美噜噜久久久xxx| 亚洲国产精品suv| 精品高清美女精品国产区| v8888av| 久久精品官网| 一区二区精品免费视频| 91成人在线精品视频| 国语自产精品视频在线看抢先版图片 | 欧美四级在线| 亚洲毛片在线看| 中文字幕 亚洲视频| 亚洲欧美一区二区在线观看| 在线观看你懂的视频| 国产欧美精品久久| 午夜欧美一区二区三区免费观看| 日日狠狠久久| 国产做受高潮69| 国产在线免费观看| 8x福利精品第一导航| 日韩av片在线播放| 欧美激情资源网| 中文字幕无人区二| 久久久久在线| 欧洲xxxxx| 亚洲丝袜啪啪| 92福利视频午夜1000合集在线观看| a毛片不卡免费看片| 国产亚洲精品va在线观看| 99久久久久久久| 日韩欧美国产免费播放| 日韩福利小视频| 久久综合久久鬼色中文字| 三日本三级少妇三级99| 午夜亚洲伦理| 成人午夜视频免费观看| 猛男gaygay欧美视频| 91嫩草视频在线观看| 日韩影片中文字幕| 欧美激情第1页| av中文天堂在线| 亚洲国产精品久久| 一级片视频免费| 婷婷成人激情在线网| 国产探花在线视频| 久久久精品2019中文字幕之3| 超碰人人cao| 蜜臀久久久久久久| 浮妇高潮喷白浆视频| 欧美成人亚洲| 亚洲国产日韩美| 日韩av字幕| 99久久精品免费看国产四区| 久久福利在线| 国产ts人妖一区二区三区| 三级网站视频在在线播放| 视频一区视频二区国产精品| 欧美另类自拍| 亚洲黄色在线看| 亚洲第一免费视频| 丁香花在线观看完整版电影| 在线精品观看国产| 日韩乱码在线观看| 亚洲卡通动漫在线| 亚洲欧美精品久久| 中文字幕二三区不卡| 中文字幕国产专区| 91在线视频免费观看| 中文字幕在线国产| 国产高清成人在线| 人妻精品久久久久中文字幕69| 久久精品免费观看| 小泽玛利亚视频在线观看| 久久天天综合| 97视频在线免费播放| 一区二区三区国产盗摄| 很污的网站在线观看| 欧美成人嫩草网站| 成人短视频在线观看免费| 一区二区电影| 亚洲av综合色区| 91精品亚洲| 2021狠狠干| 欧美激情五月| 日本香蕉视频在线观看| 在线精品国产| 佐佐木明希av| 综合一区在线| 99久久免费观看| 亚洲国产精品第一区二区| 日本精品久久久久久久久久| 亚洲高清网站| 国产原创中文在线观看| 亚洲激精日韩激精欧美精品| 亚洲熟妇国产熟妇肥婆| 国产视频一区免费看| jizzjizz国产精品喷水| 久久av最新网址| 亚洲天堂av线| 狠狠色伊人亚洲综合成人| 亚洲激情国产精品| 成人黄色三级视频| 欧美日韩成人综合| www.桃色av嫩草.com| 精品国产91乱码一区二区三区| 日韩有码第一页| 亚洲男人天堂2023| 日韩在线资源| 欧美多人爱爱视频网站| 中文字幕资源网在线观看免费 | 无码人妻丰满熟妇精品区| 色999日韩国产欧美一区二区| 亚洲一卡二卡在线观看| 日韩一卡二卡三卡国产欧美| 人妻少妇精品无码专区久久| 亚洲人成电影在线| 国产区在线观看| 97碰碰碰免费色视频| 亚洲成人一区在线观看| 91在线观看免费网站| 欧美亚洲色图校园春色| 亚洲成人av动漫| 狠狠爱成人网| caopor在线视频| 国产一区二区调教| 国内精品久久99人妻无码| 国产精品国产三级国产有无不卡| 久草网视频在线观看| 91九色最新地址| www.久久成人| 在线看片第一页欧美| 神马午夜伦理不卡 | 久久久美女毛片| 免费中文字幕日韩| 日韩欧美在线一区| 精品国产伦一区二区三| 亚洲色图色老头| 一区二区三区伦理| 国产精品草莓在线免费观看| 亚洲国产一区二区三区网站| 日产精品一线二线三线芒果| 欧美日韩三区| 欧美日韩一区二区三区69堂| 97成人超碰视| 久久精品黄色片| 欧美中文字幕一二三区视频| 人妻丰满熟妇av无码区hd| 北条麻妃久久精品| 26uuu亚洲电影| 国产精品久久国产精品| 日av在线播放| 亚洲视频一二三区| 中文字幕精品视频在线观看| 日韩精品一区二区三区老鸭窝| 香蕉视频网站在线观看| 欧美综合激情网| 国产成人高清精品免费5388| 香蕉视频在线网址| 麻豆精品国产传媒mv男同| 少妇按摩一区二区三区| 亚洲777理论| 亚洲伦理在线观看| 免费av一区二区| 91麻豆精品一二三区在线| 日韩av一区二区三区在线| 国产农村妇女毛片精品久久莱园子 | 午夜不卡影院| 痴汉一区二区三区| 亚洲天天综合| 女同激情久久av久久| 国产日韩欧美精品一区| 国产情侣自拍av| 亚洲国产精品久久久久秋霞蜜臀| 欧美videosex性欧美黑吊| 亚洲一区久久久| 天天做天天爱天天爽综合网| 最新中文字幕2018| 国产欧美精品日韩区二区麻豆天美| 久久中文字幕免费| 亚洲免费视频观看| 少妇一区视频| 日韩亚洲不卡在线| 六月丁香综合在线视频| 亚洲国产精品一区二区久久hs| 欧美日韩免费观看一区三区| 91porn在线观看| 国产精品揄拍500视频| 日韩成人综合| 波多野结衣国产精品| 综合亚洲深深色噜噜狠狠网站| 国产在成人精品线拍偷自揄拍| 久久久成人精品| 欧美久久亚洲| 男女猛烈激情xx00免费视频| 99视频精品全部免费在线| 成人免费a视频| 亚洲最新av在线| 天天综合91| 大荫蒂性生交片| aaa国产一区| 自拍偷拍18p| 日韩有码在线观看| 日韩三级网址| 一二三四视频社区在线| 久久综合国产精品| 中文字幕人妻一区二区在线视频| 色阁综合伊人av| 免费看日产一区二区三区| 国产欧美日韩网站| 久久久精品国产99久久精品芒果| 中文字幕第315页| 欧美人在线视频| 校园春色另类视频| 五月婷婷六月合| 一区二区成人在线视频| 手机看片福利在线观看| 国产精品久久久久久久久久免费| 国产精品麻豆久久| 日本不卡视频一区| 欧美色国产精品| 免费男女羞羞的视频网站在线观看| 欧美国产一二三区| 激情综合五月天| 国产免费观看av| 久久成人精品电影| 丝袜美腿一区二区三区动态图| 一本岛在线视频| 亚洲成人动漫在线观看| 性开放的欧美大片| 精品综合在线| 国产一区二区三区久久久| 亚洲欧美在线视频免费| 中文字幕精品—区二区| 国产精品美女在线观看直播| 在线免费视频一区| 精品女同一区二区三区在线播放| 麻豆传媒在线免费|