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

深入理解JDBC的超時設置

運維 數據庫運維
恰當的JDBC超時設置能夠有效地減少服務失效的時間。本文將對數據庫的各種超時設置及其設置方法做介紹。

恰當的JDBC超時設置能夠有效地減少服務失效的時間。本文將對數據庫的各種超時設置及其設置方法做介紹。

真實案例:應用服務器在遭到DDos攻擊后無法響應

在遭到DDos攻擊后,整個服務都垮掉了。由于第四層交換機不堪重負,網絡變得無法連接,從而導致業務系統也無法正常運轉。安全組很快屏蔽了所有的DDos攻擊,并恢復了網絡,但業務系統卻還是無法工作。 通過分析系統的thread dump發現,業務系統停在了JDBC API的調用上。20分鐘后,系統仍處于WAITING狀態,無法響應。30分鐘后,系統拋出異常,服務恢復正常。

為什么我們明明將query timeout設置成了3秒,系統卻持續了30分鐘的WAITING狀態?為什么30分鐘后系統又恢復正常了? 當你對理解了JDBC的超時設置后,就能找到問題的答案。

為什么我們要了解JDBC?

當遇到性能問題或系統出錯時,業務系統和數據庫通常是我們最關心的兩個部分。在公司里,這兩個部分是交由兩個不同的部門來負責的,因此各個部門都會集中精力地在自身領域內尋找問題,這樣的話,在業務系統和數據庫之間的部分就會成為一個盲區。對于Java應用而言,這個盲區就是DBCP數據庫連接池和JDBC,本文將集中介紹JDBC。

什么是JDBC?

JDBC是Java應用中用來連接關系型數據庫的標準API。Sun公司一共定義了4種類型的JDBC,我們主要使用的是第4種,該類型的Driver完全由Java代碼實現,通過使用socket與數據庫進行通信。 

 

第4種類型的JDBC通過socket對字節流進行處理,因此也會有一些基本網絡操作,類似于HttpClient這種用于網絡操作的代碼庫。當在網絡操作中遇到問題的時候,將會消耗大量的cpu資源,并且失去響應超時。如果你之前用過HttpClient,那么你一定遇到過未設置timeout造成的錯誤。同樣,第4種類型的JDBC,若沒有合理地設置socket timeout,也會有相同的錯誤——連接被阻塞。

接下來,就讓我們來學習一下如何正確地設置socket timeout,以及需要考慮的問題。

應用與數據庫間的timeout層級

 

上圖展示了簡化后應用與數據庫間的timeout層級。(譯者注:WAS/BLOC是作者公司的具體應用名稱,無需深究)

高級別的timeout依賴于低級別的timeout,只有當低級別的timeout無誤時,高級別的timeout才能確保正常。例如,當socket timeout出現問題時,高級別的statement timeout和transaction timeout都將失效。

我們收到的很多評論中提到:

引用

即使設置了statement timeout,當網絡出錯時,應用也無法從錯誤中恢復。

statement timeout無法處理網絡連接失敗時的超時,它能做的僅僅是限制statement的操作時間。網絡連接失敗時的timeout必須交由JDBC來處理。

JDBC的socket timeout會受到操作系統socket timeout設置的影響,這就解釋了為什么在之前的案例中,JDBC連接會在網絡出錯后阻塞30分鐘,然后又奇跡般恢復,即使我們并沒有對JDBC的socket timeout進行設置。

DBCP連接池位于圖2的左側,你會發現timeout層級與DBCP是相互獨立的。DBCP負責的是數據庫連接的創建和管理,并不干涉timeout的處理。當連接在DBCP中創建,或是DBCP發送校驗query檢查連接有效性的時候,socket timeout將會影響這些過程,但并不直接對應用造成影響。

當在應用中調用DBCP的getConnection()方法時,你可以設置獲取數據庫連接的超時時間,但是這和JDBC的timeout毫不相關。

 

什么是Transaction Timeout?

transaction timeout一般存在于框架(Spring, EJB)或應用級。transaction timeout或許是個相對陌生的概念,簡單地說,transaction timeout就是“statement Timeout * N(需要執行的statement數量) + @(垃圾回收等其他時間)”。transaction timeout用來限制執行statement的總時長。

例如,假設執行一個statement需要0.1秒,那么執行少量statement不會有什么問題,但若是要執行100,000個statement則需要10,000秒(約7個小時)。這時,transaction timeout就派上用場了。EJB CMT (Container Managed Transaction)就是一種典型的實現,它提供了多種方法供開發者選擇。但我們并不使用EJB,Spring的transaction timeout設置會更常用一些。在Spring中,你可以使用下面展示的XML或是在源碼中使用@Transactional注解來進行設置。

Xml代碼

  1. <tx:attributes> 
  2.  
  3. <tx:method name=“…” timeout=“3″/> 
  4.  
  5. </tx:attributes>  

Spring提供的transaction timeout配置非常簡單,它會記錄每個事務的開始時間和消耗時間,當特定的事件發生時就會對消耗時間做校驗,當超出timeout值時將拋出異常。

Spring中,數據庫連接被保存在ThreadLocal里,這被稱為事務同步(Transaction Synchronization),與此同時,事務的開始時間和消耗時間也被保存下來。當使用這種代理連接創建statement時,就會校驗事務的消耗時間。EJB CMT的實現方式與之類似,其結構本身也十分簡單。

當你選用的容器或框架并不支持transaction timeout這一特性,你可以考慮自己來實現。transaction timeout并沒有標準的API。Lucy框架的1.5和1.6版本都不支持transaction timeout,但是你可以通過使用Spring的Transaction Manager來達到與之同樣的效果。

假設某個事務中包含5個statement,每個statement的執行時間是200ms,其他業務邏輯的執行時間是100ms,那么transaction timeout至少應該設置為1,100ms(200 * 5 + 100)。

什么是Statement Timeout?

statement timeout用來限制statement的執行時長,timeout的值通過調用JDBC的java.sql.Statement.setQueryTimeout(int timeout) API進行設置。不過現在開發者已經很少直接在代碼中設置,而多是通過框架來進行設置。

以iBatis為例,statement timeout的默認值可以通過sql-map-config.xml中的defaultStatementTimeout 屬性進行設置。同時,你還可以設置sqlmap中select,insert,update標簽的timeout屬性,從而對不同sql語句的超時時間進行獨立的配置。

如果你使用的是Lucy1.5或1.6版本,通過設置queryTimeout屬性可以在datasource層面對statement timeout進行設置。

statement timeout的具體值需要依據應用本身的特性而定,并沒有可供推薦的配置。

JDBC的statement timeout處理過程

不同的關系型數據庫,以及不同的JDBC驅動,其statement timeout處理過程會有所不同。其中,Oracle和MS SQLServer的處理相類似,MySQL和CUBRID類似。

Oracle JDBC Statement的QueryTimeout處理過程

1. 通過調用Connection的createStatement()方法創建statement

2. 調用Statement的executeQuery()方法

3. statement通過自身connection將query發送給Oracle數據庫

4. statement在OracleTimeoutPollingThread(每個classloader一個)上進行注冊

5. 達到超時時間

6. OracleTimeoutPollingThread調用OracleStatement的cancel()方法

7. 通過connection向正在執行的query發送cancel消息

 

JTDS (MS SQLServer) Statement的QueryTimeout處理過程

1. 通過調用Connection的createStatement()方法創建statement

2. 調用Statement的executeQuery()方法

3. statement通過自身connection將query發送給MS SqlServer數據庫

4. statement在TimerThread上進行注冊

5. 達到超時時間

6. TimerThread調用JtdsStatement實例中的TsdCore.cancel()方法

7. 通過ConnectionJDBC向正在執行的query發送cancel消息

 

MySQL JDBC Statement的QueryTimeout處理過程

1. 通過調用Connection的createStatement()方法創建statement

2. 調用Statement的executeQuery()方法

3. statement通過自身connection將query發送給MySQL數據庫

4. statement創建一個新的timeout-execution線程用于超時處理

5. 5.1版本后改為每個connection分配一個timeout-execution線程

6. 向timeout-execution線程進行注冊

7. 達到超時時間

6. TimerThread調用JtdsStatement實例中的TsdCore.cancel()方法

7. timeout-execution線程創建一個和statement配置相同的connection

8. 使用新創建的connection向超時query發送cancel query(KILL QUERY “connectionId”)

 

CUBRID JDBC Statement的QueryTimeout處理過程

1. 通過調用Connection的createStatement()方法創建statement

2. 調用Statement的executeQuery()方法

3. statement通過自身connection將query發送給CUBRID數據庫

4. statement創建一個新的timeout-execution線程用于超時處理

5. 5.1版本后改為每個connection分配一個timeout-execution線程

6. 向timeout-execution線程進行注冊

7. 達到超時時間

6. TimerThread調用JtdsStatement實例中的TsdCore.cancel()方法

7. timeout-execution線程創建一個和statement配置相同的connection

8. 使用新創建的connection向超時query發送cancel消息

 

什么是JDBC的socket timeout?

第4種類型的JDBC使用socket與數據庫連接,數據庫并不對應用與數據庫間的連接超時進行處理。

JDBC的socket timeout在數據庫被突然停掉或是發生網絡錯誤(由于設備故障等原因)時十分重要。由于TCP/IP的結構原因,socket沒有辦法探測到網絡錯誤,因此應用也無法主動發現數據庫連接斷開。如果沒有設置socket timeout的話,應用在數據庫返回結果前會無期限地等下去,這種連接被稱為dead connection。

為了避免dead connections,socket必須要有超時配置。socket timeout可以通過JDBC設置,socket timeout能夠避免應用在發生網絡錯誤時產生無休止等待的情況,縮短服務失效的時間。

不推薦使用socket timeout來限制statement的執行時長,因此socket timeout的值必須要高于statement timeout,否則,socket timeout將會先生效,這樣statement timeout就變得毫無意義,也無法生效。

下面展示了socket timeout的兩個設置項,不同的JDBC驅動其配置方式會有所不同。

  • socket連接時的timeout:通過Socket.connect(SocketAddress endpoint, int timeout)設置
  • socket讀寫時的timeout:通過Socket.setSoTimeout(int timeout)設置

通過查看CUBRID,MySQL,MS SQL Server (JTDS)和Oracle的JDBC驅動源碼,我們發現所有的驅動內部都是使用上面的2個API來設置socket timeout的。

下面是不同驅動的socket timeout配置方式。

 

  • connectTimeout和socketTimeout的默認值為0時,timeout不生效。
  • 除了調用DBCP的API以外,還可以通過properties屬性進行配置。

通過properties屬性進行配置時,需要傳入key為“connectionProperties”的鍵值對,value的格式為“[propertyName=property;]*”。下面是iBatis中的properties配置。

Xml代碼

  1. <transactionManager type=“JDBC”>   
  2.  
  3.   <dataSource type=“com.nhncorp.lucy.db.DbcpDSFactory”>   
  4.  
  5.      ….   
  6.  
  7.      <property name=“connectionProperties” value=“oracle.net.CONNECT_TIMEOUT=6000;oracle.jdbc.ReadTimeout=6000″/>    
  8.  
  9.   </dataSource>   
  10.  
  11. </transactionManager>  

操作系統的socket timeout配置

如果不設置socket timeout或connect timeout,應用多數情況下是無法發現網絡錯誤的。因此,當網絡錯誤發生后,在連接重新連接成功或成功接收到數據之前,應用會無限制地等下去。但是,通過本文開篇處的實際案例我們發現,30分鐘后應用的連接問題奇跡般的解決了,這是因為操作系統同樣能夠對socket timeout進行配置。公司的Linux服務器將socket timeout設置為了30分鐘,從而會在操作系統的層面對網絡連接做校驗,因此即使JDBC的socket timeout設置為0,由網絡錯誤造成的數據庫連接問題的持續時間也不會超過30分鐘。

通常,應用會在調用Socket.read()時由于網絡問題被阻塞住,而很少在調用Socket.write()時進入waiting狀態,這取決于網絡構成和錯誤類型。當Socket.write()被調用時,數據被寫入到操作系統內核的緩沖區,控制權立即回到應用手上。因此,一旦數據被寫入內核緩沖區,Socket.write()調用就必然會成功。但是,如果系統內核緩沖區由于某種網絡錯誤而滿了的話,Socket.write()也會進入waiting狀態。這種情況下,操作系統會嘗試重新發包,當達到重試的時間限制時,將產生系統錯誤。在我們公司,重新發包的超時時間被設置為15分鐘。

至此,我已經對JDBC的內部操作做了講解,希望能夠讓大家學會如何正確的配置超時時間,從而減少錯誤的發生。

最后,我將列出一些常見的問題。

FAQ

Q1. 我已經使用Statement.setQueryTimeout()方法設置了查詢超時,但在網絡出錯時并沒有產生作用。

➔ 查詢超時僅在socket timeout生效的前提下才有效,它并不能用來解決外部的網絡錯誤,要解決這種問題,必須設置JDBC的socket timeout。

Q2. transaction timeout,statement timeout和socket timeout和DBCP的配置有什么關系?

➔ 當通過DBCP獲取數據庫連接時,除了DBCP獲取連接時的waitTimeout配置以外,其他配置對JDBC沒有什么影響。

Q3. 如果設置了JDBC的socket timeout,那DBCP連接池中處于IDLE狀態的連接是否也會在達到超時時間后被關閉?

➔ 不會。socket的設置只會在產生數據讀寫時生效,而不會對DBCP中的IDLE連接產生影響。當DBCP中發生新連接創建,老的IDLE連接被移除,或是連接有效性校驗的時候,socket設置會對其產生一定的影響,但除非發生網絡問題,否則影響很小。

Q4. socket timeout應該設置為多少?

➔ 就像我在正文中提的那樣,socket timeout必須高于statement timeout,但并沒有什么推薦值。在發生網絡錯誤的時候,socket timeout將會生效,但是再小心的配置也無法避免網絡錯誤的發生,只是在網絡錯誤發生后縮短服務失效的時間(如果網絡恢復正常的話)。 

責任編輯:龐桂玉 來源: 程序源
相關推薦

2016-12-08 15:36:59

HashMap數據結構hash函數

2010-06-01 15:25:27

JavaCLASSPATH

2020-07-21 08:26:08

SpringSecurity過濾器

2014-12-03 13:10:10

openstacknetworkneutron

2012-11-22 10:11:16

LispLisp教程

2009-09-25 09:14:35

Hibernate日志

2021-02-17 11:25:33

前端JavaScriptthis

2023-10-19 11:12:15

Netty代碼

2013-09-22 14:57:19

AtWood

2017-08-15 13:05:58

Serverless架構開發運維

2025-05-06 00:43:00

MySQL日志文件MIXED 3

2017-01-10 08:48:21

2020-09-23 10:00:26

Redis數據庫命令

2025-06-05 05:51:33

2024-02-21 21:14:20

編程語言開發Golang

2019-06-25 10:32:19

UDP編程通信

2018-04-16 11:04:23

HBaseRegion Serv數據庫

2021-08-31 10:32:11

LinuxPage Cache命令

2017-05-03 17:00:16

Android渲染機制

2022-01-14 12:28:18

架構OpenFeign遠程
點贊
收藏

51CTO技術棧公眾號

日本最黄一级片免费在线| 日本爱爱小视频| 欧美调教sm| 91农村精品一区二区在线| 日韩免费高清在线观看| 91麻豆精品国产91久久综合| 四虎精品永久免费| 亚洲精品美腿丝袜| 免费看污久久久| 怡红院成永久免费人全部视频| 91精品福利| 亚洲精品成人久久电影| 美女喷白浆视频| 伊人电影在线观看| 久久免费视频色| 5566av亚洲| 6080午夜伦理| 999精品视频| 日韩成人在线网站| 91精产国品一二三产区别沈先生| 中文字幕在线直播| 亚洲蜜臀av乱码久久精品 | 久久久久久久久99精品| 亚洲成人在线网| 中文字幕欧美人妻精品一区| 欧美精品videosex| 中文字幕欧美日本乱码一线二线| av在线亚洲男人的天堂| 中文字幕一区综合| 黄网在线观看视频| 久久影视一区| 亚洲国产毛片完整版| the porn av| 激情在线视频播放| 中文字幕乱码久久午夜不卡 | yw193.com尤物在线| 激情五月婷婷综合| 69视频在线播放| 成人性视频免费看| 成人h动漫精品一区二区器材| 国产高清av在线| 色琪琪久久se色| 欧美精品一区二区三区四区 | 欧美视频中文在线看| 亚洲乱码一区二区三区| 丰满人妻一区二区| 蜜桃传媒麻豆第一区在线观看| 久久久久在线观看| 国产极品视频在线观看| 日韩有码一区| 欧美xxxxx牲另类人与| 亚洲一区二区三区四区五区xx| 男人天堂亚洲天堂| 一区在线观看免费| 免费国产一区二区| 天天操天天干天天爱| 国产一区二区在线视频| 国产精品久久久久久久久免费| 国产亚洲精品久久久久久无几年桃| 波多野结衣在线播放一区| 亚洲国产精品悠悠久久琪琪| 秋霞午夜鲁丝一区二区| 亚洲三级在线| 欧美日韩国产美女| 免费男同深夜夜行网站| 国产伦子伦对白在线播放观看| 樱桃国产成人精品视频| 欧美一区1区三区3区公司| 亚洲精品国产片| 国产丶欧美丶日本不卡视频| 成人日韩在线电影| 在线观看国产小视频| 日韩精品久久久久久| 日本精品在线视频| 6080午夜伦理| 视频一区二区中文字幕| 日韩免费观看视频| 久久久久久不卡| 久久九九电影| 国产91精品网站| av一级在线观看| 日韩一区精品字幕| 日韩69视频在线观看| 成人h动漫精品一区二区下载| 亚洲影院一区| 欧美性视频网站| 免费无码国产精品| 美女视频黄 久久| 国产欧美久久一区二区| 91激情在线观看| 国产乱码精品一区二区三| 国产精品丝袜视频| 伊人22222| 成人免费黄色在线| 精品无码久久久久国产| 欧美扣逼视频| 国产精品丝袜91| 2025韩国大尺度电影| 污视频在线免费观看网站| 亚洲愉拍自拍另类高清精品| 无码粉嫩虎白一线天在线观看 | www高清在线视频日韩欧美| 中文字幕无码日韩专区免费| 欧美三级特黄| 欧美性资源免费| 中文天堂在线资源| 国产麻豆精品一区二区| 国产乱码精品一区二区三区日韩精品| 性插视频在线观看| 中文字幕不卡的av| 黑人巨茎大战欧美白妇| 国产激情在线播放| 欧美亚洲国产怡红院影院| 色黄视频免费看| 日韩成人午夜| 久热精品视频在线观看一区| 国产污片在线观看| 免费在线视频一区| 成人9ⅰ免费影视网站| 久草在线免费福利资源| 最新中文字幕一区二区三区| 国产深夜男女无套内射| 免费成人毛片| 亚洲黄色在线看| 亚欧精品视频一区二区三区| 欧美午夜一区| 欧美在线一级视频| 国产强被迫伦姧在线观看无码| av男人天堂一区| 一道精品一区二区三区| 免费看男女www网站入口在线| 欧美日韩国产另类一区| 免费a在线观看播放| 91精品久久久久久久久久不卡| 欧美成年人视频| 自拍偷拍校园春色| av午夜精品一区二区三区| 99热都是精品| 成人18视频在线观看| 亚洲精品成人久久电影| 久草视频手机在线观看| 久久国产视频网| 美国av一区二区三区| heyzo高清在线| 88在线观看91蜜桃国自产| 中文字幕狠狠干| 伊人天天综合| 91在线观看免费观看| 成人18在线| 午夜精品福利在线| 麻豆精品国产传媒| 99精品视频在线观看播放| 国产91精品最新在线播放| 人成网站在线观看| 亚洲激情av在线| 欧洲在线免费视频| 日韩在线不卡| 国产成人精品av| 成人在线观看黄色| 91国在线观看| 欧美 日韩 国产 成人 在线观看| 亚洲永久字幕| 玖玖玖精品中文字幕| 老司机深夜福利在线观看| 欧美成人午夜电影| 欧美人与禽zozzo禽性配| 麻豆精品新av中文字幕| 日韩中文字幕一区二区三区| 日韩精品一区第一页| 国产成人精品999| 亚洲欧美日韩综合在线| 亚洲成人在线免费| 女性生殖扒开酷刑vk| 欧美日本一区二区视频在线观看 | 麻豆成人在线视频| 国产在线播放一区| 视频一区二区视频| 2020国产精品小视频| 久久人体大胆视频| 国产又粗又猛又黄又爽无遮挡 | 九九热最新地址| 国产精品一二三四| 隔壁人妻偷人bd中字| 国产精品99久久免费观看| 97在线视频免费播放| 五月天激情婷婷| 欧美日韩一区二区三区在线免费观看| 国产精品300页| 日韩电影在线免费观看| 午夜精品短视频| 91精品国产色综合久久不卡粉嫩| 中文字幕亚洲欧美在线 | h视频在线播放| 色网站国产精品| 日韩乱码人妻无码中文字幕久久 | 国内av免费观看| 亚洲激情亚洲| 日本一区网站| 国产精品日本一区二区三区在线| 欧美极品少妇xxxxⅹ裸体艺术| 无码国产精品高潮久久99| 亚洲五码中文字幕| a级片在线观看| 精品一区二区三区的国产在线播放 | 日韩电影在线观看永久视频免费网站| 成人黄色在线免费| 久久人妻无码aⅴ毛片a片app| 国内久久精品视频| 大陆av在线播放| 欧美人与牛zoz0性行为| 成人观看高清在线观看免费| 国产高清在线a视频大全 | 2014亚洲片线观看视频免费| 你懂的av在线| 欧州一区二区| 精品国产免费久久久久久尖叫| 播放一区二区| 欧美激情小视频| www.91在线| 精品久久久三级丝袜| 中文字幕在线观看视频免费| 综合在线观看色| 丰满少妇一区二区三区| 久久精品国产精品亚洲综合| 欧美成人三级在线视频| 91影院成人| 欧美极品一区二区| 国产精品日本一区二区不卡视频| 91国内精品久久| 国产网友自拍视频导航网站在线观看 | 伊人久久综合97精品| 人妻一区二区三区四区| 欧美日韩精品高清| 中文在线观看免费网站| 中文在线免费一区三区高中清不卡| 中文字幕 亚洲一区| 国产精品18久久久久久vr| 欧美 日本 亚洲| 在线看片不卡| 欧美一级片免费观看| 9l视频自拍九色9l视频成人| 91热精品视频| 99久久亚洲国产日韩美女| 性色av一区二区三区| 91麻豆免费在线视频| 亚洲性线免费观看视频成熟| 亚洲AV无码乱码国产精品牛牛| 欧美日本乱大交xxxxx| 欧美brazzers| 狠狠色狠色综合曰曰| 久久精品www人人爽人人| 国产精品福利影院| 亚洲精品成人无码| 久久综合精品国产一区二区三区| 精品人妻在线视频| 国产91在线看| 亚洲AV无码久久精品国产一区| 老鸭窝一区二区久久精品| 欧美精品成人网| 久久精品官网| 日日摸日日碰夜夜爽av| 国产精品黄色| 亚洲 欧美 综合 另类 中字| 欧美激情亚洲| 在线看无码的免费网站| 日韩精品一区二区三区免费观影 | 久久se精品一区精品二区| youjizzxxxx18| 日本不卡一区二区| 网站一区二区三区| 国产米奇在线777精品观看| 日本一二三四区视频| 国产曰批免费观看久久久| 国产三级生活片| 国产一区视频导航| 波多野结衣在线免费观看| 国产福利一区二区三区视频| 中文字幕无人区二| 成人黄色综合网站| 国产a级黄色片| 91视频一区二区三区| xxx在线播放| 亚洲国产精品精华液2区45| 成人小视频免费看| **网站欧美大片在线观看| 538任你躁在线精品视频网站| 伊人婷婷欧美激情| 国产精选第一页| 色一情一伦一子一伦一区| 中文字幕在线日亚洲9| 在线影视一区二区三区| 蜜臀尤物一区二区三区直播| 色综合天天综合色综合av| 国产精品无码免费播放 | 亚洲精品高清无码视频| 极品少妇一区二区三区精品视频| 亚洲性图第一页| 97精品电影院| 黄色国产在线播放| 国产精品女同一区二区三区| 97精品在线播放| 亚洲国产精品精华液网站| 日本一二三区视频| 在线观看一区二区视频| 99国产精品久久久久久久成人| 精品国精品自拍自在线| 国产二区在线播放| 精品自拍视频在线观看| 亚洲精品成人图区| 91精品久久久久久久久青青| 97久久综合区小说区图片区| 欧洲精品一区色| 欧美jizzhd精品欧美巨大免费| 国产免费成人在线| 国产综合久久久久久鬼色| 黄色网址在线视频| 综合久久一区二区三区| 国内免费精品视频| 777a∨成人精品桃花网| 日本一本草久在线中文| 中文字幕欧美精品日韩中文字幕| av网站在线免费看推荐| 91av福利视频| 日本a人精品| 精品无码久久久久国产| 91精品秘密在线观看| 免费观看精品视频| 国产精品一区二区久激情瑜伽 | 国产欧美日韩综合精品一区二区| 青青草在线观看视频| 色噜噜狠狠成人网p站| 精品国产一级片| 中文字幕日韩av综合精品| av中文在线资源库| 亚洲影视中文字幕| 成人精品久久| 欧美视频免费播放| 成人av电影在线| 黄色精品视频在线观看| 色八戒一区二区三区| 黄色a在线观看| 欧美成人免费播放| 美女视频一区| 日韩欧美99| 亚洲女同在线| 午夜久久久久久久| 亚洲午夜电影在线| 亚洲国产日韩在线观看| 中文字幕亚洲第一| 国模套图日韩精品一区二区| 国产精品久久久久久久久久久久冷| 91久久电影| 日本肉体xxxx裸体xxx免费| 久久亚洲综合av| 日本a在线观看| 日韩女优电影在线观看| 成人在线视频亚洲| 国产日韩中文在线| 999精品色在线播放| 91亚洲免费视频| 国产精品免费av| 自拍偷拍精品视频| 在线播放日韩欧美| 欧美free嫩15| 色综合666| 午夜亚洲视频| 精品人妻二区中文字幕| 成人欧美一区二区三区视频网页| 国产精品成人久久久| 影音先锋欧美精品| 日韩制服一区| 亚洲乱码一区二区三区| 麻豆极品一区二区三区| 国产精品1区2区3区4区| 欧美日韩久久一区二区| 秋霞午夜在线观看| 成人久久精品视频| 欧美国产三级| 欧美性生交xxxxx| 亚洲18色成人| 极品美乳网红视频免费在线观看| 国产精品高潮呻吟久久av无限| 欧美一区三区| av免费一区二区| 一区在线观看视频| 日韩专区第一页| 日本精品视频在线| 成人激情在线| 91免费视频污| 亚洲国产欧美在线| 男操女在线观看| 国产精品免费小视频| 欧美在线黄色| 精品国产一区在线| 在线一区二区视频| av在线免费网站| 精品国产一区二区三| 午夜亚洲一区| 激情无码人妻又粗又大| 日韩欧美国产wwwww|