国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

死磕JVM | 用Arthas排查JVM內(nèi)存 真爽!

云計(jì)算 虛擬化
Arthas 是Alibaba開源的Java診斷工具,采用命令行交互模式,提供了較為豐富的功能,主要還是他是免費(fèi)里面的算是好用且功能比較強(qiáng)大的一個(gè)JVM排查的插件,在了解這個(gè)利器之后,發(fā)現(xiàn)還是挺好用的,而且支持的功能也比較全面,那么Arthas到底可以為我們做哪些事情呢?

[[402910]]

本文轉(zhuǎn)載自微信公眾號(hào)「牧小農(nóng)」,作者牧小農(nóng)。轉(zhuǎn)載本文請聯(lián)系牧小農(nóng)公眾號(hào)。

Arthas是啥

當(dāng)我們系統(tǒng)遇到JVM或者內(nèi)存溢出等問題的時(shí)候,如何對我們的程序進(jìn)行有效的監(jiān)控和排查,就發(fā)現(xiàn)了幾個(gè)比較常用的工具,比如JDK自帶的 jconsole、jvisualvm還有一個(gè)最好用的工具——jprofiler,但是這個(gè)是收費(fèi)的,或者除了很有錢的公司,一般很少人會(huì)用這個(gè),還有一個(gè)就是我們今天的主角——Arthas ,為什么今天會(huì)重點(diǎn)講這個(gè)呢?

官網(wǎng)地址:http://arthas.gitee.io/

GitHub地址:https://github.com/alibaba/arthas/

Arthas 是Alibaba開源的Java診斷工具,采用命令行交互模式,提供了較為豐富的功能,主要還是他是免費(fèi)里面的算是好用且功能比較強(qiáng)大的一個(gè)JVM排查的插件,在了解這個(gè)利器之后,發(fā)現(xiàn)還是挺好用的,而且支持的功能也比較全面,那么Arthas到底可以為我們做哪些事情呢?

1.提供性能看板,包括線程、cpu、內(nèi)存等信息,并且會(huì)定時(shí)的刷新。

2.根據(jù)各種條件查看線程快照。找出cpu占用率最高的n個(gè)線程

3.輸出jvm的各種信息,如gc算法、jdk版本、ClassPath等

4.遇到問題無法在線上 debug,熱部署加日志直接替換

5.查看某個(gè)類的靜態(tài)屬性,也可以通過ognl語法執(zhí)行一些語句

6.查看已加載的類的詳細(xì)信息,這個(gè)類從哪個(gè)jar包加載的,查看類的方法的信息

7.dump 類的字節(jié)碼到指定目錄

8.直接反編譯指定的類

9.快速定位應(yīng)用的熱點(diǎn),生成火焰圖

10.可以監(jiān)控到JVM的實(shí)時(shí)運(yùn)行狀態(tài)

以前,你碰到這些問題,解決的辦法大多是,修改代碼,重新上線。但是在大公司里,上線的流程是非常繁瑣的,如果為了多加一行日志而重新發(fā)布版本,無疑是非常折騰人的。但是阿里巴巴開源的Arthas 有了更為優(yōu)雅的線上調(diào)試方法。

Arthas 支持JDK6,同時(shí)可以在 Linux/Mac/Windows上運(yùn)行,自動(dòng)Tab 補(bǔ)全功能,更方便我們定位問題和診斷

下載地址:https://arthas.gitee.io/download.html 你可以下載zip的包我下載的是arthas-packaging-3.5.0-bin.zip 或者通過命令去下載

wget https://alibaba.github.io/arthas/arthas-boot.jar

使用手冊

1. 快速啟動(dòng)

當(dāng)我們下載好之后,我們直接通過命令啟動(dòng)就可以java -jar arthas-boot.jar,但是在此之前我們需要通過檢測的代碼來掛靠到Arthas上面

  1. import java.math.BigDecimal; 
  2. import java.util.ArrayList; 
  3. import java.util.Date
  4. import java.util.List; 
  5. import java.util.concurrent.ScheduledThreadPoolExecutor; 
  6. import java.util.concurrent.ThreadPoolExecutor; 
  7. import java.util.concurrent.TimeUnit; 
  8.  
  9. public class FullGCTest { 
  10.  
  11.  
  12.     //模擬銀行卡的類 
  13.     private static class CardInfo { 
  14.         //小農(nóng)的銀行卡信息記錄 
  15.         BigDecimal price = new BigDecimal(10000000.0); 
  16.         String name = "牧小農(nóng)"
  17.         int age = 18; 
  18.         Date birthdate = new Date(); 
  19.  
  20.         public void m() {} 
  21.     } 
  22.  
  23.     //線程池 定時(shí)線程池 
  24.     //50個(gè),然后設(shè)置 拒絕策略 
  25.     private static ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(50, 
  26.             new ThreadPoolExecutor.DiscardOldestPolicy()); 
  27.  
  28.     public static void main(String[] args) throws Exception { 
  29.         executor.setMaximumPoolSize(50); 
  30.  
  31.         for (;;){ 
  32.             modelFit(); 
  33.             Thread.sleep(100); 
  34.         } 
  35.     } 
  36.  
  37.     /** 
  38.      * 對銀行卡進(jìn)行風(fēng)險(xiǎn)評估 
  39.      */ 
  40.     private static void modelFit(){ 
  41.         List<CardInfo> taskList = getAllCardInfo(); 
  42.         //拿出每一個(gè)信息出來 
  43.         taskList.forEach(info -> { 
  44.             // do something 
  45.             executor.scheduleWithFixedDelay(() -> { 
  46.                 //調(diào)用M方法 
  47.                 info.m(); 
  48.  
  49.             }, 2, 3, TimeUnit.SECONDS); 
  50.         }); 
  51.     } 
  52.  
  53.     private static List<CardInfo> getAllCardInfo(){ 
  54.         List<CardInfo> taskList = new ArrayList<>(); 
  55.         //每次查詢100張卡出來 
  56.         for (int i = 0; i < 100; i++) { 
  57.             CardInfo ci = new CardInfo(); 
  58.             taskList.add(ci); 
  59.         } 
  60.  
  61.         return taskList; 
  62.     } 

這個(gè)是上篇文章講述的案例,感興趣的可以了解一下。

首先我們需要使用javac 命令將Java文件進(jìn)行編譯javac FullGCTest.java進(jìn)行編譯,然后打印GC日志,進(jìn)行風(fēng)險(xiǎn)監(jiān)控打印GC日志:

  1. java -Xms200M -Xmx200M -XX:+PrintGC FullGCTest 

Arthas啟動(dòng)命令:java -jar arthas-boot.jar,get一下

我們就看到了我們剛才啟動(dòng)的FullGCTest的應(yīng)用程序,我們輸入編號(hào) 1 回車,這樣我們就把Arthas掛靠到我們的程序上,接下來我們只需要做對應(yīng)的命令操作就可以了

命令詳情文檔:https://arthas.aliyun.com/doc/commands.html

2. 功能列表

命令 詳細(xì)說明
jvm 查看當(dāng)前JVM信息
thread 查看當(dāng)前JVM的線程堆棧信息
watch 方法執(zhí)行數(shù)據(jù)觀測
dashboard 當(dāng)前系統(tǒng)的實(shí)時(shí)數(shù)據(jù)面板
trace 方法內(nèi)部調(diào)用路徑,并輸出方法路徑上的每個(gè)節(jié)點(diǎn)上耗時(shí)
stack 輸出當(dāng)前方法被調(diào)用的調(diào)用路徑
tt 方法執(zhí)行數(shù)據(jù)的時(shí)空隧道,記錄下指定方法每次調(diào)用的入?yún)⒑头祷匦畔ⅲ⒛軐@些不同的時(shí)間下調(diào)用進(jìn)行觀測
vmoption 查看,更新JVM已加載的類信息
sc 查看JVM已加載的類信息
sm 查看已加載類的方法信息
jad 反編譯指定已加載類的源碼
classloader 查看classloader的繼承樹,urls,類加載信息
heapdump 類似jmap命令的heap dump 功能

jvm

OPERATING-SYSTEM:系統(tǒng)相關(guān)參數(shù)

THREAD相關(guān):

  • COUNT : JVM當(dāng)前活躍的線程數(shù)
  • DAEMON-COUNT : JVM當(dāng)前活躍的守護(hù)線程數(shù)
  • PEAK-COUNT: 從JVM啟動(dòng)開始曾經(jīng)活著的最大線程數(shù)
  • STARTED-COUNT: 從JVM啟動(dòng)開始總共啟動(dòng)過的線程次數(shù)
  • DEADLOCK-COUNT: JVM當(dāng)前死鎖的線程數(shù)

FILE-DESCRIPTOR(文件描述符相關(guān)):

  • MAX-FILE-DESCRIPTOR-COUNT:JVM進(jìn)程最大可以打開的文件描述符數(shù)
  • OPEN-FILE-DESCRIPTOR-COUNT:JVM當(dāng)前打開的文件描述符數(shù)

thread 命令

參數(shù)說明:

命令 詳細(xì)說明
id 線程id
[n:] 指定最忙的前N個(gè)線程并打印堆棧
[b] 找出當(dāng)前阻塞其他線程的線程
[i] 指定cpu使用率統(tǒng)計(jì)的采樣間隔,單位為毫秒,默認(rèn)值為200
[--all] 顯示所有匹配的線程

打印當(dāng)前最忙的N個(gè)線程并打印堆棧

  1. thread -n 3 

thread 查看所有線程

thread 17:顯示指定線程的運(yùn)行堆棧

thread -i: 指定采樣時(shí)間間隔

thread -i 1000 : 統(tǒng)計(jì)最近1000ms內(nèi)的線程CPU時(shí)間。thread -n 3 -i 1000 : 列出1000ms內(nèi)最忙的3個(gè)線程棧

dashboard 命令

運(yùn)行程序時(shí),會(huì)顯示當(dāng)前程序的實(shí)時(shí)信息,如qps, rt, 錯(cuò)誤數(shù), 線程池信息等等

數(shù)據(jù)說明:

  • ID: Java級別的線程ID
  • NAME: 線程名
  • GROUP: 線程組名
  • PRIORITY: 線程優(yōu)先級, 1~10之間的數(shù)字,越大表示優(yōu)先級越高
  • STATE: 線程的狀態(tài)CPU%: 線程的cpu使用率。比如采樣間隔1000ms,某個(gè)線程的增量cpu時(shí)間為100ms,則cpu使用率=100/1000=10%
  • DELTA_TIME: 上次采樣之后線程運(yùn)行增量CPU時(shí)間,數(shù)據(jù)格式為秒
  • TIME: 線程運(yùn)行總CPU時(shí)間,數(shù)據(jù)格式為分:秒
  • ?NTERRUPTED: 線程當(dāng)前的中斷位狀態(tài)
  • DAEMON: 是否是daemon線程

參數(shù)說明:

參數(shù)名稱 詳細(xì)說明
id 刷新實(shí)時(shí)數(shù)據(jù)的時(shí)間間隔 (ms),默認(rèn)5000ms
[n:] 刷新實(shí)時(shí)數(shù)據(jù)的次數(shù)

sc 命令

查看JVM已加載的類信息,通過SC我們可以看到我們這個(gè)類的詳細(xì)信息,包括是從哪個(gè)jar包讀取的,他是不是接口/枚舉類等,甚至包括他是從哪個(gè)類加載器加載的。

參數(shù)說明:

參數(shù)名稱 詳細(xì)說明
class-pattern 類名表達(dá)式匹配
method-pattern 方法名表達(dá)式匹配
[d] 輸出當(dāng)前類的詳細(xì)信息,包括這個(gè)類所加載的原始文件來源、類的聲明、加載的ClassLoader等詳細(xì)信息。如果一個(gè)類被多個(gè)ClassLoader所加載,則會(huì)出現(xiàn)多次
[E] 開啟正則表達(dá)式匹配,默認(rèn)為通配符匹配

sc -d *CardInfo:打印類的詳細(xì)信息

sc -d -f *CardInfo:打印類的Fiedld信息

heapdump + jhat分析

heapdump:類似于jmap命令

創(chuàng)建到指定文件夾下:

  1. [arthas@365564]$ heapdump /usr/local/mxn/dump.hprof Dumping heap to /usr/local/mxn/dump.hprof ... Heap dump file created 

創(chuàng)建成功后,我們就可以在指定文件夾下看到對應(yīng)的dump文件,然后使用命令jhat dump.hprof,生成文件,成功后我們就可以通過IP+端口進(jìn)行訪問了

訪問:

然后我們就可以通過IP+端口去訪問它了,里面有個(gè)他的other,我們拉到最底下,找

Show instance counts for all classes (including platform)

從下面我們可以分析出來哪個(gè)類包含的對象最多,分析出來哪個(gè)類產(chǎn)生的對象

這個(gè)里面最強(qiáng)大的功能還是叫做 Execute Object Query Language (OQL) query,這個(gè)里面可以顯示有哪些對象,對象有多少個(gè)字節(jié)和引用,可以觀察到哪個(gè)對象產(chǎn)生了問題,如下圖所示,顯示所有String對應(yīng)的對象

搜索點(diǎn)進(jìn)去之后我們還能看到這個(gè)對象到底占用了多少個(gè)字節(jié),有多少個(gè)引用指向了這個(gè)Object,這個(gè)OQL的語法也是很靈活,我們可以使用where條件去過濾

jad

jad:反編譯某個(gè)類,或者反編譯某個(gè)類的某個(gè)方法,動(dòng)態(tài)代理生成類的問題定位 第三方的類(觀察代碼) 版本問題(確定自己最新提交的版本是不是被使用)

有人可能會(huì)問這個(gè)有啥用,源碼我不是自己就知道嗎?因?yàn)橛袝r(shí)我們經(jīng)常會(huì)不確定線上或者測試環(huán)境的包是否是我們修改過的,這時(shí)候就可以通過jad反編譯來看下,是否是最新的代碼

redafine

redafine:熱替換,動(dòng)態(tài)更新代碼,不用重啟jvm目前有些限制條件:只能改方法實(shí)現(xiàn)(方法已經(jīng)運(yùn)行完成),不能改方法名, 不能改屬性 m() -> mm()

比如我們在線上環(huán)境有個(gè)class確認(rèn)有問題,想要重新替換,一般情況下只能停掉服務(wù)器重新發(fā)布,在普通的小公司這樣是可以的,但是在大規(guī)模公司京東淘寶這樣的是不能停的,因?yàn)檎麄€(gè)流程是非常復(fù)雜的,那怎么辦呢?大家可以看到下面的案例

首先我們新建一個(gè)測試案例:

  1. public class T{ 
  2.     public static void main(String[] args) throws Exception{ 
  3.                     for(;;){ 
  4.                     System.in.read(); 
  5.                     new TT().m(); 
  6.                 } 
  7.         } 
  1. public class TT{ 
  2.         public void m(){ 
  3.         System.out.println(2); 
  4.     } 

使用命令javac *.java,編譯成class文件,然后運(yùn)行 T 文件

  1. [root@VM-0-7-centos t]# java T 

當(dāng)我們輸入a的時(shí)候打印2,但是我們上線以后才發(fā)現(xiàn),我們需要輸出的1,這個(gè)是如果要從本地更改要重新發(fā)布上線,為了這一個(gè)修改,明顯是不值當(dāng)?shù)模侨绻覀冇? redafine 熱部署就可以幫助我們直接替換,不用重新發(fā)布jvm

然后我們將 T 這個(gè)程序掛靠到 Arthas 上面去

然后我們直接修改 TT.java 程序 vi TT.java,將里面打印2的值修改成1

  1. public class TT{ 
  2.         public void m(){ 
  3.             System.out.println(1); 
  4.         } 

然后編譯執(zhí)行 javac TT.java文件

在回到我們掛靠的Arthas 上面執(zhí)行 redefine /usr/local/mxn/fuccGc/t/TT.class文件

  1. [arthas@398842]$ redefine /usr/local/mxn/fuccGc/t/TT.class redefine success, size: 1, classes: TT 

執(zhí)行成功 大家可以看到我們在沒有重新啟動(dòng)的情況下成功替換了class文件圖片

watch

watch:方法執(zhí)行的數(shù)據(jù)觀測,可以通過watch指令,來監(jiān)控某個(gè)類,監(jiān)控后,運(yùn)行下你的功能,復(fù)現(xiàn)下場景,arthas會(huì)提供給你具體的出參和入?yún)ⅲ瑤椭闩挪楣收?/p>

trace

輸出方法調(diào)用路徑,并輸出耗時(shí),這個(gè)指令對于優(yōu)化代碼非常的有用,可以看出具體每個(gè)方法執(zhí)行的時(shí)間,如果是for循環(huán)等重復(fù)語句,還能看出n次循環(huán)中的最大耗時(shí),最小耗時(shí),和平均耗時(shí),完美!

tt

在我們對某個(gè)方法開啟tt后,會(huì)記錄每一次調(diào)用(我們可以設(shè)置最大監(jiān)控次數(shù))的入?yún)⒑头祷貐?shù),并能對這些不同時(shí)間下調(diào)進(jìn)行觀測

  1. [arthas@405136]$ tt -t FullGCTest modelFit 

命令參數(shù)解析-t tt 命令有很多個(gè)主參數(shù),-t 就是其中之一。這個(gè)參數(shù)的表明希望記錄下類 *Test 的 print 方法的每次執(zhí)行情況。-n 3 當(dāng)你執(zhí)行一個(gè)調(diào)用量不高的方法時(shí)可能你還能有足夠的時(shí)間用 CTRL+C 中斷 tt 命令記錄的過程,但如果遇到調(diào)用量非常大的方法,瞬間就能將你的 JVM 內(nèi)存撐爆。

此時(shí)你可以通過 -n 參數(shù)指定你需要記錄的次數(shù),當(dāng)達(dá)到記錄次數(shù)時(shí) Arthas 會(huì)主動(dòng)中斷tt命令的記錄過程,避免人工操作無法停止的情況。

ognl表達(dá)式

ognl表達(dá)式

OGNL特殊用法請參考:https://github.com/alibaba/arthas/issues/71 OGNL表達(dá)式官方指南:https://commons.apache.org/proper/commons-ognl/language-guide.html

調(diào)用靜態(tài)函數(shù):ognl '@java.lang.System@out.println("hello")'方法 獲取靜態(tài)類的靜態(tài)字段:ognl '@FullGCTest@random'方法

Arthas還支持Web Console,詳見:https://alibaba.github.io/arthas/web-console.html

總結(jié)

 

Arthas是一個(gè)線上Debug神器,相比于其他工具,Arthas有著比較全面的功能,上手也比較容易,對于剛開始入門的小伙伴也是可以輕松掌握的,對于文中有不懂或者有問題的小伙伴,大家可以在下面留言評論。

 

責(zé)任編輯:武曉燕 來源: 牧小農(nóng)
相關(guān)推薦

2021-06-02 09:55:20

JVM排查JVM內(nèi)存過高技術(shù)

2021-06-03 08:32:18

JVM調(diào)優(yōu)虛擬機(jī)

2021-02-25 07:21:00

JVMJavaava虛擬機(jī)

2021-05-25 09:56:42

Jvm類加載機(jī)制Java

2021-02-28 11:58:33

JVM機(jī)制語言

2025-06-16 07:40:00

2021-06-09 07:56:51

JvmJVM面試題Java

2021-03-16 05:44:26

JVM面試題運(yùn)行時(shí)數(shù)據(jù)

2017-09-20 08:48:09

JVM內(nèi)存結(jié)構(gòu)

2022-07-03 20:31:59

JVMJava虛擬機(jī)

2012-01-11 10:45:57

JavaJVM

2023-11-19 23:29:22

Heap DumpJava

2024-12-04 16:44:51

2010-09-26 16:42:04

JVM內(nèi)存組成JVM垃圾回收

2010-09-27 13:48:41

JVM內(nèi)存結(jié)構(gòu)

2018-11-01 10:34:37

JVM內(nèi)存配置

2012-05-15 02:04:22

JVMJava

2010-09-25 12:38:40

JVM內(nèi)存模型

2021-01-21 08:00:25

JVM

2020-08-27 21:36:50

JVM內(nèi)存泄漏
點(diǎn)贊
收藏

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

欧美精品七区| 久久人人爽人人爽人人片亚洲| 国产精品美腿一区在线看| 国产资源在线播放| 激情av一区| 亚洲第一二三四五区| 久久全球大尺度高清视频| 欧美69xxx| 亚洲一区二区三区国产| 久久这里精品国产99丫e6| 91麻豆精品国产综合久久久| 在线91免费看| 高清色视频在线观看| 国产福利一区二区| 成人久久精品视频| 精品丝袜久久| 日韩国产高清视频在线| 蜜桃视频在线入口www| 91首页免费视频| 国产特级淫片高清视频| 久久久久久一区二区| 国产精品27p| 久久91在线| 欧美亚洲成人xxx| 99tv成人影院| 欧美xxxx18性欧美| 91精品久久久久久综合五月天| 亚洲深夜福利网站| 六十路在线观看| 亚洲精品成a人| 不卡的av中文字幕| 国产欧美一区二区精品秋霞影院| 亚洲精品免费在线看| 青青草伊人久久| 日本一区网站| 久久99热精品这里久久精品| 日韩123区| 日韩高清有码在线| 欧美日韩大片| 久久久久久久色| 亚洲成人精选| 亚洲a∨一区二区三区| 日韩精品91亚洲二区在线观看| 产国精品偷在线| 国产在线播放一区三区四| 日本男女交配视频| 亚洲欧美国产三级| 黄在线免费看| 亚洲乱码av中文一区二区| 精品视频国内| 国产福利精品av综合导导航| 国精产品一区一区三区四川| 欧美性做爰毛片| 99精品免费| 色琪琪原网站亚洲香蕉| 亚洲成色777777在线观看影院| 中文字幕一区久| 成人av资源| 99精品视频在线观看| 欧美一区二区三区| 中文字幕一区日韩电影| 亚洲三级色网| 男男做性免费视频网| 日韩精品视频在线播放| 欧美综合视频| 日韩精品一区二区三区四区五区| 91视频一区二区| 羞羞的视频在线看| 欧美第一黄网免费网站| 91视频综合| www.成人精品免费网站青椒| 欧美日韩国产另类一区| 色喇叭免费久久综合| 日本中文字幕一级片| 欧美一区二区三区四区高清 | 色哟哟免费在线观看 | 黄色免费网站在线| 国产拍精品一二三| 国产日韩欧美高清在线| 久久久久久久久免费视频| 亚洲91精品在线| 国产999精品久久久久久| 国产女人在线观看| 国产精品成人aaaaa网站| 91在线高清观看| 欧美.com| 日本在线视频www| 国外成人在线直播| 91视视频在线观看入口直接观看www | 日本亚洲欧洲色α| 亚洲精品国产精华液| 欧美视频二区欧美影视| av免费观看大全| 97在线视频精品| 亚洲一区二区视频在线观看| 国产精品福利在线观看播放| 在线视频手机国产| 国产视频一区二区不卡| 黄页网站视频在线观看| 亚洲精品中文字幕av| 成人黄页毛片网站| 亚洲日日夜夜| 中文字幕在线视频网| 亚洲精品免费一区二区三区| 精品国一区二区三区| 国产亚洲欧美一级| 不卡视频在线| 中文字幕在线看片| 领导边摸边吃奶边做爽在线观看| 国产精品高潮呻吟久久av无限| 999精品在线| 亚洲精品狠狠操| 中文字幕在线播放第一页| 日韩免费在线播放| 精品视频在线视频| 国产乱码精品一品二品| 波多野结衣在线观看一区二区| 在线免费观看的av| 免费99热在线观看| 亚洲国产另类久久久精品极度| 欧美精品videosex极品1| 欧美日韩一区二区电影| 91一区在线观看| 韩日欧美一区| 欧美91在线| 午夜精品久久久久久久久久蜜桃| 亚洲高清一区二区三区| 免费黄色电影在线观看| 国产精品日韩一区二区| 麻豆91精品91久久久的内涵| 国产视频97| 日韩一二三在线视频播| 91亚洲精品久久久蜜桃| av免费不卡国产观看| 97久久人人超碰caoprom欧美 | 川上优av一区二区线观看| 亚洲欧美日本日韩| 在线视频毛片| 久久综合久久综合这里只有精品| 日本精品视频一区二区| 极品销魂美女一区二区三区| 久久视频社区| 国产精品久久久久久久龚玥菲 | 久久亚洲精品网站| 亚洲综合色丁香婷婷六月图片| 久久xxxx精品视频| 91蜜桃臀久久一区二区| 中文字幕亚洲第一| 亚洲综合免费观看高清完整版在线| 日韩成人免费电影| 88久久精品| 92国产精品| av在线影院| 国产精品无码久久久久| 免费av在线电影| 污污网站免费观看| 蜜桃视频一区二区在线观看| 日韩中文一区二区三区| 欧美二级三级| 成人精品视频久久久久| 国产精品国产三级国产aⅴ浪潮| 久久亚洲精品视频| 精品国产91洋老外米糕| 亚洲精品黄网在线观看| 黑人精品xxx一区一二区| 亚洲欧洲国产日韩| 国产肉丝袜一区二区| 粉嫩蜜臀av国产精品网站| 成人的网站免费观看| 欧洲色大大久久| 欧美日韩久久久| 精品日韩99亚洲| 国产亚洲精品91在线| 久热在线中文字幕色999舞| 国产欧美精品一区| 丰满放荡岳乱妇91ww| 国产成人在线视频免费播放| 国产精品一区二区在线观看不卡| 成人夜色视频网站在线观看| 亚洲一级二级三级| 偷拍日韩校园综合在线| 日韩精品一区二区三区在线| 婷婷综合在线观看| 欧美日韩成人激情| 中文字幕亚洲第一| 大量国产精品视频| 77777少妇光屁股久久一区| 国产在线观看精品| 先锋影音欧美| 成年人黄视频网站| 国产免费av在线| 午夜影院在线播放| 无人区乱码一区二区三区| 亚洲天天综合| 91一区二区三区在线观看| 亚洲欧洲综合另类| 日韩欧美国产电影| 九九久久精品一区| 青娱乐一区二区| 国产在线超碰|