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

RabbitMQ處理過(guò)慢,原來(lái)是一個(gè)SQL緩存框架導(dǎo)致的GC頻繁觸發(fā)

存儲(chǔ) 存儲(chǔ)軟件
處理過(guò)慢原因有很多,可能是干活的人少了,也可能這些人摸魚(yú)去了,總之工作不飽和,接下來(lái)看看這幫人有沒(méi)有摸魚(yú),從 線(xiàn)程池 看起。

[[434658]]

一、背景

1. 講故事

上個(gè)月底,有位朋友微信找到我,說(shuō)他的程序 多線(xiàn)程處理 RabbitMQ 時(shí)過(guò)慢,幫忙分析下什么原因,截圖如下:

這問(wèn)題拋出來(lái),有點(diǎn)懵逼,沒(méi)說(shuō)CPU爆高,也沒(méi)說(shuō)內(nèi)存泄漏,也沒(méi)說(shuō)程序卡死。。。鬼知道為啥 Rabbitmq 處理過(guò)慢哈?????? 

既然沒(méi)有一個(gè)緣由,那就往 freeze 這個(gè)方向去找吧,上 windbg 說(shuō)話(huà)。

二、Windbg 分析

1. 尋找 freeze 原因

處理過(guò)慢原因有很多,可能是干活的人少了,也可能這些人摸魚(yú)去了,總之工作不飽和,接下來(lái)看看這幫人有沒(méi)有摸魚(yú),從 線(xiàn)程池 看起。

  1. 0:000> !tp 
  2. CPU utilization: 81% 
  3. Worker Thread: Total: 187 Running: 172 Idle: 0 MaxLimit: 32767 MinLimit: 8 
  4. Work Request in Queue: 0 
  5. -------------------------------------- 
  6. Number of Timers: 0 
  7. -------------------------------------- 
  8. Completion Port Thread:Total: 1 Free: 1 MaxFree: 16 CurrentLimit: 1 MaxLimit: 1000 MinLimit: 8 

從輸出中看,當(dāng)前的 CPU=81%, 大概率是這個(gè)程序引起的,既然 CPU 過(guò)高,可能是某些計(jì)算密集型操作,可能是大量鎖導(dǎo)致的上下文切換,也可能是 GC 頻繁觸發(fā)所致。

2. 是 GC 觸發(fā)嗎?

本系列到這里,我相信有很多朋友應(yīng)該知道如何從線(xiàn)程棧上看是否為 GC 觸發(fā)所致,用命令 ~*e !dumpstack 經(jīng)過(guò)一通尋找,發(fā)現(xiàn)是 214 號(hào)線(xiàn)程觸發(fā)了 GC,如下圖所示:

用 !dumpstack 輸出的信息太多,為了讓信息更加簡(jiǎn)化,改用 !clrstack。

  1. 0:214> !clrstack  
  2. OS Thread Id: 0x290c (214) 
  3.         Child SP               IP Call Site 
  4. 000000bb2983c7d0 00007ffed8c3e335 System.Text.UTF8Encoding.GetString(Byte[], Int32, Int32) 
  5. 000000bb2983c810 00007ffe7aaecee9 StackExchange.Redis.RedisValue.op_Implicit(StackExchange.Redis.RedisValue) 
  6. 000000bb2983c860 00007ffe7aaecd92 xxxx.Util.Helper.RedisHelper.ConvertObj[[System.__Canon, mscorlib]](StackExchange.Redis.RedisValue) 
  7. 000000bb2983c8f0 00007ffe7abc3997 xxxx.Util.Helper.RedisHelper+c__DisplayClass29_0`1[[System.__Canon, mscorlib]].b__0(StackExchange.Redis.IDatabase) 
  8. 000000bb2983ca20 00007ffe7aaeaca0 xxxx.Util.Helper.RedisHelper.Do[[System.__Canon, mscorlib]](System.Func`2<StackExchange.Redis.IDatabase,System.__Canon>) 
  9. 000000bb2983caa0 00007ffe7abc3762 xxxx.Util.Helper.RedisHelper.HashGet[[System.__Canon, mscorlib]](System.String, System.String) 
  10. 000000bb2983cb40 00007ffe7abc2f3d xxxx.Implementation.xxx.GetCompany(System.String) 
  11. ... 
  12. 000000bb2983e170 00007ffe7ad2fadf xxx.xxx.MQ.xxx+c__DisplayClass21_0`1[[System.__Canon, mscorlib]].b__1() 
  13. 000000bb2983e1c0 00007ffed8c11862 System.Threading.Tasks.Task`1[[System.__Canon, mscorlib]].InnerInvoke() 
  14. 000000bb2983e220 00007ffed8c10937 System.Threading.Tasks.Task.Execute() 
  15. 000000bb2983e260 00007ffed8bc674e System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 
  16. 000000bb2983e330 00007ffed8bc65e7 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 
  17. 000000bb2983e360 00007ffed8c10bdd System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task ByRef) 
  18. 000000bb2983e410 00007ffed8c10303 System.Threading.Tasks.Task.ExecuteEntry(Boolean) 
  19. 000000bb2983e450 00007ffed8bcfa10 System.Threading.ThreadPoolWorkQueue.Dispatch() 
  20. 000000bb2983e8e8 00007ffed9d465d3 [DebuggerU2MCatchHandlerFrame: 000000bb2983e8e8]  

從卦中信息看,程序在 RedisHelper.HashGet 操作的過(guò)程中觸發(fā)了 GC,我去,難道是從 redis 中讀了什么大數(shù)據(jù)?接下來(lái)用 !clrstack -a 看看到底從redis中讀了個(gè)啥?

  1. 0:214> !clrstack -a 
  2. OS Thread Id: 0x290c (214) 
  3.         Child SP               IP Call Site 
  4. 000000bb2983c860 00007ffe7aaecd92 xxx.Util.Helper.RedisHelper.ConvertObj[[System.__Canon, mscorlib]](StackExchange.Redis.RedisValue) 
  5.     PARAMETERS: 
  6.         this (0x000000bb2983c8f0) = 0x000000bb182da3d0 
  7.         value (0x000000bb2983c960) = 0x000000bb18440778 
  8.     LOCALS: 
  9.         0x000000bb2983c8c4 = 0x0000000000000000 
  10.         0x000000bb2983c8a0 = 0x0000000000000000 
  11.         0x000000bb2983c898 = 0x0000000000000000 
  12.  
  13. 0:214> !do 0x000000bb18440778 
  14. Name:        System.Byte[] 
  15. MethodTable: 00007ffed8db93d0 
  16. EEClass:     00007ffed87f4dc8 
  17. Size:        6679(0x1a17) bytes 
  18. Array:       Rank 1, Number of elements 6655, Type Byte (Print Array) 
  19. Content:     {"ID":104x,"Code":"130x","xxx":"1304","xxx":"8888","Name":"...............","xxx":"...............","MqConnStr" 

可以看到,redis 讀了大概 6.6 k 的數(shù)據(jù),才這么點(diǎn)數(shù)據(jù),我還以為 幾十M 呢 ??????, 要說(shuō)這點(diǎn)東西就能觸發(fā)GC,我是不相信的 。

3. 到底是什么誘使了 GC 觸發(fā) ?

那這個(gè) 罪魁禍?zhǔn)?到底是誰(shuí)呢?其實(shí)仔細(xì)想一想,GC觸發(fā)無(wú)非就是將對(duì)象從 gen0 推到 gen1,然后由 gen1 推到 gen2,那朋友的這個(gè) RabbitMQ 處理慢,肯定是觸發(fā)了多次GC,才有了這個(gè)肉眼可見(jiàn)的處理慢。

這里就有一個(gè)突破點(diǎn),既然觸發(fā)多次GC,那gen2上肯定有很多帶根的對(duì)象,所以從這里入手比較好,用 !dumpgen 命令查看。

  1. 0:214> !dumpgen 2 -stat 
  2.        Count      Total Size      Type 
  3. ------------------------------------------------- 
  4.       87,738     24,925,316   System.Int32[] 
  5.      509,643     56,399,716   System.String 
  6.       83,077     65,760,888   System.Reflection.Emit.__FixupData[] 
  7.    2,158,346     69,067,072   System.Reflection.Emit.GenericMethodInfo 
  8.       92,388    172,765,392   System.Object[] 
  9.      796,870    179,587,796   **** FREE **** 
  10.   14,030,441    336,730,584   System.RuntimeMethodHandle 
  11.      428,376    348,743,274   System.Byte[] 

我去,gen2 上居然有 1.4 kw 的對(duì)象,這太讓人好奇了,接下來(lái)隨便抽幾個(gè) address ,看看它的引用根是個(gè)啥?

  1. 0:214> !dumpgen 2 -type System.RuntimeMethodHandle 
  2. Object             MT                    Size   Name 
  3. ------------------------------------------------------------------- 
  4. 000000bac9f8fe68   00007FFED8DB9978        24   System.RuntimeMethodHandle 
  5. 000000bac9f8fe80   00007FFED8DB9978        24   System.RuntimeMethodHandle 
  6. 000000bac9f8fe98   00007FFED8DB9978        24   System.RuntimeMethodHandle 
  7. 000000bac9f8feb0   00007FFED8DB9978        24   System.RuntimeMethodHandle 
  8. 000000bac9f8fec8   00007FFED8DB9978        24   System.RuntimeMethodHandle 
  9. ... 
  10. 000000baca1af510   00007FFED8DB9978        24   System.RuntimeMethodHandle 
  11. 000000baca1af548   00007FFED8DB9978        24   System.RuntimeMethodHandle 
  12. 000000baca1af560   00007FFED8DB9978        24   System.RuntimeMethodHandle 
  13. 000000baca1afd90   00007FFED8DB9978        24   System.RuntimeMethodHandle 
  14. 000000baca1afde0   00007FFED8DB9978        24   System.RuntimeMethodHandle 
  15.  
  16. 0:214> !gcroot 000000baca1afde0 
  17. Thread 187c0: 
  18.     000000baeeb5cb30 00007ffed8ba9c60 System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib],[System.__Canon, mscorlib]].FindEntry(System.__Canon) 
  19.         rsi:  
  20.             ->  000000baca4c6ef0 System.Collections.Generic.Dictionary`2[[System.Tuple`4[[System.String, mscorlib],[System.String, mscorlib],[System.Int32, mscorlib],[System.Int32, mscorlib]], mscorlib],[System.Delegate, mscorlib]] 
  21.             ->  000000badab3b8a0 System.Collections.Generic.Dictionary`2+Entry[[System.Tuple`4[[System.String, mscorlib],[System.String, mscorlib],[System.Int32, mscorlib],[System.Int32, mscorlib]], mscorlib],[System.Delegate, mscorlib]][] 
  22.             ->  000000baca1b5210 System.Func`2[[System.Data.IDataReader, System.Data],[xxx.BAR_AccountDC, xxxx]] 
  23.             ->  000000baca1ae8b0 System.Reflection.Emit.DynamicMethod+RTDynamicMethod 
  24.             ->  000000baca1ae7f8 System.Reflection.Emit.DynamicMethod 
  25.             ->  000000baca1b51b0 System.RuntimeMethodInfoStub 
  26.             ->  000000baca1b4a18 System.Reflection.Emit.DynamicResolver 
  27.             ->  000000baca1aea60 System.Reflection.Emit.DynamicScope 
  28.             ->  000000baca1aea78 System.Collections.Generic.List`1[[System.Object, mscorlib]] 
  29.             ->  000000baca1b3b20 System.Object[] 
  30.             ->  000000baca1afde0 System.RuntimeMethodHandle 

從引用鏈看,它是被 Dictionary 所持有,那我們就 dump 一下這個(gè) dictionary,看看是個(gè)啥。

  1. 0:214> !do 000000baca4c6ef0 
  2. Name:        System.Collections.Generic.Dictionary`2[[System.Tuple`4[[System.String, mscorlib],[System.String, mscorlib],[System.Int32, mscorlib],[System.Int32, mscorlib]], mscorlib],[System.Delegate, mscorlib]] 
  3. MethodTable: 00007ffe7a937f18 
  4. EEClass:     00007ffed87f7cb8 
  5. Size:        80(0x50) bytes 
  6. File:        C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll 
  7. Fields: 
  8.               MT    Field   Offset                 Type VT     Attr            Value Name 
  9. 00007ffed8dc3e30  400182a        8       System.Int32[]  0 instance 000000badaaa2c10 buckets 
  10. 00007ffed9874d38  400182b       10 ...non, mscorlib]][]  0 instance 000000badab3b8a0 entries 
  11. 00007ffed8dc3e98  400182c       38         System.Int32  1 instance            83000 count 
  12. 00007ffed8dc3e98  400182d       3c         System.Int32  1 instance            83000 version 
  13. 00007ffed8dc3e98  400182e       40         System.Int32  1 instance               -1 freeList 
  14. 00007ffed8dc3e98  400182f       44         System.Int32  1 instance                0 freeCount 
  15. 00007ffed8d9a430  4001830       18 ...Canon, mscorlib]]  0 instance 000000baca2ec958 comparer 
  16. 00007ffed8d9c550  4001831       20 ...Canon, mscorlib]]  0 instance 0000000000000000 keys 
  17. 00007ffed8dcef28  4001832       28 ...Canon, mscorlib]]  0 instance 0000000000000000 values 
  18. 00007ffed8dc1c98  4001833       30        System.Object  0 instance 0000000000000000 _syncRoot 
  19.  
  20. 0:214> !objsize 000000baca4c6ef0 
  21. sizeof(000000baca4c6ef0) = 1116325152 (0x4289c520) bytes (System.Collections.Generic.Dictionary`2[[System.Tuple`4[[System.String, mscorlib],[System.String, mscorlib],[System.Int32, mscorlib],[System.Int32, mscorlib]], mscorlib],[System.Delegate, mscorlib]]) 

可以看到,當(dāng)前dict 的 size= 8.3w,總大小為 1.1G, 然后用 !mdt 抽查一下字典內(nèi)容。

可以看出,字典中的item大概都是 key= select * from xxx where AccountNo= xxxx, value = Func ,

4. 查看源碼

從 !gcroot 中知道當(dāng)前根在 187c0 號(hào)線(xiàn)程,然后我們通過(guò)線(xiàn)程棧去尋找下源碼。

  1. 0:089> ~~[187c0]s 
  2. ntdll!NtWaitForSingleObject+0xa: 
  3. 00007ffe`e9ea06fa c3              ret 
  4. 0:089> !clrstack  
  5. OS Thread Id: 0x187c0 (89) 
  6.         Child SP               IP Call Site 
  7. 000000baeeb5caa0 00007ffed9718dfe System.Tuple`4[[System.__Canon, mscorlib],[System.__Canon, mscorlib],[System.Int32, mscorlib],[System.Int32, mscorlib]].System.Collections.IStructuralEquatable.GetHashCode(System.Collections.IEqualityComparer) 
  8. 000000baeeb5cb00 00007ffed8ba90a7 System.Collections.Generic.ObjectEqualityComparer`1[[System.__Canon, mscorlib]].GetHashCode(System.__Canon) 
  9. 000000baeeb5cb30 00007ffed8ba9c60 System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib],[System.__Canon, mscorlib]].FindEntry(System.__Canon) 
  10. 000000baeeb5cba0 00007ffed8bc53a4 System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib],[System.__Canon, mscorlib]].TryGetValue(System.__Canon, System.__Canon ByRef) 
  11. 000000baeeb5cbe0 00007ffe7abd8069 xxx.Internal.Cache`2[[System.__Canon, mscorlib],[System.__Canon, mscorlib]].Get(System.__Canon, System.Func`1<System.__Canon>) 
  12. 000000baeeb5cc50 00007ffe7abd6d52 xxx.Database+d__49`1[[System.__Canon, mscorlib]].MoveNext() 
  13. 000000baeeb5ccd0 00007ffed733768e System.Linq.Enumerable.FirstOrDefault[[System.__Canon, mscorlib]](System.Collections.Generic.IEnumerable`1<System.__Canon>) 
  14. 000000baeeb5cd40 00007ffe7af5489e xxx.xxx.ParsePapPayDebitRecord(xxx, xxx.BAR_AccountDC ByRef, System.String ByRef, xxx ByRef, Boolean, xxx, Boolean) 
  15. ... 

從線(xiàn)程棧看,程序做了一個(gè) db 查詢(xún)的操作,源碼大概如下:

  1. public static InvalidTxnCode ParsePapPayDebitRecord(xxx) 
  2.     sql = "select * FROM  [dbo].[xxx]  where AccountNO = '" + transRecord.AccountNO + "'"
  3.  IEnumerable<BAR_AccountDC> enumerable3 = new YiBll<BAR_AccountDC>(transRecord.AccountNO).QuerySql(sql); 

問(wèn)題就出現(xiàn)在這個(gè) sql 拼接上,底層的框架為了提高 mapping 速度,將 sql 和與之對(duì)應(yīng)的 Func<DataReader,Data>  做了緩存處理,由于每次sql都不一樣,這就導(dǎo)致底層的 dict越來(lái)越大,直到目前的 1.1 G。

三、總結(jié)

總的來(lái)說(shuō),本次事故是由于不斷增長(zhǎng)的 dict 在不斷的擠壓小對(duì)象堆,加之程序多線(xiàn)程火力全開(kāi)分配對(duì)象導(dǎo)致gc在小對(duì)象堆上的頻繁回收造成的 rabbitmq 處理過(guò)慢。

修改辦法就是將 sql 參數(shù)化。

  1. sql = "select * FROM [dbo].[xxx] where AccountNO = '" + transRecord.AccountNO + "'"

改成:

  1. sql = "select * FROM [dbo].[xxx] where AccountNO = @AccountNO";  

最后提一下,這個(gè)dump有一定的迷惑性,因?yàn)橛|發(fā)GC的線(xiàn)程并不是罪魁禍?zhǔn)祝徊贿^(guò)是壓死駱駝的那最后一根稻草罷了。

 

責(zé)任編輯:武曉燕 來(lái)源: 一線(xiàn)碼農(nóng)聊技術(shù)
相關(guān)推薦

2020-11-12 07:32:53

JavaScript

2017-04-17 11:07:19

GC數(shù)組動(dòng)態(tài)擴(kuò)容

2025-02-17 09:22:16

MySQLSQL語(yǔ)句

2022-12-10 22:52:54

Redis緩存數(shù)據(jù)

2016-02-02 10:31:03

華三/大安全

2017-06-06 15:13:07

2022-12-14 07:32:40

InnoDBMySQL引擎

2025-03-20 14:18:57

AI算法模型

2021-02-07 08:13:18

@DateTimeFo@NumberFormSpring

2017-06-27 08:41:04

JVM設(shè)計(jì)缺陷GC

2024-02-06 09:30:25

Figma矩形矩形物理屬性

2022-05-05 08:55:12

工業(yè)物聯(lián)網(wǎng)IIoT

2023-05-22 15:58:11

2018-04-02 15:13:21

網(wǎng)絡(luò)

2023-02-15 08:17:38

2024-04-30 08:22:51

Figma圖形編輯變換矩陣

2021-02-02 09:13:11

索引SQL數(shù)據(jù)庫(kù)

2018-07-02 10:07:08

2020-05-26 08:52:36

Java JVM多態(tài)

2020-03-23 08:30:12

程序員男友感受
點(diǎn)贊
收藏

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

可以免费看的黄色网址| 一区二区三区视频观看| 被灌满精子的波多野结衣| 日韩一区二区三区不卡| 天堂成人免费av电影一区| 亚洲最新av在线| 能看毛片的网站| 午夜欧美巨大性欧美巨大| 国产精品不卡在线| 国产亚洲欧美一区二区| 姑娘第5集在线观看免费好剧| 亚洲女同一区| 亚洲欧美自拍一区| 中文字幕无码毛片免费看| 欧美18av| 亚洲一区二区三区小说| 日韩成人av网站| 亚洲精品综合网| 老司机精品影院| 99tv成人影院| 日韩欧美黄色动漫| av动漫在线免费观看| 青青草在线免费观看| 国产一区高清在线| 国产精品成人一区二区三区吃奶| 国产一级片久久| 久久美女精品| 亚洲欧美综合区自拍另类| 午夜性福利视频| 国产成人免费精品| 色偷偷一区二区三区| 大伊香蕉精品视频在线| 欧美99久久| 欧美成人aa大片| 亚洲黄色a v| aa国产成人| 亚洲色图视频网| 日日噜噜噜噜夜夜爽亚洲精品| 俄罗斯嫩小性bbwbbw| 久久99深爱久久99精品| 欧美一区视频在线| 国产精品二区一区二区aⅴ| 91精品婷婷色在线观看| 国产亚洲视频在线观看| 91麻豆免费观看| 97精品免费视频| 日韩一卡二卡三卡四卡| 国产欧美日韩视频一区二区三区| 国产又爽又黄又嫩又猛又粗| 天堂蜜桃一区二区三区| 98精品国产高清在线xxxx天堂| 成人h动漫免费观看网站| 美女视频网站黄色亚洲| 国产91成人在在线播放| 国产精品第二十页| 欧美日韩亚洲一区三区| 欧美激情亚洲另类| 久久婷婷综合国产| 国内自拍视频一区二区三区| 日韩在线观看免费高清完整版| 日本美女黄色一级片| 天堂美国久久| 欧美久久精品午夜青青大伊人| av最新在线观看| 亚洲精品国产偷自在线观看| 久久av资源网站| 久久久久亚洲av片无码下载蜜桃| 欧美a级在线| 久久乐国产精品| 免费在线观看黄网站| 久久xxxx| 国产精品亚洲第一区| 在线视频1卡二卡三卡| 看片网站欧美日韩| 欧美偷拍综合| 亚洲国产精品电影| 久久久久久久久免费看无码| 最新亚洲精品| 日韩中文字幕在线视频播放| 精品欧美一区二区久久久久| 日韩在线观看免费| 天天舔天天操天天干| 日韩欧美视频| 久久久久北条麻妃免费看| 青青草手机在线观看| 国产综合激情| 欧美亚洲视频在线看网址| 无码一区二区三区在线观看| 蜜桃视频一区二区三区在线观看| 成人免费午夜电影| 欧美 中文字幕| 国产偷国产偷精品高清尤物| 中文字幕成人一区| 18aaaa精品欧美大片h| 欧美日韩国产精品一区| 色噜噜狠狠一区二区| 9999久久久久| 亚洲裸体xxxx| 动漫性做爰视频| 乱码第一页成人| 亚洲xxxx在线| 国产中文在线观看| 亚洲一区在线播放| 福利在线一区二区三区| 手机看片一区二区三区| 狠狠噜噜久久| 国产999精品| 337p粉嫩色噜噜噜大肥臀| 国产一区二区在线观看免费| 久久一区二区三区欧美亚洲| 日本中文字幕亚洲| 日本视频在线观看免费| 欧美在线亚洲| 精品国产免费人成在线观看| 日韩 国产 一区| 台湾亚洲精品一区二区tv| 国内精品小视频| 欧美色男人天堂| 亚洲精品一二三区| 中文字幕亚洲欧美日韩在线不卡| 四虎永久在线精品无码视频| 99久久久国产精品无码免费| 精品国产乱码久久久久久蜜坠欲下 | 先锋影音一区二区三区| 国产小视频在线播放| 亚洲一区中文在线| 97视频中文字幕| 在线免费看a| 色94色欧美sute亚洲线路二| 亚洲欧洲国产视频| 人人干人人干人人干| 日韩av视屏| 久久av色综合| 一区二区三区日韩精品| av五月天在线| 久草视频在线免费| 亚洲精品福利电影| 日韩欧美国产一区二区在线播放| 日韩极品视频在线观看| 羞羞色院91蜜桃| 国产精品一区二区三区av麻| 91色视频在线| 91亚洲精品乱码久久久久久蜜桃 | 亚洲乱码一区二区三区在线观看| 少妇性l交大片| 伊人精品一区| 日本高清视频精品| 日本v片在线免费观看| 精品久久久久久电影| 日韩一区视频在线| 亚洲一二三精品| 日本在线不卡一区| 欧美精品二区三区四区免费看视频| 狠狠操一区二区三区| 欧美日韩成人一区二区| 欧美激情 一区| 日韩高清一区在线| 国产精品v片在线观看不卡| 免费观看成年在线视频网站| 精品欧美aⅴ在线网站| www.超碰97| 中文日韩欧美| 蜜桃av久久久亚洲精品| 丝袜老师在线| 精品99一区二区三区| 欧美成人aaaaⅴ片在线看| 99综合电影在线视频| 99999精品视频| 国产一区二区精品久| 国产精品视频最多的网站| 秋霞影院午夜丰满少妇在线视频| 欧美精品在线观看播放| www.免费av| 蜜桃视频在线观看一区| 亚洲精品少妇一区二区| 米奇精品关键词| 人九九综合九九宗合| 91官网在线| 日韩午夜电影在线观看| 国产激情视频一区| 色婷婷av一区二区三| 色www精品视频在线观看| 麻豆一区在线观看| 国产成人在线电影| 1024av视频| 日韩中文在线电影| 国产伦精品一区二区三毛| 爱情电影社保片一区| 日韩中文字幕视频在线观看| 亚洲乱码精品久久久久..| 婷婷久久综合九色综合伊人色| 精品成人av一区二区三区| 狠狠色丁香久久婷婷综合丁香| 久久精品无码中文字幕| 欧美视频免费| 产国精品偷在线| 唐人社导航福利精品| 久久久精品国产| 手机亚洲第一页| 欧美电影影音先锋| 日本午夜视频在线观看| 国产精品人妖ts系列视频| 国产精品手机在线观看| 热久久一区二区| 久操网在线观看| 久久中文字幕二区| 蜜桃传媒视频麻豆一区 | 古典武侠综合av第一页| 日韩中文影院| 韩国国内大量揄拍精品视频| 一本一道波多野毛片中文在线 | 黄色的视频在线免费观看| 精品日韩一区二区| 中日韩在线观看视频| 岛国av一区二区三区| 国产盗摄x88av| 国产精品区一区二区三区| 亚洲永久无码7777kkk| 国产精品一品二品| 久热精品在线观看视频| 小嫩嫩精品导航| 精品久久久久久久久久中文字幕| 国产精品二区不卡| 亚洲毛片aa| 国产欧美日韩精品一区二区免费| 国产精品一区二区三区四区五区 | 免费一区视频| 成人免费在线视频播放| 男女性高潮免费网站| 黄色在线观看视频网站| 一区二区三区四区视频| 头脑特工队2免费完整版在线观看| 7777精品久久久大香线蕉| 伊人久久久久久久久久久久| 亚洲电影一区二区三区| 极品颜值美女露脸啪啪| 国产精品久久精品日日| 三上悠亚影音先锋| 久久亚洲影视婷婷| 亚洲男人在线天堂| av爱爱亚洲一区| 香蕉视频1024| 成人亚洲一区二区一| 中文字幕国产高清| 免费成人在线网站| 在线观看av网页| 日本午夜精品一区二区三区电影| 欧美色图色综合| 99精品国产在热久久婷婷| 婷婷综合在线视频| 亚洲天堂日韩在线| 美媛馆国产精品一区二区| 久久中文字幕导航| 国产精品av一区| 国产成人在线中文字幕| 中文字幕在线不卡视频| 国产精品一区二区入口九绯色| 成人综合在线视频| 国产精品无码一区二区三| 成人一区二区三区中文字幕| av漫画在线观看| 成人蜜臀av电影| 欧产日产国产精品98| 99久久婷婷国产综合精品 | 麻豆国产精品官网| 久久成年人网站| 国产成人在线观看| 亚洲久久久久久| 国产亚洲短视频| 99热这里只有精品4| 一区二区三区免费网站| 日韩三级小视频| 色呦呦国产精品| 一区二区三区在线免费观看视频| 欧美美女一区二区在线观看| 精品国产亚洲AV| 亚洲精品国产成人| a天堂在线资源| 不卡毛片在线看| 91破解版在线观看| 国产精品吹潮在线观看| 一区二区三区| 国产精品视频福利| 精品国产一区二区三区四区| 国产又黄又爽免费视频| 99精品免费| 污视频网站观看| 丁香六月久久综合狠狠色| 无码人妻精品一区二区三应用大全| 国产三级一区二区| 久久精品www| 在线免费一区三区| 成 人 黄 色 片 在线播放| 亚洲精品资源在线| 国产原厂视频在线观看| 4438全国成人免费| 成人动漫视频在线观看| 久久久精品国产一区二区三区| 99精品在线观看| 97精品欧美一区二区三区| 国产sm调教视频| 91美女在线观看| 欧美风情第一页| 日韩欧美在线视频日韩欧美在线视频| 亚洲视频一区二区三区四区| 亚洲国产精品热久久| 欧美日韩在线看片| 日本精品在线视频| 亚洲一区二区三区免费| 伊人精品久久久久7777| 亚洲影院一区| 性高潮免费视频| 亚洲欧美日韩在线不卡| 国产91av在线播放| 亚洲黄色av网站| 18加网站在线| 国产精品一区二区在线| 亚洲女娇小黑人粗硬| 男的插女的下面视频| 国产精一区二区三区| 中文字幕欧美激情极品| 欧美性猛交xxxx乱大交极品| 亚洲美女综合网| 精品国偷自产在线视频99| 亚洲mmav| 农村寡妇一区二区三区| 亚洲毛片在线| 在线播放av网址| 亚洲欧美偷拍另类a∨色屁股| 超碰在线免费97| 亚洲人成在线观看| 在线黄色的网站 | 日韩av三区| 国产精品一线二线三线| 国产黄色精品视频| 极品颜值美女露脸啪啪| 欧美一区二区三区四区视频 | 国产精品一线| 99久久久精品视频| 床上的激情91.| 欧美激情一区二区视频| 欧美一级日韩一级| 在线视频观看国产| 亚洲精品免费在线| 波多野吉衣在线视频| 亚洲黄一区二区三区| 国产精品一级二级| 久久这里有精品| 91精品麻豆| 在线观看17c| 丁香激情综合五月| 久草免费在线观看视频| 精品欧美乱码久久久久久 | 一区二区三区鲁丝不卡| av中文字幕播放| 久久久久久国产精品| 精品视频在线你懂得| aa在线免费观看| 国产精品网曝门| 国产精品久久综合青草亚洲AV| 久久精品国产亚洲一区二区| 精品一区二区三区亚洲| 无码人妻精品一区二区蜜桃网站| 成人天堂资源www在线| 日本少妇裸体做爰| 亚洲男人的天堂在线| 国产成人精品一区二区三区免费| 亚洲欧美一区二区原创| 国产毛片一区二区| 国产一级片网址| 亚洲色图50p| 97色婷婷成人综合在线观看| 97超碰在线视| 91一区二区在线| 岳乳丰满一区二区三区| 久久国产精品久久久久| 日韩av影院| 国内国产精品天干天干| 亚洲国产一区二区三区青草影视| 四虎精品在永久在线观看 | 97se亚洲| 国产精品人人妻人人爽人人牛| 日韩精品1区| 青青草原成人| 国内精品久久久久影院薰衣草| 黄色一级视频免费观看| 精品爽片免费看久久| 四虎影视精品永久在线观看| 精品成在人线av无码免费看| 久久久99久久| 国内老熟妇对白xxxxhd| 欧洲美女7788成人免费视频| 午夜片欧美伦| 中文字幕丰满孑伦无码专区| 欧美精品123区| 三级在线观看视频| 欧洲xxxxx| 久久精品在线免费观看| 亚洲精品无amm毛片| 国产成人综合精品在线|