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

解決Out Of Memory問題實(shí)戰(zhàn)

企業(yè)動(dòng)態(tài)
最近用solr進(jìn)行了一個(gè)做索引的測(cè)試,在長(zhǎng)時(shí)間運(yùn)行做索引的程序之后,會(huì)出現(xiàn)堆內(nèi)存溢出的錯(cuò)誤。本文Po出簡(jiǎn)單代碼,并對(duì)該問題進(jìn)行分析和解決。

最近用solr進(jìn)行了一個(gè)做索引的測(cè)試,在長(zhǎng)時(shí)間運(yùn)行做索引的程序之后,會(huì)出現(xiàn)堆內(nèi)存溢出的錯(cuò)誤。本文Po出簡(jiǎn)單代碼,并對(duì)該問題進(jìn)行分析和解決。

數(shù)據(jù)

solr版本為5.5.0,使用三臺(tái)服務(wù)器配置solr集群,solr以cloud方式啟動(dòng),使用自己配置的zookeeper。在solr上新建一個(gè)數(shù)據(jù)集,并分為3片,每片配置兩個(gè)replica,交叉?zhèn)浞荨?/p>

要做索引的數(shù)據(jù)量是2600+萬(wàn),存儲(chǔ)在MySql數(shù)據(jù)庫(kù)表中,數(shù)據(jù)一直在更新。一次從數(shù)據(jù)庫(kù)表中查詢5000條數(shù)據(jù)。solr搜索主要針對(duì)標(biāo)題和內(nèi)容,因此需要將表中的標(biāo)題和內(nèi)容做到solr中。其中內(nèi)容占用空間非常大,在數(shù)據(jù)庫(kù)中使用mediumtext進(jìn)行存儲(chǔ)。

數(shù)據(jù)集的配置如下:

  1. <field name="id" type="string" indexed="true" stored="true" required="true" />  
  2. <field name="title" type="text_ik" indexed="true" stored="true" /> 
  3. <field name="url" type="string" indexed="false" stored="true" /> 
  4. <field name="intime" type="string" indexed="true" stored="true"/> 
  5. <field name="content" type="text_ik" indexed="true" stored="false"/> 
  6. <!-- for title and content --> 
  7. <field name="allcontent" type="text_ik" indexed="true" stored="false" multiValued="true"/> 
  8. <copyField source="title" dest="allcontent" />       
  9. <copyField source="content" dest="allcontent" /> 

搜索模式分為標(biāo)題檢索和全文檢索,因此配置了allcontent復(fù)合字段,將標(biāo)題和內(nèi)容都放到這里。

做索引的程序使用Java實(shí)現(xiàn),具體思路如下:

  1. 由于數(shù)據(jù)一直在更新,因此使用while(true)循環(huán)進(jìn)行處理,一次循環(huán)查詢5000條數(shù)據(jù);
  2. 數(shù)據(jù)量很大,如果程序出現(xiàn)異常停止運(yùn)行,要保證下次重新啟動(dòng)時(shí)從上次停的“點(diǎn)”繼續(xù)做索引,因此要將這個(gè)“點(diǎn)”存儲(chǔ)在文件中,防止丟失,本程序使用數(shù)據(jù)插入時(shí)間作為這個(gè)“點(diǎn)”;
  3. 一次查詢5000條數(shù)據(jù)做處理,統(tǒng)一插入到solr中。

介紹了這么多,終于把前提說完了,下面上類圖和具體代碼,說明問題。

做索引的程序使用Java實(shí)現(xiàn)圖

  1. public abstract class SolrAbstract{ 
  2.   
  3.     public static final Logger log = Logger.getLogger(SolrAbstract.class); 
  4.       
  5.     public HttpSolrClient server; 
  6.     public List data; // 數(shù)據(jù)庫(kù)中需要處理的數(shù)據(jù) 
  7.     public Collection docs = new CopyOnWriteArrayList(); 
  8.       
  9.     public  SolrAbstract(HttpSolrClient server) throws IOException, SolrServerException { 
  10.         log.info("開始做索引");   
  11.         if(server==null) 
  12.             throw new SolrServerException("server不能為空"); 
  13.         this.server = new HttpSolrClient(getUrl()); 
  14.     } 
  15.       
  16.     public SolrAbstract()throws SolrServerException,IOException{ 
  17.         log.info("開始做索引"); 
  18.         this.server = new HttpSolrClient(getUrl()); 
  19.     } 
  20.   
  21.     public SolrAbstract(List data) throws IOException, SolrServerException { 
  22.         if(data == null || data.isEmpty()) { 
  23.             try { 
  24.                 throw new InvalidParameterException("List不能為空"); 
  25.             } catch (InvalidParameterException e) { 
  26.                 e.printStackTrace(); 
  27.             } 
  28.         } 
  29.         this.data = data; 
  30.     } 
  31.   
  32.     public String getUrl() { 
  33.         return "http://192.168.20.10:8983/solr/test/"; // test為數(shù)據(jù)集名稱 
  34.     } 
  35.   
  36. public class DoIndex extends SolrAbstract { 
  37.       
  38.     public DoIndex(String url) throws SolrServerException, IOException { 
  39.         super(); 
  40.     } 
  41.       
  42.     public void process() throws Exception { 
  43.         for (int i = 0; i < this.data.size(); i++) { 
  44.             Product p = (Product) this.data.get(i); 
  45.             SolrInputDocument doc = new SolrInputDocument(); 
  46.             doc.addField("id", p.getId()); 
  47.             doc.addField("title", p.getTitle()); 
  48.             doc.addField("url", p.getUrl()); 
  49.             doc.addField("intime", p.getIntime()); 
  50.             doc.addField("content", p.getContent()); 
  51.             doc.addField("content", p.getContent()); 
  52.             docs.add(doc); 
  53.         } 
  54.     } 
  55.   
  56.     public synchronized void commitIndex() throws IOException, SolrServerException { 
  57.         long start = System.currentTimeMillis(); 
  58.         if (docs.size() > 0) { 
  59.             server.add(docs); 
  60.         }                
  61.         server.commit(); 
  62.         long endTime = System.currentTimeMillis(); 
  63.         log.info("提交索引花費(fèi)時(shí)間:"+((endTime - start))); 
  64.         docs.clear(); 
  65.         log.info("結(jié)束做索引"); 
  66.     } 
  67.   
  68. public class ProcessData { 
  69.       
  70.     DoIndex index ; 
  71.     private JdbcUtil jdbc; 
  72.     private static String RECORD_INTIME ; 
  73.       
  74.     public ProcessData(JdbcUtil jdbc){ 
  75.         try { 
  76.             RECORD_INTIME = "/home/solr/recordIntime.txt"
  77.             this.jdbc = jdbc; 
  78.             index = new DoIndex(); 
  79.         } catch (Exception e) { 
  80.             e.printStackTrace(); 
  81.         } 
  82.     } 
  83.   
  84.     public void processData() throws Exception{ 
  85.         int startTime = Integer.parseInt(FileUtils.readFiles(RECORD_INTIME)); // ***startTime=0,從文件中讀取記錄時(shí)間 
  86.         String sql = "select id,title,content,url,intime from testTable where intime>startTime limit 5000; 
  87.         List<HashMap> list = jdbc.queryList(sql); 
  88.         while(list!=null&&list.size()>0){ 
  89.             index.data = new ArrayList<Product>(); 
  90.             for (int i = 0; i < list.size(); i++) { 
  91.                 Map<String,Object> item =  list.get(i); 
  92.                 Product p = new Product(); 
  93.                 p.setId(item.get("id").toString()); 
  94.                 p.setTitle(item.get("title").toString()); 
  95.                 p.setUrl(item.get("url").toString()); 
  96.                 p.setIntime(item.get("intime").toString()); 
  97.                 p.setContent(item.get("content").toString()); 
  98.                 index.data.add(p); 
  99.                 startTime = (int)item.get("intime"); 
  100.             }        
  101.             index.process(); // 組裝索引數(shù)據(jù) 
  102.             index.commitIndex(); // 提交索引 
  103.             index.data.clear(); 
  104.             list.clear(); 
  105.             FileUtils.writeFiles(startTime, RECORD_INTIME); // 將***的時(shí)間寫入到文件中 
  106.         } 
  107.     } 

上述代碼在小數(shù)據(jù)量短時(shí)間內(nèi)測(cè)試沒有問題,但運(yùn)行幾個(gè)小時(shí)之后報(bào)錯(cuò)堆內(nèi)存溢出。

檢查程序,發(fā)現(xiàn)SolrAbstract類中定義了兩個(gè)成員變量data和docs,這兩個(gè)都是“大對(duì)象”,雖然在程序中都進(jìn)行了clear(),但還是懷疑JVM并沒有及時(shí)清理這兩個(gè)對(duì)象引用的對(duì)象。還有processData()方法中將從數(shù)據(jù)庫(kù)查詢的數(shù)據(jù)存入list中,這樣可能也會(huì)導(dǎo)致內(nèi)存不會(huì)被及時(shí)回收。

抱著試試看的態(tài)度對(duì)程序進(jìn)行了修改。修改后的程序如下:

  1. public class ProcessData { 
  2.       
  3.     private JdbcUtil jdbc; 
  4.     private static String RECORD_INTIME ; 
  5.     public ProcessData(JdbcUtil jdbc){ 
  6.         try { 
  7.             RECORD_INTIME = "/home/solr/recordIntime.txt"
  8.             this.jdbc = jdbc; 
  9.         } catch (Exception e) { 
  10.             e.printStackTrace(); 
  11.         } 
  12.     } 
  13.   
  14.     public void processData() throws Exception{ 
  15.         int startTime = Integer.parseInt(FileUtils.readFiles(RECORD_INTIME)); // ***startTime=0,從文件中讀取記錄時(shí)間 
  16.         String sql = "select id,title,content,url,intime from testTable where intime>startTime limit 5000; 
  17.         ResultSet rs = null
  18.         try{ 
  19.             rs = jdbc.query(sql); // 直接使用ResultSet獲取數(shù)據(jù)結(jié)果,不再將結(jié)果存入list中 
  20.             List list = new ArrayList(); 
  21.             while(rs!=null&&rs.next()){ 
  22.                 SolrInputDocument doc = new SolrInputDocument(); 
  23.                 doc.addField("id", rs.getInt("id")); 
  24.                 doc.addField("title",rs.getString("title")); 
  25.                 doc.addField("url",rs.getString("url")); 
  26.                 doc.addField("intime",rs.getInt("intime")); 
  27.                 doc.addField("content", rs.getString("content")); 
  28.                 list.add(doc); 
  29.             } 
  30.             commitData(list); 
  31.             list.clear(); 
  32.             list.removeAll(list); 
  33.             list = null
  34.               
  35.         }catch(Exception e) { 
  36.             e.printStackTrace(); 
  37.         }finally { 
  38.             try{ 
  39.                 if(rs!=null) { 
  40.                     rs.close(); 
  41.                     rs = null
  42.                 } 
  43.             }catch(Exception e) { 
  44.                 e.prepareStatement(); 
  45.             } 
  46.         } 
  47.     } 
  48.       
  49.     public void commitData(Collection docs) { 
  50.         try { 
  51.             long start = System.currentTimeMillis(); 
  52.             if (docs.size() > 0) { 
  53.                 server.add(docs); 
  54.             } 
  55.             log.info("當(dāng)前占用內(nèi)存: " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())); 
  56.             server.commit(); 
  57.             long endTime = System.currentTimeMillis(); 
  58.             log.info("提交索引時(shí)間:"+((endTime - start))); 
  59.             docs.clear(); 
  60.             docs = null
  61.             log.info("提交索引結(jié)束"); 
  62.         } catch (SolrServerException e) { 
  63.             e.printStackTrace(); 
  64.         } catch (IOException e) { 
  65.             e.printStackTrace(); 
  66.         } 
  67.     } 

代碼進(jìn)行上述修改后,運(yùn)行了幾個(gè)小時(shí),不再報(bào)堆內(nèi)存溢出的錯(cuò)誤了。

現(xiàn)在假設(shè)業(yè)務(wù)需求修改了,要求在查詢5000條數(shù)據(jù)時(shí),對(duì)每條數(shù)據(jù)進(jìn)行處理:需要根據(jù)id去其他表中查詢修改的標(biāo)題并寫入索引中。

我在上述代碼中直接進(jìn)行了修改,在while(rs!=null&&rs.next())循環(huán)中加入了查詢另外一張表的代碼。運(yùn)行程序發(fā)現(xiàn)當(dāng)前占用的內(nèi)存越來越多。于是我在服務(wù)器上使用了jstat查詢當(dāng)前虛擬機(jī)內(nèi)存占用情況,命令如下:

  1. jstat -gcutil pid 10000 

10秒輸出一次內(nèi)存占用及垃圾回收情況,發(fā)現(xiàn)Young GC和Full GC非常頻繁,并且Full GC之后,老年代內(nèi)存回收情況并不好,監(jiān)控如下:

10秒輸出一次內(nèi)存占用及垃圾回收情況

這里可以看到第四列老年到剛開始只占用了28.64%,運(yùn)行一段時(shí)間后內(nèi)存占用量到81.22%,進(jìn)行Full GC之后,仍然占用52.87%。

檢查代碼,發(fā)現(xiàn)是在while(rs!=null&&rs.next())里查詢另外一張表的代碼出現(xiàn)的問題。開發(fā)匆忙,我從網(wǎng)上隨便找了一個(gè)數(shù)據(jù)庫(kù)工具類進(jìn)行的開發(fā),發(fā)現(xiàn)里面的query方法是這樣的:

  1. public ResultSet query(String sql){ 
  2.     ResultSet rs = null
  3.     PreparedStatement ps = null
  4.     try { 
  5.         ps = conn.prepareStatement(sql); 
  6.         rs = ps.executeQuery(); 
  7.     } catch (SQLException e) { 
  8.         e.printStackTrace(); 
  9.     } 
  10.     return rs; 

這段程序并沒有及時(shí)釋放ps,因?yàn)椴樵冾l繁,ps引用的對(duì)象一直得不到回收,導(dǎo)致這些對(duì)象進(jìn)入了老年代,并且虛擬機(jī)檢查這些對(duì)象仍然與GC Root有關(guān)聯(lián),因此導(dǎo)致老年代垃圾回收效果不好。也是這個(gè)原因?qū)е碌腨oung GC和Full GC非常頻繁。

大致找到了問題原因,修改代碼如下:

  1. public void processData() throws Exception{ 
  2.     int startTime = Integer.parseInt(FileUtils.readFiles(RECORD_INTIME)); // ***startTime=0,從文件中讀取記錄時(shí)間 
  3.     String sql = "select id,title,content,url,intime from testTable where intime>startTime limit 5000; 
  4.     ResultSet rs = null
  5.     try{ 
  6.         rs = jdbc.query(sql); // 直接使用ResultSet獲取數(shù)據(jù)結(jié)果,不再將結(jié)果存入list中 
  7.         List list = new ArrayList(); 
  8.         while(rs!=null&&rs.next()){ 
  9.             SolrInputDocument doc = new SolrInputDocument(); 
  10.             doc.addField("id", rs.getInt("id")); 
  11.             doc.addField("title",rs.getString("title")); 
  12.             doc.addField("url",rs.getString("url")); 
  13.             doc.addField("intime",rs.getInt("intime")); 
  14.             doc.addField("content", rs.getString("content")); 
  15.             PreparedStatement ps1 = jdbc.getConn().prepareStatement("select newtitle from testTable2 where id=?"); 
  16.             ps1.setInt(1, rs.getInt("id")); 
  17.             ResultSet rs1 = ps1.executeQuery(); 
  18.             String newtitle = ""
  19.             while(rs1!=null&&rs1.next()) { 
  20.                 newtitle = rs1.getString("newtitle"); 
  21.             } 
  22.             if(rs1!=null) { 
  23.                 rs1.close(); 
  24.                 rs1 = null
  25.             } 
  26.             if(ps1!=null) { 
  27.                 ps1.close(); 
  28.                 ps1 = null
  29.             } 
  30.             doc.addField("newtitle",newtitle); // 當(dāng)然solr數(shù)據(jù)集的配置文件也需要修改,這里不再贅述 
  31.             list.add(doc); 
  32.         } 
  33.         commitData(list); 
  34.         list.clear(); 
  35.         list.removeAll(list); 
  36.         list = null
  37.           
  38.     }catch(Exception e) { 
  39.         e.printStackTrace(); 
  40.     }finally { 
  41.         try{ 
  42.             if(rs!=null) { 
  43.                 rs.close(); 
  44.                 rs = null
  45.             } 
  46.         }catch(Exception e) { 
  47.             e.prepareStatement(); 
  48.         } 
  49.     } 

經(jīng)過上面的修改,再次運(yùn)行程序,不再發(fā)生內(nèi)存溢出了,用jstat監(jiān)控如下:

用jstat監(jiān)控

可以看到Y(jié)oung GC和Full GC正常了。Full GC在開始階段基本沒有被觸發(fā),Young GC也少了很多。而第四列的老年代回收情況也變的正常了。

上面的例子很簡(jiǎn)單,導(dǎo)致堆內(nèi)存溢出的問題也比較常見。我想說的是看完一本書可能能被記住的內(nèi)容并不多,但隨著經(jīng)驗(yàn)的積累和實(shí)踐的增多,你會(huì)慢慢有一種感覺,能夠大致定位到問題在哪里,這樣就夠了。

參考:《深入理解Java虛擬機(jī):JVM高級(jí)特性與***實(shí)踐(第2版)》

【本文為51CTO專欄作者“王森豐”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)注明出處】

責(zé)任編輯:趙寧寧 來源: 神算子
相關(guān)推薦

2012-10-08 09:50:45

2017-02-24 15:28:33

Android內(nèi)存溢出方法總結(jié)

2021-09-26 06:43:07

MySQL深分頁(yè)優(yōu)化

2021-11-09 10:20:15

MySQL深分頁(yè)數(shù)據(jù)庫(kù)

2021-09-27 13:33:03

MySQL深分頁(yè)數(shù)據(jù)庫(kù)

2023-07-26 15:46:52

Docker管理容器

2025-02-07 08:14:15

Java容器應(yīng)用

2022-09-02 16:07:02

團(tuán)隊(duì)問題

2025-07-21 06:00:00

JVMOOM編程

2013-03-20 09:54:07

2009-08-21 17:48:28

.NET框架DLL Hell問題

2012-09-05 11:09:15

SELinux操作系統(tǒng)

2010-03-10 10:24:16

Linux ssh后門

2013-12-05 09:45:04

HadoopHadoop架構(gòu)圖

2009-12-08 16:30:29

WCF程序

2009-08-06 10:35:27

C# lock thi

2009-09-22 17:32:38

Hibernate A

2010-07-15 14:40:42

AIX TELNET

2009-12-29 11:40:50

2010-02-06 16:13:49

Ubuntu Auda
點(diǎn)贊
收藏

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

久久精品日韩精品| 超碰97人人做人人爱少妇| 黄色片久久久久| 国产九九在线| 国内精品伊人久久久久av影院 | 丝瓜av网站精品一区二区 | 国产精品国产三级国产专区53| 日本亚洲色大成网站www久久| 亚洲亚洲免费| 欧美一级片在线看| 国产精品wwwww| gogo在线高清视频| 91老司机福利 在线| 成人免费看吃奶视频网站| 五月婷婷开心网| 色777狠狠狠综合伊人| 精品国产免费视频| 中文av字幕在线观看| 国产日韩电影| 亚洲国产三级在线| 中文字幕久精品免| 国产资源在线播放| eeuss鲁片一区二区三区在线观看| 国产精品三级久久久久久电影| 欧美成人精品欧美一级私黄| 成人毛片在线| 亚洲精品久久久久久久久久久久| 日本77777| 午夜无码国产理论在线| 亚洲资源在线观看| 在线观看免费黄色片| 国产高清一级毛片在线不卡| www.99精品| 91久久国产自产拍夜夜嗨| 在线观看免费黄色小视频| 鲁大师成人一区二区三区| 色综合色综合久久综合频道88| 影音先锋制服丝袜| 精品中文字幕一区二区三区av| 精品国产一区二区亚洲人成毛片| 亚洲无在线观看| 日韩黄色三级在线观看| 91黄色免费看| 日韩av资源在线| 男人久久天堂| 欧美午夜片欧美片在线观看| 国产精品日韩三级| 色呦呦在线播放| 一区二区三区丝袜| 国产1区2区3区中文字幕| 黄色网在线看| 亚洲欧美日韩一区二区三区在线观看| 亚洲图片欧洲图片日韩av| 国产在线视频网| www国产成人| 鲁鲁视频www一区二区| 日本福利片高清在线观看| 97久久精品人人澡人人爽| 国产日韩亚洲精品| 亚洲区小说区图片区| 99精品视频中文字幕| 国产综合18久久久久久| 无码国产精品一区二区色情男同 | 久久视频精品在线观看| 激情综合网站| 在线观看日韩av| 蜜桃av免费观看| 亚洲精品一区二区在线看| 久久成人精品视频| 久久久久香蕉视频| 亚洲精选一区| 欧美亚洲日本网站| 日本成人一级片| 国产自产高清不卡| 国产精品高清一区二区三区| 天天干视频在线| 久久久久久一二三区| 亚洲图片小说在线| 污污视频在线看| 精品国产成人av| 鲁一鲁一鲁一鲁一av| 日韩中文字幕无砖| 国产视频在线观看一区二区| 91激情视频在线观看| 五月天久久777| 久久久久久久久久久网站| 久久久精品免费看| 美女一区二区视频| 国产精品v欧美精品∨日韩| 久草在线免费福利资源| 亚洲天堂久久久久久久| 久久亚洲中文字幕无码| 日韩欧美精品电影| 日韩精品一区国产麻豆| 精品无码一区二区三区| 日韩欧美伦理| 午夜精品一区二区三区视频免费看| 无码人妻一区二区三区免费| 国产在线国偷精品产拍免费yy| 国产日韩在线一区二区三区| 日日夜夜精品一区| 无码av中文一区二区三区桃花岛| 日韩精品视频一二三| 成人av资源网址| 中文字幕日韩欧美| 日韩xxxxxxxxx| 精品一区二区在线视频| 久久久久久九九| 国产精品一卡二卡三卡 | 一级特黄特色的免费大片视频| 成人激情校园春色| 中文字幕99| 成人日韩在线| 亚洲精品www久久久| 欧美性生给视频| 性感少妇一区| 国产精品乱子乱xxxx| 伊人免费在线| 色呦呦国产精品| 国产精品一级无码| 久久香蕉国产| 国产福利精品av综合导导航| 国产香蕉在线观看| 亚洲欧美一区二区三区国产精品| 免费在线观看毛片网站| 国内精品国产成人国产三级粉色| 精品国产一区二区三区在线观看| 成人a v视频| 99国产精品久| 久久国产精品网| 视频一区中文字幕精品| 久久精彩免费视频| 91精品人妻一区二区三区果冻| 久久婷婷国产综合精品青草| 国产aaa免费视频| 国产精品**亚洲精品| 最近2019中文字幕在线高清 | 欧美人狂配大交3d怪物一区| 法国空姐电影在线观看| 亚洲欧美日韩精品一区二区| 国产精品一区二区三区四区五区 | 国产一区二区三区不卡在线| 精品久久久久久亚洲精品| 国内精品免费视频| 国产精品vip| 99视频在线播放| 欧美xxxx免费虐| 欧美va亚洲va国产综合| 免费在线观看亚洲| 国产成人高清在线| h无码动漫在线观看| 亚洲欧洲国产精品一区| 欧美日韩成人免费| 人妻91麻豆一区二区三区| 亚洲国产精品一区二区久久 | 国产色产综合产在线视频| 99久久久无码国产精品6| 九九热精品视频在线观看| 日本久久久久久久久| 国产日本在线视频| 欧美日韩不卡视频| 国产性生活大片| 国产一区中文字幕| 国产一二三区在线播放| 美女呻吟一区| 国产999在线观看| 91电影在线播放| 制服丝袜亚洲色图| 午夜写真片福利电影网| 国产99久久久国产精品免费看| 免费不卡av在线| 欧美欧美黄在线二区| 国产精品尤物福利片在线观看| 麻豆av在线导航| 精品国产乱码久久久久久久久| 西西44rtwww国产精品| 国产三级精品在线| www.污网站| 亚洲国产99| 日韩性感在线| 日本久久伊人| 日本久久久久久| www.久久ai| 精品一区二区三区四区| 在线亚洲欧美日韩| 亚洲国产一区二区a毛片| 成年人在线观看av| 看国产成人h片视频| 欧美这里只有精品| 精品一二三区| 97免费资源站| 免费欧美电影| 久久久免费电影| 波多野结衣一区二区| 精品国产乱码久久久久久夜甘婷婷| 久久久蜜桃一区二区| 专区另类欧美日韩| 少妇毛片一区二区三区| 国产精品综合一区二区| 无码人妻h动漫| 午夜视频一区| 神马影院一区二区三区| 成人线上播放| 成人精品一区二区三区电影免费| 五月天国产在线| 美女av一区二区| 国产一二在线观看| 精品国产乱码久久久久久牛牛| 在线观看黄色国产| 欧美性高潮床叫视频| 亚洲国产美女视频| 国产精品视频第一区| a视频免费观看| 国产一区二区h| jizz18女人| 亚洲女优在线| 日本a在线天堂| 午夜片欧美伦| 日韩一区二区三区资源| 色爱综合av| 国产精品一区二区三区在线 | 翔田千里一区二区| 成人免费在线视频播放| 91精品秘密在线观看| 婷婷五月色综合| 成人另类视频| 成人做爰66片免费看网站| 99久久久国产| 国产精品美女视频网站| 欧美片第一页| 欧美与欧洲交xxxx免费观看| 黄网av在线| 欧美激情三级免费| 在线免费观看a视频| 精品精品国产国产自在线| 精品视频二区| 亚洲人成网7777777国产| 亚洲av成人精品毛片| 亚洲精品国产成人| 天天干,天天操,天天射| 亚洲国产日韩欧美在线图片| 国产成人无码www免费视频播放| 日韩一区二区三区电影| 亚洲国产精彩视频| 精品国产区一区| 天天操天天操天天操| 亚洲国产日韩欧美综合久久 | 久久这里只有精品6| 成人h动漫精品一区| 2023国产精品视频| 法国伦理少妇愉情| 久久九九影视网| 国产精品18在线| 中文字幕一区免费在线观看| 亚洲色图27p| 最好看的中文字幕久久| 日韩在线观看视频一区二区| 尤物在线观看一区| 日本熟伦人妇xxxx| 欧美丝袜第一区| 成人黄色激情视频| 欧美日韩亚洲综合在线| 国产美女自慰在线观看| 日韩免费性生活视频播放| 高潮毛片7777777毛片| 亚洲国模精品私拍| 国产在线日本| 久久精品2019中文字幕| 搞黄网站在线看| 日本欧美一二三区| 久久99久久久精品欧美| 91九色在线免费视频| 日韩电影不卡一区| 亚洲高清在线观看一区| 亚洲网色网站| 欧美变态另类刺激| 美女看a上一区| 四虎国产精品免费| 26uuu欧美| 中文字幕无码日韩专区免费| 亚洲成人综合在线| 涩涩视频在线观看| 精品久久人人做人人爱| 暖暖视频在线免费观看| 久久久999成人| 黄色在线网站噜噜噜| 国产精品黄视频| 视频国产精品| 日韩国产在线一区| 欧美日本一区二区视频在线观看| 色综合av综合无码综合网站| 九色综合狠狠综合久久| 成人免费毛片日本片视频| 中文一区二区在线观看| 国产一级理论片| 欧美午夜精品久久久久久孕妇| www.桃色av嫩草.com| 国产亚洲免费的视频看| 亚洲性图自拍| 国产精品视频免费观看www| 中文字幕亚洲在线观看| 亚洲国产日韩欧美| 国产欧美日韩一区二区三区在线| 久久撸在线视频| 91美女片黄在线| 欧美人妻一区二区| 欧美日韩高清一区二区不卡| 亚洲欧洲成人在线| 久久99久久99精品免观看粉嫩| 主播大秀视频在线观看一区二区| 国产私拍一区| 欧美精品18| 天天干天天草天天| 91美女视频网站| 精品一级少妇久久久久久久| 777精品伊人久久久久大香线蕉| 毛片网站在线观看| 91精品国产电影| 亚洲国产中文在线二区三区免| 亚洲精品国产一区| 久色成人在线| 韩国无码一区二区三区精品| 一区二区三区四区高清精品免费观看 | 亚洲色图网站| 成年网站免费在线观看| 久久精品视频在线看| 久草视频在线观| 亚洲国产精品va在线看黑人 | www.日本久久| 中文字幕中文字幕中文字幕亚洲无线| 日本视频在线观看免费| 日韩成人性视频| 国产精品原创| 国产麻豆乱码精品一区二区三区| 欧美激情综合色综合啪啪| 亚洲av无码久久精品色欲| 亚洲免费在线看| 国产女人18毛片18精品| 日韩三级影视基地| 欧美激情不卡| 在线看成人av电影| 久久99精品久久久久久动态图| 丁香激情五月少妇| 欧美视频一二三区| 在线激情小视频| 国产在线不卡精品| 日产精品一区二区| 中文字幕免费高清在线| 综合色中文字幕| www.五月激情| 久久久在线视频| 欧美顶级毛片在线播放| 欧美v在线观看| 久久精品在线免费观看| 中文字幕精品一区二| 日韩亚洲国产中文字幕| 高清久久一区| 成人小视频在线观看免费| 成人三级伦理片| 久久艹免费视频| 国产亚洲激情视频在线| 91国内外精品自在线播放| 在线免费观看成人网| 国产精品中文欧美| 国产在线精品观看| 亚洲欧美精品在线| 欧美黄页在线免费观看| 欧美美女黄色网| 91在线国产观看| 国产成人精品一区二区色戒| 久久久999精品视频| 伊色综合久久之综合久久| 日本www在线播放| 国产精品灌醉下药二区| 黄色一级大片在线免费看国产| 欧美在线视频一区| 欧美成人精品一区二区三区在线看| 巨乳女教师的诱惑| 韩曰欧美视频免费观看| 91啦中文在线| 精品国产电影| 久久精品二区亚洲w码| 久久亚洲精品大全| 亚洲最新视频在线| 99久久人爽人人添人人澡| 激情网站五月天| 亚洲精品日日夜夜| 六十路在线观看| 91九色视频在线观看| 天堂va蜜桃一区二区三区漫画版 | 亚洲国产精品综合久久久| 妖精视频一区二区| 欧美丝袜丝交足nylons| 久久大胆人体| 亚洲福利av在线| 91丨国产丨九色丨pron| a级片免费观看| 国产精品激情av电影在线观看| 亚洲午夜久久久久久尤物| 日韩视频在线观看免费视频|