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

JVM 故障排查實戰指南

開發
本指南旨在幫助開發者和運維人員快速定位并解決常見的 JVM 故障。我們將從基礎知識入手,逐步深入到具體的故障現象分析與解決方案。

在現代軟件開發中,Java 虛擬機(JVM)作為 Java 應用程序運行的基礎平臺,其穩定性和性能直接影響到應用程序的表現。無論是大型企業系統還是小型應用,JVM 的健康狀況都是確保業務連續性的關鍵因素之一。

然而,在實際生產環境中,JVM 時常會遇到各種各樣的問題,如內存泄漏、垃圾回收頻繁、線程死鎖等。這些問題不僅會導致系統響應變慢,甚至可能引發服務中斷,給企業和用戶帶來嚴重損失。

本指南旨在幫助開發者和運維人員快速定位并解決常見的 JVM 故障。我們將從基礎知識入手,逐步深入到具體的故障現象分析與解決方案,希望能夠為讀者提供一套系統的故障排查方法論。

一、前置儲備

1.jstack簡介

jstack是JVM自帶的工具,用于追蹤Java進程線程id的堆棧信息、鎖信息,或者打印core file,遠程調試Java堆棧信息等。

而我們常用的指令則是下面這條:

# 打印對應java進程的堆棧信息
jstack [ option ] pid 

對應的option常見選項如下:

-F 當正常輸出的請求不被響應時,強制輸出線程堆棧
-m 如果調用到本地方法的話,可以顯示C/C++的堆棧
-l 除堆棧外,顯示關于鎖的附加信息,在發生死鎖時可以用jstack -l pid來觀察鎖持有情況

2.線程狀態復習

在使用jstack排查問題之前,我們必須了解堆棧中的信息,所以我們首先必須復習一下線程中的六大狀態:

  • New:線程處于創建但還未啟動的狀態。
  • RUNNABLE:RUNNABLE其實是JVM自定義的一種狀態,如果和操作系統的線程狀態進行等價理解的話,RUNNABLE是處于操作系統Running或者Ready狀態,因為CPU在這兩個狀態間的切換幾乎是瞬時的,所以JVM統一用RUNNABLE表示。
  • Waiting:線程處于等待喚醒狀態。
  • Timed Waiting:在有限時間內線程等待喚醒。
  • Blocked:程序等待進入同步區域,等待監視器鎖中,線程處于阻塞狀態。
  • Terminated:線程工作完成,處于結束狀態了。

了解過線程狀態后,我們就可以了解一下jstack導出的dump文件中線程會基于這些狀態出現的各種情況:

runnable:線程處于執行中
deadlock:死鎖(重點關注)
blocked:線程被阻塞 (重點關注)
Parked:停止
locked:對象加鎖
waiting:線程正在等待
waiting to lock:等待上鎖
Object.wait():對象等待中
waiting for monitor entry:等待獲取監視器(重點關注)
Waiting on condition:等待資源(重點關注),最常見的情況是線程在等待網絡的讀寫

3.MAT(Memory Analyzer)下載安裝

mat下載地址:https://www.eclipse.org/mat/previousReleases.php

為了后續我們可以查看JVM輸出的hprof日志,我們需要下載一個MAT的工具,如下圖所示,選擇更早版本

以筆者為例,筆者就選擇了1.7版本

完成下載后,雙擊下面這個exe文件能打開就說明一切正常

二、詳解線程死鎖問題排查思路

1.問題代碼

如下所示,筆者寫了一段死鎖的代碼,如下所示,然后將其放到服務器中啟動:

@RestController
public class TestController {

    private static Logger logger = LoggerFactory.getLogger(TestController.class);

    private Object lock1 = new Object();
    private Object lock2 = new Object();

    /**
     * 模擬一個線程死鎖的請求
     *
     * @return
     */
    @GetMapping("deadLock")
    public String deadLock() throws Exception {

        Thread t1 = new Thread(() -> {
            logger.info("線程1開始工作,先獲取鎖1");
            synchronized (lock1) {
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                logger.info("線程1獲得鎖1,嘗試獲得鎖2");

                synchronized (lock2) {
                    logger.info("線程1獲得鎖2成功");
                }
            }

        });

        Thread t2 = new Thread(() -> {
            logger.info("線程2開始工作,先獲取鎖2");
            synchronized (lock2) {

                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lock1) {
                    logger.info("線程2獲得鎖1成功");
                }
            }


        });

        t1.setName("my-thread-1");
        t2.setName("my-thread-2");
        t1.join();
        t2.join();
        t1.start();
        t2.start();


        return "success";
    }
}

2.復現問題

由于這只是一個demo,我們日常發現這種問題的時候大概率是多線程中的業務沒有結束,所以重現問題也很簡單,通過命令調用一下接口即可

curl http://localhost:8888/deadLock

3.排查思路

首先確定當前發生死鎖的java應用,我們通過jps確定進程id,可以看到筆者服務器的進程id為23334,然后通過jstack -l查看鎖以及鎖的附加信息:

jstack -l 23334

最終可以在jstack的最下方看到這樣一段信息(Found one Java-level deadlock),由此確認出現my-thread-1持有0x00000000ec509610等待0x00000000ec509620,my-thread-2反之。

然后我們通過jstack信息即可定位到問題代碼在TestController.java:53以及TestController.java:37。

Found one Java-level deadlock:
=============================
"my-thread-2":
  waiting to lock monitor 0x00007f2800ac9318 (object 0x00000000ec509610, a java.lang.Object),
  which is held by "my-thread-1"
"my-thread-1":
  waiting to lock monitor 0x00007f27e40062c8 (object 0x00000000ec509620, a java.lang.Object),
  which is held by "my-thread-2"

Java stack information for the threads listed above:
===================================================
"my-thread-2":
        at com.example.jstackTest.TestController.lambda$deadLock$1(TestController.java:53)
        - waiting to lock <0x00000000ec509610> (a java.lang.Object)
        - locked <0x00000000ec509620> (a java.lang.Object)
        at com.example.jstackTest.TestController$$Lambda$582/2089009876.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:748)
"my-thread-1":
        at com.example.jstackTest.TestController.lambda$deadLock$0(TestController.java:37)
        - waiting to lock <0x00000000ec509620> (a java.lang.Object)
        - locked <0x00000000ec509610> (a java.lang.Object)
        at com.example.jstackTest.TestController$$Lambda$581/1994255298.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:748)

Found 1 deadlock.

三、詳解CPU 飆升問題排查思路

1.問題復現

導致CPU 100%的原因有很多,一般來說都是編碼不當導致的,所以常規的排查思路為:

  • 定位進程號,如果是Java進程則查看是哪個線程導致的。
  • 定位導致CPU 飆升的線程號,轉為16進制。
  • 導致JVM鎖信息日志,使用線程號定位代碼。
  • 排查并修復代碼問題。

首先筆者準備了一個導致CPU飆升的問題代碼,可以看到線程池中的線程不會停止不斷工作

private ExecutorService threadPool = Executors.newFixedThreadPool(100);
    private static Object lock = new Object();
    private static Logger logger = LoggerFactory.getLogger(TestController.class);

    public TestController() {
    }

    @GetMapping({"/test"})
    public void test() {
        for(int i = 0; i < 100; ++i) {
            this.threadPool.execute(() -> {
                logger.info("加法線程開始工作");
                long sum = 0L;
                Object var2 = lock;
                synchronized(lock){}

                try {
                    while(true) {
                        sum += 0L;
                    }
                } finally {
                    ;
                }
            });
        }

    }

然后我們發起請求:

 curl http://localhost:9550/test

2.排查過程

此時使用top命令查看,可以看到24411號進程CPU占用百分比飆升。此時我們就需要進一步定位這個進程的哪一個線程出問題了。

所以我們需要進一步定位這個問題是哪一個線程導致的,命令如下所示,使用線程模式查看對應pid的線程情況

top -Hp 24411

可以看到25321這個線程CPU占用過高,此時我們就可以通過thread dump定位導致問題的代碼段

鍵入jstack -l 24411 >/tmp/log.txt到處日志,然后將線程號25321轉為16進制,這里筆者使用了一個在線的網站地址

16進制轉換:https://www.sojson.com/hexconvert.html

可以看到25321轉換為16進制值為62e9,所以我們就使用62e9到導出的日志文件中查看這個線程堆棧情況。

使用轉換的值從剛剛導出的日志中定位,可以看到該線程處于運行狀態,很明顯這個線程一直處于運行中,有一段邏輯肯定在不停的消耗CPU資源,所以我們查看代碼位置在TestController.java:32,由此得到問題代碼并修復問題。

四、詳解OOM問題排查思路

1.復現問題

出現OOM問題大抵是有兩個原因:

  • 大流量導致服務器創建大量的對象把內存打爆了,面對這種情況我們除了熔斷以外別無他法。
  • 程序編寫不規范導致,大流量情況下出現垃圾內存進而出現OOM,筆者本地探討的就是這種情況。

如下所示,筆者初始化了一個程序,創建一個線程池,模擬無數個線程池將不斷將內存寫入4M的數據,并且不清理。

RestController
public class TestController {
    final static ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(100, 100, 1, TimeUnit.MINUTES,
            new LinkedBlockingQueue<>());// 創建線程池,通過線程池,保證創建的線程存活

    final static ThreadLocal<Byte[]> localVariable = new ThreadLocal<Byte[]>();// 聲明本地變量

    @RequestMapping(value = "/test0")
    public String test0(HttpServletRequest request) {
        poolExecutor.execute(() -> {
            Byte[] c = new Byte[4* 1024* 1024];
            localVariable.set(c);// 為線程添加變量

        });
        return "success";
    }

   
}

完成后部署到服務器上,并使用以下命令啟動,可以看到筆者調整的jvm堆內存大小(筆者服務器內存為1g故這里設置為100m),以及設置OOM輸出參數

java -jar -Xms100m -Xmx100m # 調整堆內存大小
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof  # 表示發生OOM時輸出日志文件,指定path為/tmp/heapdump.hprof
-XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/tmp/heapTest.log # 打印日志、gc時間以及指定gc日志的路徑
demo-0.0.1-SNAPSHOT.jar

完成后我們啟動項目使用HTTP接口請求工具進行壓測,可以看到服務器不久之后就出現了OOM問題:

java.lang.OutOfMemoryError: Java heap space
Dumping heap to /tmp/heapdump.hprof ...
Heap dump file created [151939570 bytes in 1.112 secs]
Exception in thread "pool-1-thread-5" java.lang.OutOfMemoryError: Java heap space
        at com.example.jstackTest.TestController.lambda$test0$0(TestController.java:25)
        at com.example.jstackTest.TestController$$Lambda$582/394910033.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Exception in thread "pool-1-thread-7" java.lang.OutOfMemoryError: Java heap space
        at com.example.jstackTest.TestController.lambda$test0$0(TestController.java:25)
        at com.example.jstackTest.TestController$$Lambda$582/394910033.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Exception in thread "pool-1-thread-9" java.lang.OutOfMemoryError: Java heap space

2.排查思路

我們直接鎖定java進程號之后,使用top -Hp pid查看進程的線程信息,可以看到這里面的每一個線程基本都把堆區內存打滿了,我們不妨查看任意一個線程:

我們首先使用jstack -l 3721將日志導出,這里就以3873轉為16進制查看線程狀態,可以發現線程處于等待狀態,而且日志中并沒有存在死鎖的信息,所以我們必須進一步查看堆區情況確認是否是因為內存泄漏導致的。

然后使用jmap查看堆區使用情況:

jmap -heap 3721

從下面的日志可以看出老年代使用率高達82%,很明顯有一些長期沒有釋放的對象在內存中導致OOM問題。

我們從上文設置的oom日志路徑中找到日志/tmp/heapdump.hprof,導出到本地,使用MAT打開,找到使用率最高的Byte數組,點擊下圖Histogram ,點擊內存占用最高的選項展開。

這里補充一下截圖中看到的兩個選項:

  • with incoming references: 表示的是 當前查看的對象,被外部的應用。
  • with outGoing references: 表示的是 當前對象,引用了外部對象。

所以我們的選擇with incoming reference:

可以定位到就是我們一個線程池中的threadLocal使用不當導致OOM問題了

小結

通過本指南的學習,我們希望讀者能夠對 JVM 的內部機制有更深入的理解,并掌握一系列有效的故障排查方法和工具。JVM 作為 Java 應用程序的核心組件,其穩定性和性能對于業務的成功至關重要。

在實際工作中,面對復雜的生產環境和多變的應用需求,僅僅依賴于理論知識是遠遠不夠的。因此,我們鼓勵讀者在實踐中不斷積累經驗,結合實際情況靈活運用所學的知識和技術。只有這樣,才能在遇到問題時迅速定位并解決問題,確保系統的高效運行。

責任編輯:趙寧寧 來源: 寫代碼的SharkChili
相關推薦

2023-11-10 07:23:57

Kubernetes集群網絡

2013-03-25 09:19:10

Linux服務器故障排查

2013-03-26 09:21:40

Linux服務器故障排查

2019-12-09 10:40:15

YAMLBashKubernetes

2017-08-18 22:40:33

線上線程備份

2025-06-16 07:40:00

2024-06-28 11:54:20

2024-03-20 10:48:09

Java 8內存管理

2024-12-04 15:49:29

2019-02-20 09:29:44

Java內存郵件

2010-09-15 08:41:31

Wi-Fi故障

2013-07-11 09:25:52

2018-11-26 08:49:42

CPU排查負載

2024-02-20 16:55:14

K8S云計算

2010-08-30 19:51:08

DHCP故障

2020-08-27 21:36:50

JVM內存泄漏

2021-09-26 19:39:58

MogDB故障數據庫

2010-09-27 13:25:39

無線信號

2022-04-18 09:07:54

Linux網絡延遲

2010-10-14 13:55:24

無線故障排查
點贊
收藏

51CTO技術棧公眾號

国产精品嫩模av在线| 色是在线视频| 成人免费高清在线观看| 隔壁老王国产在线精品| 亚洲av无码国产精品久久| 免费观看一级欧美片| 国产精品久久久一本精品| 91久久偷偷做嫩草影院| 69亚洲精品久久久蜜桃小说 | 欧美激情久久久久久久| 久久久久久爱| 欧美日韩国产色视频| 先锋在线资源一区二区三区| 国产高清视频免费| 丝袜诱惑制服诱惑色一区在线观看| 日韩一级黄色av| 久久久久国产精品区片区无码| 国产黄色一区| 精品久久久在线观看| 伊人情人网综合| 亚洲色图狠狠干| 国产成人在线色| 国产精品免费视频xxxx| 亚州国产精品视频| 久久久久午夜电影| 亚洲欧美一区二区激情| 日本少妇激三级做爰在线| 免费观看一级欧美片| 亚洲国产成人av好男人在线观看| 相泽南亚洲一区二区在线播放 | 国产91精品入口| 成人a视频在线观看| 男人午夜免费视频| 亚洲黄色免费| 欧美国产高跟鞋裸体秀xxxhd| 性少妇xx生活| 久久不见久久见国语| 亚洲第一天堂无码专区| 中文字幕第66页| 久久久久久久性潮| 欧美影片第一页| 无码aⅴ精品一区二区三区浪潮 | 国产91免费看片| 国产午夜激情视频| 亚洲午夜av| 欧美福利视频在线| 蜜臀久久精品久久久用户群体| 日韩www.| 色老头一区二区三区| 国产又黄又粗视频| 狠狠综合久久av一区二区蜜桃| 欧美精品一区二区三区蜜桃视频| 人妻巨大乳一二三区| 精品91福利视频| 制服丝袜av成人在线看| 午夜av中文字幕| 91麻豆精品国产综合久久久| 欧美日韩一区不卡| 日韩在线一区视频| 亚洲欧洲二区| 日韩免费高清av| 日韩高清一二三区| julia中文字幕一区二区99在线| 欧美mv日韩mv国产网站app| 日本一区二区三区在线免费观看| 国产视频一区二区在线播放| 日韩午夜中文字幕| 69xxx免费视频| 里番精品3d一二三区| 日韩av中文在线| 一区二区精品免费| 大胆日韩av| 久久av资源网站| 久久免费视频6| 欧美亚洲一区| 国产精品黄色av| 97人妻精品一区二区三区| 国产一区欧美一区| 懂色一区二区三区av片| 手机看片福利在线观看| 久久嫩草精品久久久精品一| 日韩欧美一区二区在线观看 | 久久91超碰青草是什么| 日本熟伦人妇xxxx| 销魂美女一区二区三区视频在线| 国产精品69av| www.国产麻豆| 久久久美女毛片| 国产精品jizz在线观看老狼| 密臀av在线| 色菇凉天天综合网| 992kp免费看片| 日韩a级大片| 中文字幕精品av| 国产无遮挡又黄又爽在线观看| 天堂一区二区在线| 91成人免费视频| 免费在线黄色影片| 亚洲精品中文在线| 99蜜桃臀久久久欧美精品网站| 欧美激情不卡| 亚洲精品久久久久久久久久久久| 五月婷六月丁香| 国户精品久久久久久久久久久不卡| 日韩av免费网站| 国产精选久久久| 久久久久久久久伊人| 992tv快乐视频| www成人在线视频| 精品美女在线观看| 黄色录像一级片| 六月丁香综合| 国产精品二区在线观看| 一区二区三区视频在线观看视频| 婷婷丁香激情综合| 久久精品一卡二卡| 不卡日本视频| 欧美壮男野外gaytube| 性色av蜜臀av| 国产精品电影一区二区三区| 亚洲精品无码久久久久久| 视频一区日韩| 日韩在线精品一区| 日韩欧美大片在线观看| 国产精品一区二区三区乱码| 视频一区二区在线观看| 无遮挡爽大片在线观看视频| 欧美成人精品3d动漫h| 国产不卡在线观看视频| 免费视频一区| 精品网站在线看| 91超碰在线播放| 精品国产髙清在线看国产毛片| 亚洲综合第一区| 日韩精品一二三四| 欧美连裤袜在线视频| 麻豆免费版在线观看| 亚洲а∨天堂久久精品9966 | 国产永久免费高清在线观看 | 在线观看国产精品入口男同| 久久精品视频一区二区| 中文字幕日本最新乱码视频| 999在线精品| 欧美激情成人在线视频| 精品国产无码一区二区| 亚洲精品日韩综合观看成人91| 91视频这里只有精品| 国产精品久久久久一区二区三区厕所| 国产精品一区二区久久精品 | 欧美激情中文字幕在线| 亚洲va欧美va| 亚洲国产精品麻豆| 国产xxxxxxxxx| 性久久久久久| 日本一区二区三不卡| 97精品国产99久久久久久免费| 精品亚洲一区二区三区在线观看| 五月天综合激情网| 久久先锋资源网| 久久久国产欧美| 久久五月天小说| 亚洲自拍偷拍色图| 色呦呦在线视频| 亚洲精品国产电影| 日韩免费av网站| 中文字幕一区二区三区乱码在线| 一区二区久久精品| 极品尤物久久久av免费看| 国产一区免费在线观看| 欧美电影网址| 日韩在线观看你懂的| 亚洲第一页综合| 午夜精品久久久久久久| 国产精品一二三区在线观看| 久色婷婷小香蕉久久| 日韩不卡视频一区二区| 精品精品国产毛片在线看| 国产91免费看片| 成人在线视频亚洲| 亚洲精品国产福利| 亚洲天堂免费av| 亚洲二区在线视频| a级片在线观看| 国产成人精品一区二区三区四区| 日韩av在线第一页| 成人av国产| 国产伦精品一区二区三区视频孕妇| 亚洲黄色中文字幕| www国产精品com| 神宫寺奈绪一区二区三区| 欧美中文字幕一区| 国产一级二级毛片| 国产精品污污网站在线观看| 韩国黄色一级片| 日韩av在线播放中文字幕| av久久久久久| 国产一区二区三区电影在线观看| 91精品一区二区| 欧美男女交配| 欧美日韩国产91| av在线天堂| 亚洲精品一区二区三区在线观看| 黄色一级视频免费看| 亚洲图片一区二区| 青青青手机在线视频| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 国产精品视频二区三区| 日韩欧美电影一二三| 亚洲av无码精品一区二区| 一区二区三区高清在线| 337人体粉嫩噜噜噜| 99精品热视频| 青青草精品在线| 免费一级欧美片在线观看| 毛片在线视频播放| 欧美日韩亚洲一区| 一区二区精品在线| 欧美猛男同性videos| 国产99午夜精品一区二区三区 | 一本色道久久综合亚洲精品图片| 国产精品一区二区视频| 美女网站色免费| 视频在线观看91| 精品久久久久久久久久中文字幕| 欧美在线亚洲综合一区| 亚洲一区二区在线免费观看| 最新亚洲精品| 久久另类ts人妖一区二区| gogo人体一区| 懂色一区二区三区av片| 香蕉成人app| 亚洲资源在线看| 国产午夜久久av| 亚洲在线免费视频| 亚洲综合资源| 91久久国产婷婷一区二区| 国产成人午夜性a一级毛片| 国产a级全部精品| 亚洲欧美韩国| 国产999在线观看| 美女100%一区| 国产精品www| 成人看片在线观看| 国产精品视频精品| 国产在视频一区二区三区吞精| 国产成人精品一区二区| 怡红院成人在线| 国产精品劲爆视频| av久久网站| 成人黄色生活片| 91精品一区| 成人欧美一区二区三区在线观看| 欧美高清hd| 国产精品成人观看视频免费| 成人性生交大片免费看中文视频| 国产伦精品一区二区三| 青青草原在线亚洲| 免费观看成人在线| 欧美人妖在线| 亚洲一区在线直播| 亚洲老妇激情| 欧美乱做爰xxxⅹ久久久| 国内精品亚洲| 免费无码国产v片在线观看| 久久久久国内| 亚洲一级片免费| 国产剧情在线观看一区二区 | 久久这里都是精品| 国产精品国产三级国产专业不 | 最新中文字幕亚洲| 国产一区久久精品| 欧美激情亚洲一区| 在线中文字幕播放| 国产美女精彩久久| 久久久久久久久久久久电影| 精品免费国产| 第一会所亚洲原创| www.夜夜爱| 久久不射2019中文字幕| 国产原创精品在线| 国产成人av一区二区三区在线 | 久久综合伊人77777麻豆最新章节| 美国三级日本三级久久99| 佐山爱在线视频| 久久综合色鬼综合色| 亚洲少妇xxx| 精品久久久国产精品999| 中文字幕+乱码+中文| 欧美变态tickling挠脚心| 欧美日韩激情视频一区二区三区| 精品激情国产视频| 国产污视频在线播放| 国产中文字幕亚洲| 老牛精品亚洲成av人片| 在线观看免费91| 野花国产精品入口| 污污视频网站在线| 久久九九久精品国产免费直播| 男人的天堂久久久| 日韩欧美中文字幕在线播放| 99国产精品99| 国产一区二区黄| 黑人另类精品××××性爽| 国产精品吴梦梦| 日本午夜精品| 美女黄色免费看| 看国产成人h片视频| 亚洲av无码一区二区二三区| 尤物av一区二区| 亚洲香蕉在线视频| 日韩电影中文字幕一区| 羞羞的视频在线观看| 国产精品视频一区二区三区四| 久久a级毛片毛片免费观看| 久久免费看毛片| 首页国产欧美久久| a级片在线观看视频| 亚洲激情图片qvod| 在线播放国产一区| 国产亚洲精品久久久久久牛牛| 9999精品成人免费毛片在线看| 91探花福利精品国产自产在线| 欧美日韩在线二区| 美女福利视频在线| 99国产欧美另类久久久精品| 亚洲精品在线观看av| 欧美一区二区三区喷汁尤物| av在线播放av| 国产成人av在线| 亚洲尤物av| 国产网站免费在线观看| 成人免费的视频| 18精品爽视频在线观看| 日韩视频永久免费| 国产三级在线播放| 成人午夜黄色影院| 99久久婷婷| 在线一区二区不卡| 成人免费在线视频| 97在线视频人妻无码| 精品国产一区二区三区久久久狼| 久久天堂av| 五月天亚洲综合情| 麻豆免费精品视频| 精品一区二区在线观看视频| 欧美日韩性生活| 日本高清在线观看wwwww色| 国产欧美一区二区三区久久人妖| 精品九九在线| 奇米视频888| 亚洲日本韩国一区| 性欧美一区二区三区| 久久久久久久999| 老司机精品视频在线播放| 久久久一本二本三本| 国产日韩影视精品| 中文字幕+乱码+中文乱码91| 久久天天躁狠狠躁老女人| 精品一区二区三区在线观看视频| 99亚洲国产精品| youjizz久久| 精品国产乱子伦| 色婷婷av一区二区三区久久| 国产精品麻豆| 国产精品久久久久久久久电影网| aaa亚洲精品| 婷婷激情五月综合| 最新国产精品拍自在线播放| 亚洲三区欧美一区国产二区| 男女激情无遮挡| 中文字幕乱码一区二区免费| 97在线播放免费观看| 国内自拍欧美激情| 精品av一区二区| 超碰中文字幕在线观看| 亚洲国产精品久久久久秋霞影院| 欧洲一区av| 91精品久久久久久久久青青| 国模吧视频一区| 久久视频精品在线观看| 91精品国产高清一区二区三区| 久草在线中文最新视频| 日本黑人久久| 国产成人午夜电影网| 中文字幕在线看人| 久久亚洲精品一区| 亚洲人成网站77777在线观看| 99sesese| 精品久久久久久亚洲精品| 日本在线视频网| 久久精品99久久| 精品一区二区免费视频| 特一级黄色大片| 久久久精品国产一区二区| 五月国产精品| 手机av在线网站| 日本乱人伦一区| 久久免费电影| 在线视频不卡国产| 久久久久久毛片|