日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【JVM性能调优】jstack和线程dump分析

發布時間:2024/4/14 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【JVM性能调优】jstack和线程dump分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


一、幾個概念:
1、jstack命令的語法格式:jstack <pid>,可用于查看java進程id。

2、Dump文件:Dump文件是進程的內存鏡像。可以把程序的執行狀態通過調試器保存到dump文件中。Dump文件是用來給驅動程序編寫人員調試驅動程序用的,這種文件必須用專門的工具軟件打開,比如使用Windbg。


在Windbg中可以通過.dump命令保存進程的dump文件。比如下面的命令把當前進程的鏡像保存為c:\testdump.dmp文件:.dump /ma c:\testdump.dmp。

其中、ma參數表示dump文件應該包含進程的完整信息,包括整個用戶態的內存,這樣dump文件尺寸會比較大,信息非常全面。如果不是用、ma參數,保存下來的dump文件只包含了部分重要資料,比如寄存器和線程棧空間,文件尺寸會比較小,無法分析所有的數據。


3、java線程Dump:線程dump是非常有用的診斷java應用問題的工具,每一個java虛擬機都有及時生成顯示所有線程在某一點狀態的線程dump的能力。雖然各個java虛擬機線程dump打印輸出格式上略微有一些不同,但是線程dump出來的信息包含線程基本信息;線程的運行狀態、標識和調用的堆棧;調用的堆棧包含完整的類名,所執行的方法,如果可能的話還有源代碼的行數。

JVM中的許多問題都可以使用線程dump文件來進行診斷,其中比較典型的包括線程阻塞,CPU使用率過高,JVM Crash,堆內存不足和類裝載等問題。

一般情況下,通過jstack輸出的線程信息主要包括:jvm自身線程、用戶線程等。其中jvm線程會在jvm啟動時就會存在。對于用戶線程則是在用戶訪問時才會生成。

#jstack PID


或者可以使用一下命令將線程信息存入文件中:#jstack -l pid > jstack.log

其中標注daemon字樣的是后臺線程。以上的用戶線程中包括:

1、線程的一些基本信息:名稱、優先級及id
2、線程狀態:waiting on condition等
3、線程的調用棧
4、線程鎖住的資源:locked<0x3f63d600>


二、Monitor(監視器)
??在多線程的java程序中,實現線程之間的同步,就要說說Monitor。Monitor是java中用以實現線程之間的互斥與協作的主要手段,它可以看成是對象或者Class的鎖。每一個對象都有,也僅有一個Monitor。下面這個圖描述了線程和Monitor之間的關系,以及線程的狀態轉換圖:

1、進入區(Entry Set):表示線程通過synchronized要求獲取對象的鎖。如果對象未被鎖住,則進入擁有者;否則在進入區等待。一旦對象鎖被其他線程釋放,立即參與競爭。
2、擁有者(The Owner):表示某一線程成功競爭到對象鎖。
3、等待區(Wait Set):表示線程通過對象的wait方法釋放對象的鎖,并在等待區等待被喚醒。

??從圖中可以看出,一個 Monitor在某個時刻,只能被一個線程擁有,該線程就是 “Active Thread”,而其它線程都是 “Waiting Thread”,分別在兩個隊列 “ Entry Set”和 “Wait Set”里面等候。在 “Entry Set”中等待的線程狀態是 “Waiting for monitor entry”,而在“Wait Set”中等待的線程狀態是 “in Object.wait()”。 先看 “Entry Set”里面的線程。我們稱被 synchronized保護起來的代碼段為臨界區。當一個線程申請進入臨界區時,它就進入了 “Entry Set”隊列。對應的 code就像:

synchronized(obj){…… }

三、調用修飾:
??表示線程在方法調用時額外的重要操作。線程dump分析的重要信息。修飾上方的方法調用。

1、locked<地址>目標:使用synchronized申請對象鎖成功,監視器的擁有者;
2、waiting to lock<地址>目標:使用synchronized申請對象鎖未成功,在進入區等待;
3、waiting on<地址>目標:使用synchronized申請對象鎖成功后,調用了wait方法,進入對象的等待區等待。在調用棧頂出線,線程狀態為WAITING或TIMED_WAITING;
4、parking to wait for<地址>目標:park是基本的線程阻塞原語,不通過監視器在對象上阻塞。隨concurrent包出現的新的機制,與synchronized體系不同;

四、線程狀態
??想要通過jstack命令來分析線程的情況的話,首先要知道線程都有哪些狀態,下面這些狀態是我們使用jstack命令查看線程堆棧信息時可能會看到的線程的幾種狀態:

1、NEW,未啟動的。不會出現在Dump中。
2、RUNNABLE,在虛擬機內執行的。
3、BLOCKED,受阻塞并等待監視器鎖。
4、WATING,無限期等待另一個線程執行特定操作。
5、TIMED_WATING,有時限的等待另一個線程的特定操作。
6、TERMINATED,已退出的。

五、線程動作:
線程狀態產生的原因:

1、runnable:狀態一般為RUNNABLE,表示線程具備所有運行條件,在運行隊列中準備操作系統的調度,或者正在運行。
2、in Object.wait():等待區等待,狀態為WAITING或TIMED_WAITING。
3、waiting for monitor entry:進入區等待,狀態為BLOCKED。
4、waiting on condition:等待去等待,被park。
5、sleeping:休眠的線程,調用了Thread.sleep()。

??Wait on condition 該狀態出現在線程等待某個條件的發生。具體是什么原因,可以結合 stacktrace來分析。 最常見的情況就是線程處于sleep狀態,等待被喚醒。 常見的情況還有等待網絡IO:在java引入nio之前,對于每個網絡連接,都有一個對應的線程來處理網絡的讀寫操作,即使沒有可讀寫的數據,線程仍然阻塞在讀寫操作上,這樣有可能造成資源浪費,而且給操作系統的線程調度也帶來壓力。
??在 NIO里采用了新的機制,編寫的服務器程序的性能和可擴展性都得到提高。 正等待網絡讀寫,這可能是一個網絡瓶頸的征兆。因為網絡阻塞導致線程無法執行。一種情況是網絡非常忙,幾 乎消耗了所有的帶寬,仍然有大量數據等待網絡讀 寫;另一種情況也可能是網絡空閑,但由于路由等問題,導致包無法正常的到達。所以要結合系統的一些性能觀察工具來綜合分析,比如 netstat統計單位時間的發送包的數目,如果很明顯超過了所在網絡帶寬的限制 ; 觀察 cpu的利用率,如果系統態的 CPU時間,相對于用戶態的 CPU時間比例較高;如果程序運行在 Solaris 10平臺上,可以用 dtrace工具看系統調用的情況,如果觀察到 read/write的系統調用的次數或者運行時間遙遙領先;這些都指向由于網絡帶寬所限導致的網絡瓶頸。


六、線程分析
1. JVM 線程
??在線程中,有一些 JVM內部的后臺線程,來執行譬如垃圾回收,或者低內存的檢測等等任務,這些線程往往在 JVM初始化的時候就存在,如下所示:

1. "Low Memory Detector" daemon prio=10 tid=0x081465f8 nid=0x7 runnable [0x00000000..0x00000000] 2. "CompilerThread0" daemon prio=10 tid=0x08143c58 nid=0x6 waiting on condition [0x00000000..0xfb5fd798] 3. "Signal Dispatcher" daemon prio=10 tid=0x08142f08 nid=0x5 waiting on condition [0x00000000..0x00000000] 4. "Finalizer" daemon prio=10 tid=0x08137ca0 nid=0x4 in Object.wait() [0xfbeed000..0xfbeeddb8] 5. 6. at java.lang.Object.wait(Native Method) 7. 8. - waiting on <0xef600848> (a java.lang.ref.ReferenceQueue$Lock) 9. 10. at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116) 11. 12. - locked <0xef600848> (a java.lang.ref.ReferenceQueue$Lock) 13. 14. at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132) 15. 16. at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) 17. 18. "Reference Handler" daemon prio=10 tid=0x081370f0 nid=0x3 in Object.wait() [0xfbf4a000..0xfbf4aa38] 19. 20. at java.lang.Object.wait(Native Method) 21. 22. - waiting on <0xef600758> (a java.lang.ref.Reference$Lock) 23. 24. at java.lang.Object.wait(Object.java:474) 25. 26. at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116) 27. 28. - locked <0xef600758> (a java.lang.ref.Reference$Lock) 29. 30. "VM Thread" prio=10 tid=0x08134878 nid=0x2 runnable 31. 32. "VM Periodic Task Thread" prio=10 tid=0x08147768 nid=0x8 waiting on condition</span>

我們更多的是要觀察用戶級別的線程,如下所示:

1. "Thread-1" prio=10 tid=0x08223860 nid=0xa waiting on condition [0xef47a000..0xef47ac38] 2. 3. at java.lang.Thread.sleep(Native Method) 4. 5. at testthread.MySleepingThread.method2(MySleepingThread.java:53) 6. 7. - locked <0xef63d600> (a testthread.MySleepingThread) 8. 9. at testthread.MySleepingThread.run(MySleepingThread.java:35) 10. 11. at java.lang.Thread.run(Thread.java:595) </span>

我們能看到:
* 線程的狀態: waiting on condition
* 線程的調用棧
* 線程的當前鎖住的資源: <0xef63d600>


2. 線程的狀態分析
??正如我們剛看到的那樣,線程的狀態是一個重要的指標,它會顯示在線程 Stacktrace的頭一行結尾的地方。那么線程常見的有哪些狀態呢?線程在什么樣的情況下會進入這種狀態呢?我們能從中發現什么線索?


2.1 Runnable
??該狀態表示線程具備所有運行條件,在運行隊列中準備操作系統的調度,或者正在運行。

2.2 Wait on condition
??該狀態出現在線程等待某個條件的發生。具體是什么原因,可以結合 stacktrace來分析。最常見的情況是線程在等待網絡的讀寫,比如當網絡數據沒有準備好讀時,線程處于這種等待狀態,而一旦有數據準備好讀之后,線程會重新激活,讀取并處理數據。在 Java引入 NewIO之前,對于每個網絡連接,都有一個對應的線程來處理網絡的讀寫操作,即使沒有可讀寫的數據,線程仍然阻塞在讀寫操作上,這樣有可能造成資源浪費,而且給操作系統的線程調度也帶來壓力。在 NewIO里采用了新的機制,編寫的服務器程序的性能和可擴展性都得到提高。
??如果發現有大量的線程都在處在 Wait on condition,從線程 stack看, 正等待網絡讀寫,這可能是一個網絡瓶頸的征兆。因為網絡阻塞導致線程無法執行。一種情況是網絡非常忙,幾 乎消耗了所有的帶寬,仍然有大量數據等待網絡讀 寫;另一種情況也可能是網絡空閑,但由于路由等問題,導致包無法正常的到達。所以要結合系統的一些性能觀察工具來綜合分析,比如 netstat統計單位時間的發送包的數目,如果很明顯超過了所在網絡帶寬的限制 ; 觀察 cpu的利用率,如果系統態的 CPU時間,相對于用戶態的 CPU時間比例較高;如果程序運行在 Solaris 10平臺上,可以用 dtrace工具看系統調用的情況,如果觀察到 read/write的系統調用的次數或者運行時間遙遙領先;這些都指向由于網絡帶寬所限導致的網絡瓶頸。另外一種出現 Wait on condition的常見情況是該線程在 sleep,等待 sleep的時間到了時候,將被喚醒。

2.3 Waiting for monitor entry 和 in Object.wait()
??在多線程的 JAVA程序中,實現線程之間的同步,就要說說 Monitor。 Monitor是 Java中用以實現線程之間的互斥與協作的主要手段,它可以看成是對象或者 Class的鎖。每一個對象都有,也僅有一個 monitor。每個 Monitor在某個時刻,只能被一個線程擁有,該線程就是 “Active Thread”,而其它線程都是 “Waiting Thread”,分別在兩個隊列 “ Entry Set”和 “Wait Set”里面等候。在 “Entry Set”中等待的線程狀態是 “Waiting for monitor entry”,而在 “Wait Set”中等待的線程狀態是 “in Object.wait()”。
先看 “Entry Set”里面的線程。我們稱被 synchronized保護起來的代碼段為臨界區。當一個線程申請進入臨界區時,它就進入了 “Entry Set”隊列。對應的 code就像:

synchronized(obj) { .........}


這時有兩種可能性:
1、該 monitor不被其它線程擁有, Entry Set里面也沒有其它等待線程。本線程即成為相應類或者對象的 Monitor的 Owner,執行臨界區的代碼
2、該 monitor被其它線程擁有,本線程在 Entry Set隊列中等待。


??在第一種情況下,線程將處于 “Runnable”的狀態,而第二種情況下,線程 DUMP會顯示處于 “waiting for monitor entry”。如下所示:

1. "Thread-0" prio=10 tid=0x08222eb0 nid=0x9 waiting for monitor entry [0xf927b000..0xf927bdb8] 2. 3. at testthread.WaitThread.run(WaitThread.java:39) 4. 5. - waiting to lock <0xef63bf08> (a java.lang.Object) 6. 7. - locked <0xef63beb8> (a java.util.ArrayList) 8. 9. at java.lang.Thread.run(Thread.java:595)

??臨界區的設置,是為了保證其內部的代碼執行的原子性和完整性。但是因為臨界區在任何時間只允許線程串行通過,這 和我們多線程的程序的初衷是相反的。 如果在多線程的程序中,大量使用 synchronized,或者不適當的使用了它,會造成大量線程在臨界區的入口等待,造成系統的性能大幅下降。如果在線程 DUMP中發現了這個情況,應該審查源碼,改進程序。
??現在我們再來看現在線程為什么會進入 “Wait Set”。當線程獲得了 Monitor,進入了臨界區之后,如果發現線程繼續運行的條件沒有滿足,它則調用對象(一般就是被 synchronized 的對象)的 wait() 方法,放棄了 Monitor,進入 “Wait Set”隊列。只有當別的線程在該對象上調用了 notify() 或者 notifyAll() , “ Wait Set”隊列中線程才得到機會去競爭,但是只有一個線程獲得對象的 Monitor,恢復到運行態。在 “Wait Set”中的線程, DUMP中表現為: in Object.wait(),類似于:

1. "Thread-1" prio=10 tid=0x08223250 nid=0xa in Object.wait() [0xef47a000..0xef47aa38] 2. 3. at java.lang.Object.wait(Native Method) 4. 5. - waiting on <0xef63beb8> (a java.util.ArrayList) 6. 7. at java.lang.Object.wait(Object.java:474) 8. 9. at testthread.MyWaitThread.run(MyWaitThread.java:40) 10. 11. - locked <0xef63beb8> (a java.util.ArrayList) 12. 13. at java.lang.Thread.run(Thread.java:595)

仔細觀察上面的 DUMP信息,你會發現它有以下兩行:
- locked <0xef63beb8> (a java.util.ArrayList)
- waiting on <0xef63beb8> (a java.util.ArrayList)
??這里需要解釋一下,為什么先 lock了這個對象,然后又 waiting on同一個對象呢?讓我們看看這個線程對應的代碼:

1. synchronized(obj) { 2. ......... 3. obj.wait(); 4. ......... 5. }

??線程的執行中,先用 synchronized 獲得了這個對象的 Monitor(對應于 locked <0xef63beb8> )。當執行到 obj.wait(), 線程即放棄了 Monitor的所有權,進入 “wait set”隊列(對應于 waiting on <0xef63beb8> )。
??往往在你的程序中,會出現多個類似的線程,他們都有相似的 DUMP信息。這也可能是正常的。比如,在程序中,有多個服務線程,設計成從一個隊列里面讀取請求數據。這個隊列就是 lock以及 waiting on的對象。當隊列為空的時候,這些線程都會在這個隊列上等待,直到隊列有了數據,這些線程被 Notify,當然只有一個線程獲得了 lock,繼續執行,而其它線程繼續等待。

七. JDK 5.0 的 lock
??上面我們提到如果 synchronized和 monitor機制運用不當,可能會造成多線程程序的性能問題。在 JDK 5.0中,引入了 Lock機制,從而使開發者能更靈活的開發高性能的并發多線程程序,可以替代以往 JDK中的 synchronized和 Monitor的 機制。但是,要注意的是,因為 Lock類只是一個普通類, JVM無從得知 Lock對象的占用情況,所以在線程 DUMP中,也不會包含關于 Lock的信息, 關于死鎖等問題,就不如用 synchronized的編程方式容易識別。

八、使用實例
1、jstack pid

~$ jps -ml org.apache.catalina.startup.Bootstrap ~$ jstack 56612013-04-16 21:09:27 Full thread dump Java HotSpot(TM) Server VM (20.10-b01 mixed mode):"Attach Listener" daemon prio=10 tid=0x70e95400 nid=0x2265 waiting on condition [0x00000000] java.lang.Thread.State: RUNNABLE"http-bio-8080-exec-20" daemon prio=10 tid=0x08a35800 nid=0x1d42 waiting on condition [0x70997000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x766a27b8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399) at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:104) at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) at java.lang.Thread.run(Thread.java:662) ........

#jstack -l 4089 >1.txt,查看1.txt內容如下所示:

2014-03-14 10:47:04 Full thread dump Java HotSpot(TM) Client VM (20.45-b01 mixed mode, sharing):"Attach Listener" daemon prio=10 tid=0x08251400 nid=0x11bd runnable [0x00000000] java.lang.Thread.State: RUNNABLELocked ownable synchronizers: - None"DestroyJavaVM" prio=10 tid=0xb3a0a800 nid=0xffa waiting on condition [0x00000000] java.lang.Thread.State: RUNNABLELocked ownable synchronizers: - None"Query Listener" prio=10 tid=0xb3a09800 nid=0x1023 runnable [0xb3b72000] java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408) - locked <0x70a84430> (a java.net.SocksSocketImpl) at java.net.ServerSocket.implAccept(ServerSocket.java:462) at java.net.ServerSocket.accept(ServerSocket.java:430) at com.sun.tools.hat.internal.server.QueryListener.waitForRequests(QueryListener.java:76) at com.sun.tools.hat.internal.server.QueryListener.run(QueryListener.java:65) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None"Low Memory Detector" daemon prio=10 tid=0x08220400 nid=0x1000 runnable [0x00000000] java.lang.Thread.State: RUNNABLELocked ownable synchronizers: - None"C1 CompilerThread0" daemon prio=10 tid=0x08214c00 nid=0xfff waiting on condition [0x00000000] java.lang.Thread.State: RUNNABLELocked ownable synchronizers: - None"Signal Dispatcher" daemon prio=10 tid=0x08213000 nid=0xffe runnable [0x00000000] java.lang.Thread.State: RUNNABLELocked ownable synchronizers: - None"Finalizer" daemon prio=10 tid=0x0820bc00 nid=0xffd in Object.wait() [0xb5075000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x7a2b6f50> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) - locked <0x7a2b6f50> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:171)Locked ownable synchronizers: - None"Reference Handler" daemon prio=10 tid=0x0820a400 nid=0xffc in Object.wait() [0xb50c7000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x7a2b6fe0> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:485) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116) - locked <0x7a2b6fe0> (a java.lang.ref.Reference$Lock)Locked ownable synchronizers: - None"VM Thread" prio=10 tid=0x08200000 nid=0xffb runnable"VM Periodic Task Thread" prio=10 tid=0x08222400 nid=0x1001 waiting on conditionJNI global references: 1317

??一般情況下,通過jstack輸出的線程信息主要包括:jvm自身線程、用戶線程等。其中jvm線程會在jvm啟動時就會存在。對于用戶線程則是在用戶訪問時才會生成。

2、jstack 查看線程具體在做什么,可看出哪些線程在長時間占用CPU,盡快定位問題和解決問題:JVM性能調優——使用jstack找出最耗CPU的java線程


九、遇到線程問題時如何分析
1、線程Dump的分析原則
??結合代碼閱讀的推理。需要線程Dump和源碼的相互推導和印證。造成Bug的根源往往丌會在調用棧上直接體現,一定格外注意線程當前調用之前的所有調用。
入手點
進入區等待

"d&a-3588" daemon waiting for monitor entry [0x000000006e5d5000] java.lang.Thread.State: BLOCKED (on object monitor) at com.jiuqi.dna.bap.authority.service.UserService$LoginHandler.handle() - waiting to lock <0x0000000602f38e90> (a java.lang.Object) at com.jiuqi.dna.bap.authority.service.UserService$LoginHandler.handle()

線程狀態BLOCKED,線程動作wait on monitor entry,調用修飾waiting to lock總是一起出現。表示在代碼級別已經存在沖突的調用。必然有問題的代碼,需要盡可能減少其發生。

同步塊阻塞
一個線程鎖住某對象,大量其他線程在該對象上等待。

"blocker" runnable java.lang.Thread.State: RUNNABLE at com.jiuqi.hcl.javadump.Blocker$1.run(Blocker.java:23) - locked <0x00000000eb8eff68> (a java.lang.Object) "blockee-11" waiting for monitor entry java.lang.Thread.State: BLOCKED (on object monitor) at com.jiuqi.hcl.javadump.Blocker$2.run(Blocker.java:41) - waiting to lock <0x00000000eb8eff68> (a java.lang.Object) "blockee-86" waiting for monitor entry java.lang.Thread.State: BLOCKED (on object monitor) at com.jiuqi.hcl.javadump.Blocker$2.run(Blocker.java:41) - waiting to lock <0x00000000eb8eff68> (a java.lang.Object)

持續運行的IO IO操作是可以以RUNNABLE狀態達成阻塞。例如:數據庫死鎖、網絡讀寫。 格外注意對IO線程的真實狀態的分析。 一般來說,被捕捉到RUNNABLE的IO調用,都是有問題的。
??以下堆棧顯示: 線程狀態為RUNNABLE。 調用棧在SocketInputStream或SocketImpl上,socketRead0等方法。 調用棧包含了jdbc相關的包。很可能發生了數據庫死鎖

"d&a-614" daemon prio=6 tid=0x0000000022f1f000 nid=0x37c8 runnable [0x0000000027cbd000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(Unknown Source) at oracle.net.ns.Packet.receive(Packet.java:240) at oracle.net.ns.DataPacket.receive(DataPacket.java:92) at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:172) at oracle.net.ns.NetInputStream.read(NetInputStream.java:117) at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1034) at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:588)

分線程調度的休眠
正常的線程池等待

"d&a-131" in Object.wait() java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at com.jiuqi.dna.core.impl.WorkingManager.getWorkToDo(WorkingManager.java:322) - locked <0x0000000313f656f8> (a com.jiuqi.dna.core.impl.WorkingThread) at com.jiuqi.dna.core.impl.WorkingThread.run(WorkingThread.java:40)


可疑的線程等待

"d&a-121" in Object.wait() java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:485) at com.jiuqi.dna.core.impl.AcquirableAccessor.exclusive() - locked <0x00000003011678d8> (a com.jiuqi.dna.core.impl.CacheGroup) at com.jiuqi.dna.core.impl.Transaction.lock()


入手點總結

wait on monitor entry: 被阻塞的,肯定有問題
runnable : 注意IO線程
in Object.wait(): 注意非線程池等待


2、死鎖分析
??學會了怎么使用jstack命令之后,我們就可以看看,如何使用jstack分析死鎖了,這也是我們一定要掌握的內容。 啥叫死鎖? 所謂死鎖: 是指兩個或兩個以上的進程在執行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。 說白了,我現在想吃雞蛋灌餅,桌子上放著雞蛋和餅,但是我和我的朋友同時分別拿起了雞蛋和病,我手里拿著雞蛋,但是我需要他手里的餅。他手里拿著餅,但是他想要我手里的雞蛋。就這樣,如果不能同時拿到雞蛋和餅,那我們就不能繼續做后面的工作(做雞蛋灌餅)。所以,這就造成了死鎖。 看一段死鎖的程序:

package javaCommand; public class JStackDemo { public static void main(String[] args) { Thread t1 = new Thread(new DeadLockclass(true));//建立一個線程 Thread t2 = new Thread(new DeadLockclass(false));//建立另一個線程 t1.start();//啟動一個線程 t2.start();//啟動另一個線程 } } class DeadLockclass implements Runnable { public boolean falg;// 控制線程 DeadLockclass(boolean falg) { this.falg = falg; } public void run() { /** * 如果falg的值為true則調用t1線程 */ if (falg) { while (true) { synchronized (Suo.o1) { System.out.println("o1 " + Thread.currentThread().getName()); synchronized (Suo.o2) { System.out.println("o2 " + Thread.currentThread().getName()); } } } } /** * 如果falg的值為false則調用t2線程 */ else { while (true) { synchronized (Suo.o2) { System.out.println("o2 " + Thread.currentThread().getName()); synchronized (Suo.o1) { System.out.println("o1 " + Thread.currentThread().getName()); } } } } } }class Suo { static Object o1 = new Object(); static Object o2 = new Object(); }


當我啟動該程序時,我們看一下控制臺:
??我們發現,程序只輸出了兩行內容,然后程序就不再打印其它的東西了,但是程序并沒有停止。這樣就產生了死鎖。 當線程1使用synchronized鎖住了o1的同時,線程2也是用synchronized鎖住了o2。當兩個線程都執行完第一個打印任務的時候,線程1想鎖住o2,線程2想鎖住o1。但是,線程1當前鎖著o1,線程2鎖著o2。所以兩個想成都無法繼續執行下去,就造成了死鎖。
??然后,我們使用jstack來看一下線程堆棧信息:

Found one Java-level deadlock:"Thread-1": waiting to lock monitor 0x00007f0134003ae8 (object 0x00000007d6aa2c98, a java.lang.Object), which is held by "Thread-0""Thread-0": waiting to lock monitor 0x00007f0134006168 (object 0x00000007d6aa2ca8, a java.lang.Object), which is held by "Thread-1"Java stack information for the threads listed above: =================================================== "Thread-1": at javaCommand.DeadLockclass.run(JStackDemo.java:40) - waiting to lock <0x00000007d6aa2c98> (a java.lang.Object) - locked <0x00000007d6aa2ca8> (a java.lang.Object) at java.lang.Thread.run(Thread.java:745) "Thread-0": at javaCommand.DeadLockclass.run(JStackDemo.java:27) - waiting to lock <0x00000007d6aa2ca8> (a java.lang.Object) - locked <0x00000007d6aa2c98> (a java.lang.Object) at java.lang.Thread.run(Thread.java:745)


??Found 1 deadlock.堆棧寫的很明顯,它告訴我們 Found one Java-level deadlock,然后指出造成死鎖的兩個線程的內容。然后,又通過 Java stack information for the threads listed above來顯示更詳細的死鎖的信息。 他說
Thread-1在想要執行第40行的時候,當前鎖住了資源<0x00000007d6aa2ca8>,但是他在等待資源<0x00000007d6aa2c98>Thread-0在想要執行第27行的時候,當前鎖住了資源<0x00000007d6aa2c98>,但是他在等待資源<0x00000007d6aa2ca8> 由于這兩個線程都持有資源,并且都需要對方的資源,所以造成了死鎖。 原因我們找到了,就可以具體問題具體分析,解決這個死鎖了。

3、熱鎖分析
??熱鎖,也往往是導致系統性能瓶頸的主要因素。其表現特征為,由于多個線程對臨界區,或者鎖的競爭,可能出現:
* 頻繁的線程的上下文切換:從操作系統對線程的調度來看,當 線程在等待資源而阻塞的時候,操作系統會將之切換出來,放到等待的隊列,當線程獲得資源之后,調度算法會將這個線程切換進去,放到執行隊列中。
* 大量的系統調用:因為線程的上下文切換,以及熱鎖的競爭,或 者臨界區的頻繁的進出,都可能導致大量的系統調用。
* 大部分 CPU開銷用在 “系統態 ”:線程上下文切換,和系統調用,都會導致 CPU在 “系統態 ”運行,換而言之,雖然系統很忙碌,但是 CPU用在 “用戶態 ”的比例較小,應用程序得不到充分的 CPU資源。
* 隨著 CPU數目的增多,系統的性能反而下降。因為 CPU數目多,同 時運行的線程就越多,可能就會造成更頻繁的線程上下文切換和系統態的 CPU開銷,從而導致更糟糕的性能。
??上面的描述,都是一個 scalability(可擴展性)很差的系統的表現。從整體的性能指標看,由于線程熱鎖的存在,程序的響應時間會變長,吞吐量會降低。
??那么,怎么去了解 “熱鎖 ”出現在什么地方呢?一個重要的方法還是結合操作系統的各種工具觀察系統資源使用狀況,以及收集 Java線程的 DUMP信息,看線程都阻塞在什么方法上,了解原因,才能找到對應的解決方法。
? ?我們曾經遇到過這樣的例子,程序運行時,出現了以上指出的各種現象,通過觀察操作系統的資源使用統計信息,以及線程 DUMP信息,確定了程序中熱鎖的存在,并發現大多數的線程狀態都是 Waiting for monitor entry或者 Wait on monitor,且是阻塞在壓縮和解壓縮的方法上。后來采用第三方的壓縮包 javalib替代 JDK自帶的壓縮包后,系統的性能提高了幾倍。


其他
??虛擬機執行Full GC時,會阻塞所有的用戶線程。因此,即時獲取到同步鎖的線程也有可能被阻塞。 在查看線程Dump時,首先查看內存使用情況。


jstack -m 會打印出JVM堆棧信息,涉及C、C++部分代碼,可能需要配合gdb命令來分析。

頻繁GC問題或內存溢出問題
一、使用jps查看線程ID
二、使用jstat -gc 3331 250 20 查看gc情況,一般比較關注PERM區的情況,查看GC的增長情況。
三、使用jstat -gccause:額外輸出上次GC原因
四、使用jmap -dump:format=b,file=heapDump 3331生成堆轉儲文件
五、使用jhat或者可視化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)分析堆情況。
六、結合代碼解決內存溢出或泄露問題。


死鎖問題
一、使用jps查看線程ID
二、使用jstack 3331:查看線程情況

總結

以上是生活随笔為你收集整理的【JVM性能调优】jstack和线程dump分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

五月婷婷综合在线 | 中文字幕av免费观看 | 欧美福利久久 | 黄色aa久久 | 国产高清精| 福利片视频区 | 91在线免费播放 | 99久热 | 久久一区二区三区日韩 | 中文字幕在线观看资源 | 日韩av午夜 | 久久精品亚洲综合专区 | 丝袜美腿在线播放 | 国产伦精品一区二区三区四区视频 | 日韩精品极品视频 | 91av视频| 婷婷在线看 | 手机色站| 国产只有精品 | 国产一区免费视频 | 在线观看黄网站 | 精品久久久久久久久久久久 | 四虎5151久久欧美毛片 | 国产精品综合久久久久 | 一区二区三区不卡在线 | 在线免费观看视频一区二区三区 | 欧美日韩国产一区二区三区 | 激情图片久久 | 久久爱资源网 | 中文字幕在线看视频国产中文版 | 亚洲精品 在线视频 | 97超碰在线资源 | 色av男人的天堂免费在线 | 久久精品www人人爽人人 | 国产在线观看,日本 | 日韩在线第一区 | 天堂va在线高清一区 | 日韩在线短视频 | 国产美女免费看 | 免费久久精品视频 | 色丁香久久 | 日韩视频在线不卡 | 国产专区日韩专区 | 懂色av懂色av粉嫩av分享吧 | 中文字幕免费在线 | 久久综合久久综合这里只有精品 | 人人讲| 成人av高清在线 | 精品久久久久久久久久久久久久久久久久 | 91麻豆国产福利在线观看 | 久草在线视频在线观看 | 国产成人在线免费观看 | 天堂av在线中文在线 | 亚洲人成精品久久久久 | 精品亚洲免费 | 亚洲一区久久久 | 波多野结衣视频一区 | 色资源在线观看 | 国产乱码精品一区二区蜜臀 | 国产日本在线播放 | 国内精品亚洲 | 国产精品美女久久久久久网站 | 午夜成人免费电影 | 亚洲影音先锋 | 91av小视频| 在线影院中文字幕 | 特黄特色特刺激视频免费播放 | 国产伦精品一区二区三区… | 男女激情网址 | 免费麻豆视频 | 亚洲综合成人在线 | 韩国av免费| 久草爱视频| 91精品国产欧美一区二区成人 | av黄色在线观看 | 成人黄色在线 | 美女久久久久久久久久久 | 国产裸体bbb视频 | 国产免费成人av | 亚洲精品在线播放视频 | 亚洲乱码中文字幕综合 | 免费看片在线观看 | www.夜色.com | 99久久精品久久亚洲精品 | 国产无遮挡猛进猛出免费软件 | av3级在线 | 午夜私人影院久久久久 | 日韩视频一区二区三区在线播放免费观看 | 一级免费观看 | 久久国产一区二区 | 911免费视频 | 日本午夜在线观看 | 成年美女黄网站色大片免费看 | 色视频网址 | 欧美一区二区三区在线看 | 在线观看日本高清mv视频 | 色偷偷av男人天堂 | 中文字幕在线看视频 | 伊人色**天天综合婷婷 | 免费瑟瑟网站 | 国产一区二区三区免费观看视频 | 免费一级片观看 | 91精品黄色 | 九九热精品视频在线播放 | 性色av免费观看 | 国产精品久久久久久电影 | 日本黄色片一区二区 | 日韩视频免费观看高清完整版在线 | 五月天激情视频在线观看 | 91免费在线看片 | 婷婷在线精品视频 | 一区在线免费观看 | 国产精品久久久久久一二三四五 | 一区二区三区日韩在线观看 | 99精品在线视频观看 | 国产精国产精品 | 美女福利视频 | 亚洲精品乱码 | 摸阴视频| 国产精品久久中文字幕 | 国产精品一区二区久久 | 18国产精品福利片久久婷 | 精品视频 | 亚洲黄色在线看 | 91人人爽久久涩噜噜噜 | 精品一区二区三区电影 | 色99视频| 成人免费中文字幕 | 在线免费观看麻豆视频 | 久久精品国产免费看久久精品 | 69精品视频在线观看 | 国产123av| 欧美精品国产精品 | 久久香蕉影视 | 波多野结衣电影一区二区三区 | 美女视频网站久久 | 久久精品久久久久久久 | 亚洲特级片 | 日本夜夜草视频网站 | 在线激情av电影 | 久草在线手机观看 | 国产视频精品视频 | 在线亚洲欧美日韩 | 免费在线观看的av网站 | 视频二区在线 | 99精品区 | 欧美日韩国产二区 | 国产视频一二三 | 成人av动漫在线观看 | 99久久精品免费看国产一区二区三区 | 午夜精品久久久久久久99婷婷 | 1024手机基地在线观看 | 欧美日韩视频在线观看一区二区 | 免费在线观看的av网站 | 91免费视频网站在线观看 | 欧美精品一区二区蜜臀亚洲 | 国产午夜精品免费一区二区三区视频 | 日韩精品欧美视频 | 国产午夜不卡 | 在线中文字幕视频 | 国产伦理一区 | 欧美另类sm图片 | 一区精品久久 | 岛国av在线 | www黄| 国产 视频 高清 免费 | 久久a v电影| 2024国产在线| 天天操夜夜操 | 99热官网 | 久久久福利视频 | 91大神在线看 | 国产精品国产三级在线专区 | 黄色影院在线免费观看 | 亚洲一区天堂 | 亚洲欧洲精品一区二区精品久久久 | 808电影| 成人影视免费 | 欧美日韩性视频在线 | 激情婷婷丁香 | 免费精品视频在线观看 | 欧美狠狠操| 欧美成人一区二区 | 久久久久久久久久影院 | 伊人天天狠天天添日日拍 | 日本99久久| 91精品啪在线观看国产 | 人人精品久久 | 三上悠亚在线免费 | 国产精品自产拍在线观看中文 | 国产高清在线免费视频 | 一区二区伦理电影 | 国产午夜精品一区二区三区四区 | 麻豆精品视频在线 | 国产91丝袜在线播放动漫 | 日韩大片免费观看 | 人人看人人 | 免费av在线播放 | 91精品国产麻豆国产自产影视 | 一区二区三区免费在线观看视频 | 欧美成人黄色片 | 国产精品美女久久久久久免费 | 国产一级91| 97在线免费视频 | 成人黄色一级视频 | 国产精品一区二区三区视频免费 | 极品美女被弄高潮视频网站 | 欧美日韩中文字幕视频 | 日韩av不卡在线 | 99精品国产在热久久下载 | 涩涩网站在线看 | 婷婷色网| 精品一区二区免费视频 | 99中文视频在线 | 亚洲黄色网络 | 伊人电影在线观看 | 日韩欧美网址 | 国产日韩精品在线观看 | 天天插天天狠 | 久久久国产一区二区三区四区小说 | 国产精品免费在线视频 | 久久不见久久见免费影院 | 天天草天天色 | 久久精品3 | 天天操夜夜曰 | 91麻豆免费版| 日韩精品1区2区 | 9免费视频 | 国产精品久久电影观看 | 欧美激情综合色综合啪啪五月 | 日韩大片在线 | 免费一级片视频 | 天天干天天弄 | 一区二区不卡 | 午夜黄色一级片 | 国产午夜精品一区二区三区嫩草 | 午夜av免费在线观看 | 丁香婷婷综合色啪 | 99久久影院 | 美女网站视频免费黄 | 亚洲天天摸日日摸天天欢 | 精品国产一区二区三区在线观看 | 99久国产 | a v在线观看 | 日韩动漫免费观看高清完整版在线观看 | 久久av免费 | 国产伦理一区二区 | 欧美日韩亚洲在线观看 | 成 人 黄 色视频免费播放 | 超碰在线观看99 | 日韩久久午夜一级啪啪 | 免费看黄色大全 | 国产一级免费视频 | 天天躁天天躁天天躁婷 | 91av视频在线免费观看 | 欧美日本在线视频 | 日韩欧美视频免费在线观看 | 国产又粗又猛又色又黄视频 | 福利网址在线观看 | 欧美一区二区视频97 | www.婷婷色| 亚洲国产精品久久久久 | 五月天综合网站 | 欧美污在线观看 | 天天草天天干天天 | 91视频3p| 手机看片久久 | 亚洲三级黄色 | av免费片 | 在线亚州 | 九9热这里真品2 | 亚洲精品网页 | 久久经典视频 | 亚洲精品国偷拍自产在线观看 | 久久精品久久久久电影 | 西西人体4444www高清视频 | 亚洲 av网站 | 五月婷亚洲| 久久国产高清视频 | 国产美女被啪进深处喷白浆视频 | 亚洲三级av | 亚洲精品乱码久久久久久写真 | 色www精品视频在线观看 | 97操碰 | 蜜臀久久99精品久久久无需会员 | 亚洲精品国偷拍自产在线观看蜜桃 | 69国产盗摄一区二区三区五区 | 91视频在线播放视频 | 日韩成人精品一区二区三区 | 国产精品美 | av综合网址 | 五月天婷亚洲天综合网精品偷 | 狠狠躁18三区二区一区ai明星 | 精品日本视频 | 欧美影片| 精品视频中文字幕 | 伊人超碰在线 | 国产一区二区三区免费在线 | 欧美亚洲三级 | 在线观看一 | 精品女同一区二区三区在线观看 | 一区二区三区在线看 | 岛国av在线 | 成人中文字幕在线 | av中文字幕不卡 | 超碰精品在线 | 中文字幕在线观看视频一区二区三区 | 午夜视频在线观看一区二区 | 黄色免费网 | 麻豆视频91 | 五月天亚洲综合小说网 | 手机看片久久 | 九九免费在线观看 | 日本黄色大片免费 | 日韩最新在线视频 | 综合亚洲视频 | 99999精品 | 欧美日韩一区二区三区在线观看视频 | 999久久久久 | 亚洲国产精品激情在线观看 | 天天草天天插 | 久久夜色精品国产欧美乱 | 国产精品久久久久久久久久99 | 最近日本字幕mv免费观看在线 | 久久久免费少妇 | 在线观看免费黄色 | 亚洲视频久久 | 女人18毛片a级毛片一区二区 | 国产麻豆果冻传媒在线观看 | 国产精品女同一区二区三区久久夜 | 爱爱av网| 国产免费不卡 | 国内精品久久影院 | 久久精品视频18 | 久久dvd| 久久久综合香蕉尹人综合网 | 天天色综合天天 | 91精品在线播放 | 国产日韩精品在线 | 日日干夜夜骑 | 国产精品一区电影 | 91免费版在线 | 日韩综合色 | 亚洲综合视频在线 | 香蕉视频在线网站 | 亚洲高清精品在线 | 91久久人澡人人添人人爽欧美 | 丝袜足交在线 | 亚洲资源网 | 日本三级不卡视频 | 粉嫩av一区二区三区四区五区 | 中文字幕有码在线播放 | 日韩精品不卡 | 久久久亚洲影院 | 国产在线观看黄 | 久久久久久久久久久高潮一区二区 | 欧美色一色 | 久久精品中文字幕 | 亚洲蜜桃在线 | 色在线中文字幕 | 午夜天天操 | 天天想夜夜操 | 国产精品99久久久久人中文网介绍 | av中文字幕在线播放 | 四虎在线观看 | 玖玖色在线观看 | 成人久久影院 | 91资源在线免费观看 | 深夜免费网站 | 91人人揉日日捏人人看 | 久久精品久久久久电影 | 日韩精品视频在线观看免费 | 亚洲v欧美v国产v在线观看 | 欧美一区二区精美视频 | 深爱开心激情网 | 欧美激情一区不卡 | 五月天最新网址 | 国产中文字幕一区 | 成人影片在线免费观看 | 蜜臀一区二区三区精品免费视频 | 日韩av影视 | 亚洲一级电影在线观看 | 久久久免费毛片 | 最近日本中文字幕a | 91香蕉视频在线下载 | 婷婷日日 | 男女激情片在线观看 | 国产午夜精品一区二区三区 | 在线免费av电影 | 在线观看免费色 | 97精品超碰一区二区三区 | 久久久在线观看 | 97人人超碰在线 | 亚洲精品观看 | 国产99久久精品一区二区永久免费 | 国产视频精品免费播放 | 五月婷婷丁香综合 | 国产资源免费在线观看 | 日韩激情一二三区 | 欧美人操人 | 国产涩图| 久久久久黄 | 最近的中文字幕大全免费版 | 成人黄色电影免费观看 | 69精品久久久| 成人动漫一区二区三区 | 国产精品s色 | 人人爽久久涩噜噜噜网站 | 国产中年夫妇高潮精品视频 | 91尤物国产尤物福利在线播放 | 五月婷婷av在线 | 精品国产一区二区三区噜噜噜 | zzijzzij亚洲日本少妇熟睡 | 天天插综合网 | 97视频在线免费观看 | 操老逼免费视频 | 国产尤物一区二区三区 | 夜夜高潮夜夜爽国产伦精品 | 欧美日韩在线观看视频 | 91在线免费观看国产 | 91av短视频| 人人澡视频 | 久草在线免费电影 | 97碰碰视频 | 日产乱码一二三区别在线 | 在线欧美a | 国产精品成人久久久 | 日韩伦理片一区二区三区 | 综合国产视频 | 波多野结衣久久精品 | 在线观看亚洲国产精品 | 香蕉精品视频在线观看 | 国产福利精品在线观看 | 欧美伦理一区二区 | 久一久久| 欧美日韩国产一区二区三区在线观看 | 狠狠激情中文字幕 | 91mv.cool在线观看 | 91麻豆精品 | 日韩电影一区二区在线观看 | 亚洲视频99| 免费视频你懂得 | av免费播放 | 天天操天天吃 | 97电影手机版 | 91色网址 | 国产午夜小视频 | 在线 国产 亚洲 欧美 | 国产又粗又猛又色又黄网站 | 国产一级视频在线 | 亚洲午夜精品一区二区三区电影院 | 亚洲高清不卡av | 精品字幕 | 日本在线观看黄色 | 探花视频在线观看免费 | 国产日韩av在线 | 亚洲六月丁香色婷婷综合久久 | 成人av资源站 | 97超碰在线免费观看 | 国产精品嫩草影院123 | av在线超碰 | 玖玖国产精品视频 | 国内久久| 免费在线观看a v | 日韩精品一区二区免费视频 | 精品国产精品久久一区免费式 | 少妇搡bbbb搡bbb搡aa | 91av在线免费观看 | 97精品超碰一区二区三区 | 亚洲精品在线网站 | 麻豆视频成人 | 亚洲人成在线电影 | 九九九免费视频 | 亚洲综合涩 | 狠狠干 狠狠操 | 色综合婷婷久久 | 欧美性做爰猛烈叫床潮 | 视频一区在线免费观看 | 欧美韩日精品 | 国产视频网站在线观看 | av在线官网| 国产精品福利视频 | 91大神视频网站 | 色爱区综合激月婷婷 | 国产精品亚洲人在线观看 | 亚洲国产精品久久久久 | 日韩av网站在线播放 | 国产精品嫩草影视久久久 | 欧美日韩中 | www.午夜视频 | 人人舔人人 | 欧洲视频一区 | 国产精品久久久久久久久久久久冷 | 一区二区三区在线观看免费视频 | 亚洲成人av一区二区 | 日韩免费视频观看 | 人人干干人人 | 日本性xxx| 久久综合九色欧美综合狠狠 | 国产日韩欧美在线播放 | 国内精品福利视频 | 欧美va天堂va视频va在线 | 国产高清免费视频 | 大荫蒂欧美视频另类xxxx | 国产美女被啪进深处喷白浆视频 | 午夜国产在线 | 日本黄色黄网站 | 久草精品免费 | 黄色av高清 | 中文字幕在线观看视频网站 | 午夜视频一区二区三区 | 免费黄色在线 | 国产精品女主播一区二区三区 | 国产亚洲精品日韩在线tv黄 | 中文字幕一区二区三区在线观看 | 日本特黄特色aaa大片免费 | 久久激情五月激情 | 中文字幕高清视频 | 日韩特级毛片 | 亚洲成av人片在线观看 | 亚洲欧美视频在线观看 | 国产最顶级的黄色片在线免费观看 | av在线播放亚洲 | 日韩乱理 | 久久玖 | 欧美成人性战久久 | 国产91精品高清一区二区三区 | 少妇bbw搡bbbb搡bbbb | 天天躁天天操 | 欧美激情视频在线观看免费 | 国产麻豆剧传媒免费观看 | av在线观 | 91免费看黄 | 九九综合久久 | 久久电影中文字幕视频 | 国产成人91 | 99久久精品免费视频 | 一级a性色生活片久久毛片波多野 | 免费看黄在线观看 | 国产日韩在线视频 | 亚洲精品视频第一页 | 伊人网站 | 婷婷av在线 | 色婷婷精品大在线视频 | 超碰伊人网 | 久久成人久久 | 日韩xxxxxxxxx| 亚洲精品国产欧美在线观看 | 草 免费视频 | 久久国产影视 | 在线视频中文字幕一区 | 天天干天天干天天 | 亚洲三级黄色 | 91福利小视频 | 国产一区国产二区在线观看 | 成人午夜剧场在线观看 | 免费日韩一区二区 | 中文字幕视频三区 | 国产精品剧情在线亚洲 | 国产精品 美女 | 国产精品亚洲视频 | 国产精品都在这里 | 国产精品日韩久久久久 | 国产精品久久久久久久久毛片 | 九九热精| 国产另类av | 亚洲一区二区三区91 | 国产精品成人av电影 | 精品国产自在精品国产精野外直播 | 免费精品视频在线观看 | 成人免费在线播放视频 | 四虎海外影库www4hu | 国产亚洲精品久久久久久久久久久久 | 91久色蝌蚪 | 色综合狠狠干 | 久碰视频在线观看 | 久久女教师 | 久久久久久久久久久久av | 久久久久国产精品免费免费搜索 | 国产一级视频免费看 | 在线播放日韩av | 久久er99热精品一区二区三区 | 蜜桃视频精品 | 成人午夜网址 | 精品中文字幕视频 | 国产99在线免费 | 国产中文字幕在线视频 | 综合精品久久 | 色射色 | 午夜精品久久久久久久久久久久久久 | 97在线成人 | 欧美精品国产综合久久 | 激情欧美在线观看 | 国产最新在线视频 | 国产97免费| 国模视频一区二区三区 | 免费黄色网址网站 | 91传媒免费观看 | 久久久影院官网 | 久久综合电影 | 免费精品视频 | 99久久久久成人国产免费 | 欧美日韩免费一区二区三区 | 色永久免费视频 | 国产成人一区二区三区免费看 | 国产精品久久久亚洲 | 亚洲aⅴ乱码精品成人区 | 成人h电影 | 欧美日韩国产精品一区 | 麻豆久久久 | 996久久国产精品线观看 | 激情www | 手机在线欧美 | av无限看| 免费av片在线 | 欧美日韩高清 | 免费看国产a | 在线观看亚洲精品 | 日韩一二区在线观看 | 日韩久久精品一区二区 | 2021久久 | 精品视频久久久 | 在线免费黄色av | 在线日韩视频 | 欧美激情综合网 | 免费的成人av | 国产精品一区二区三区视频免费 | 日韩电影一区二区三区 | 国产精品自产拍在线观看 | 国产中文字幕网 | 天堂av最新网址 | 精壮的侍卫呻吟h | 国产成人香蕉 | 国产精品系列在线播放 | 色欧美视频 | 国产精品免费一区二区三区在线观看 | 五月天亚洲精品 | 精品亚洲一区二区 | www.久久久精品 | 免费日韩电影 | 久久精品香蕉 | 久草免费电影 | 97高清视频 | 国产福利a | 丁五月婷婷 | 日韩中文字幕视频在线 | 国产高清av免费在线观看 | 国产高清视频免费最新在线 | 福利一区二区三区四区 | 毛片视频电影 | 顶级bbw搡bbbb搡bbbb | 婷婷中文字幕在线观看 | 黄色电影在线免费观看 | 亚洲精品激情 | 不卡av在线 | 日韩精品一区不卡 | 国产成人精品三级 | 久艹在线免费观看 | 国产亚洲精品成人av久久ww | 在线有码中文 | 国产精品亚洲综合久久 | 玖玖玖在线 | 99热精品视 | 国产精品99久久久久久人免费 | 久久草av| 狠狠五月婷婷 | 欧美一区二区三区四区夜夜大片 | 国产福利久久 | 99视频免费观看 | 九九久久久 | 九九九电影免费看 | 国产色女人 | 日韩在线电影一区 | 久久久久在线视频 | 五月天亚洲婷婷 | 超碰人人在| 久久久久久久99精品免费观看 | 日韩欧美一区二区三区黑寡妇 | 波多野结衣视频一区 | 91自拍成人 | 亚洲资源视频 | 日韩在线视频国产 | 国产123av| 亚洲精品视频在线观看免费视频 | 国产精品欧美久久 | 一级免费观看 | 日韩在线观看一区二区 | 国产精品一区二区精品视频免费看 | 天天艹天天 | 亚洲精色| 欧美成人va| av在线一二三区 | 国产九九在线 | 最新99热 | 久久久久久久国产精品视频 | 999国内精品永久免费视频 | 911久久| 国产高清视频在线播放 | 亚洲综合成人在线 | 99亚洲国产| 91看片在线 | 黄av免费在线观看 | 婷婷在线免费观看 | 日韩激情av在线 | 成人精品一区二区三区电影免费 | 日韩小视频网站 | 麻豆va一区二区三区久久浪 | av福利网址导航 | 日韩激情视频在线观看 | 五月天久久久久 | 日韩免费二区 | 在线观看国产区 | 久久国产电影 | 免费视频18| 国产一区二区视频在线 | 国产美女免费观看 | 99精品国产视频 | 久久久久久蜜桃一区二区 | 九九免费观看全部免费视频 | 国产91亚洲精品 | 国产成人1区 | 国产成人福利在线观看 | 91在线播放国产 | 91香蕉视频黄色 | 国产美女在线免费观看 | 国产乱对白刺激视频在线观看女王 | 在线性视频日韩欧美 | 激情综合五月天 | 97免费视频在线播放 | 色国产精品一区在线观看 | 狠狠色丁香婷婷综合久小说久 | 日日日操操 | 亚洲婷婷网| 国产免费专区 | 日韩专区视频 | 在线观看成人国产 | 亚洲精品mv在线观看 | 91精品在线免费观看视频 | 欧美日韩国产精品一区二区亚洲 | 少妇精品久久久一区二区免费 | 久久久精品国产免费观看一区二区 | 91在线国产观看 | 精品99免费视频 | 欧美性爽爽 | 日韩毛片在线免费观看 | 天天干天天上 | 毛片永久免费 | 高清日韩一区二区 | 中文字幕黄色av | 国产操在线 | 免费在线观看av片 | 91九色性视频 | 国产韩国精品一区二区三区 | 狠狠干电影 | 免费的国产精品 | 丁香一区二区 | 91大神精品视频 | 色婷婷影视 | 免费视频一区二区 | 国产精品久久久久久高潮 | 伊人永久 | 久久人人射 | 福利一区视频 | 国产精品高清在线 | 欧美日韩一区二区三区在线免费观看 | 亚洲在线免费视频 | 欧女人精69xxxxxx | 麻豆一区在线观看 | 欧美日韩亚洲第一页 | 天天天操操操 | 日韩高清一区在线 | 又污又黄的网站 | av中文国产 | 免费观看一级特黄欧美大片 | 美女黄频 | 狠狠操天天干 | 91亚洲在线观看 | 国产精品99蜜臀久久不卡二区 | 一区二区三区在线看 | 91网在线 | 国产视频一区在线免费观看 | 午夜视频播放 | 免费av网址大全 | 99久久日韩精品免费热麻豆美女 | 激情视频在线观看网址 | 国产精品久久久久久一区二区 | 午夜成人免费电影 | 亚洲国产小视频在线观看 | 99久久精品国产欧美主题曲 | 欧美视频国产视频 | 国产成人精品久久久久蜜臀 | 国产成人精品久久亚洲高清不卡 | 超碰97久久 | 不卡的av片| 色黄久久久久久 | 99久久久| 91视频久久久久久 | 久久久久久久久久久久久影院 | 九色91在线 | 中文字幕在线播出 | 精品国产一区二区在线 | 色婷婷狠 | 国产精品地址 | 亚洲精品国产精品国产 | 免费在线播放黄色 | 久久激情视频 | 国产精品一区二区三区在线 | 成人性生交大片免费观看网站 | 视频在线一区 | 一级一片免费观看 | av电影亚洲 | 91人人在线| 婷婷色站 | 久久免费视频一区 | 久久精品国产一区 | 玖玖在线免费视频 | 97av精品 | 欧美在线不卡一区 | 在线观看日韩av | 中文字幕成人在线 | 四虎www com | 天天爽夜夜操 | 久草在线视频免费资源观看 | 国产最新91 | 日韩亚洲精品电影 | 在线av资源 | 99中文在线 | 精品xxx| 欧美日韩3p | 免费在线电影网址大全 | 九九视频免费观看视频精品 | 51精品国自产在线 | 精品国产一区二区三区久久久蜜臀 | 日三级在线| 国产精品情侣视频 | 久久久久久久免费看 | 96精品高清视频在线观看软件特色 | 久久草在线免费 | 毛片网站在线观看 | 亚洲精品在线资源 | 精品a视频 | 免费观看黄色12片一级视频 | 国产精品一区在线观看 | 热re99久久精品国产99热 | 国产精品视频大全 | 欧美激情一区不卡 | 九九九九九九精品 | 欧美黄色免费 | 亚洲精品成人av在线 | 欧美在线一二 | 视频在线国产 | 欧美大片aaa | 日韩精品一区二区三区丰满 | 久草综合在线观看 | 啪啪凸凸| 成人av高清在线 | 婷婷免费在线视频 | 成人黄色电影在线播放 | 色综合天天色综合 | 国产精品系列在线观看 | 天天爽天天搞 | 美女视频一区 | 黄色av成人在线 | 欧美日韩高清在线观看 | 久久久久 免费视频 | 日产av在线播放 | 香蕉视频91 | 手机av片| 丝袜一区在线 | 日韩欧美国产视频 | 欧美精品乱码99久久影院 | 日日夜夜精品免费观看 | 香蕉视频在线网站 | 日日干天天 | 成人免费91 | 国产理论片在线观看 | 日韩在线播放视频 | 国产99精品 | 五月婷婷在线视频观看 | 天天操天天干天天摸 | 在线国产视频一区 | 日韩在线视频网址 | 久久福利国产 | 亚洲91中文字幕无线码三区 | 国产破处视频在线播放 | 亚洲午夜精品一区二区三区电影院 | 久久久久久久99 | 色婷婷视频在线 | 亚洲最新视频在线 | 亚洲精品tv久久久久久久久久 | 国产91精品在线播放 | 国产精品第一页在线观看 | 国产a级片免费观看 | 久久伦理视频 | 不卡的一区二区三区 | av在线色 | 日韩av中文字幕在线免费观看 | 五月天电影免费在线观看一区 | 欧美日韩中字 | 国产精品a久久久久 | 激情五月婷婷激情 | 精品欧美乱码久久久久久 | 成人免费av电影 | 欧美日韩精品在线视频 | 香蕉久久国产 | 亚洲专区中文字幕 | 久久丝袜视频 | 四虎在线永久免费观看 | 日韩高清av | 成人蜜桃网 | 少妇视频一区 | 波多野结衣在线中文字幕 | 激情开心站 | 最近日本中文字幕a | 午夜免费福利视频 | 天天插日日插 | 色在线亚洲 | 91麻豆精品国产91久久久更新时间 | 公开超碰在线 | 九九免费精品视频在线观看 | 韩国av一区二区三区在线观看 | 婷婷色在线观看 | 99久久毛片 | 精品亚洲免费视频 | 国产爽视频 | 91亚洲免费 | 中文在线天堂资源 | 激情av在线资源 | 一区二区不卡视频在线观看 | 日本在线观看一区 | 中文字幕专区高清在线观看 | 日韩精品1区2区 | 亚洲国产精品成人va在线观看 | 一本色道久久综合亚洲二区三区 | 波多野结衣在线观看一区二区三区 | 香蕉网站在线观看 | 亚洲国产一区av | 久久久久亚洲精品国产 | www.国产毛片| av久久在线| 日韩aa视频 | 日本在线视频一区二区三区 | 国产精品麻豆三级一区视频 | 免费看一级黄色 | 99久久精品国产一区二区成人 | 国产97视频在线 | 91超碰免费在线 | 国产三级视频在线 | 国产精品国内免费一区二区三区 | 国产精品21区 | 激情五月婷婷 | 欧美俄罗斯性视频 | 91成人小视频 | 97精品电影院 | 狠狠色2019综合网 | 日本aaaa级毛片在线看 | 中文字幕免费观看视频 | .国产精品成人自产拍在线观看6 | 国产精品久久久久久久妇 | 成年人国产视频 | 天天综合久久综合 | 欧美在线free | 四川bbb搡bbb爽爽视频 | 日韩网站免费观看 | 在线免费观看黄色小说 | 99精品免费在线观看 | 久久精品视频国产 | 91久久久国产精品 | 国产麻豆精品一区 | 久久久精品成人 | 国产精品美女久久久网av | 中文字幕亚洲欧美日韩2019 | 国产一级片毛片 | 97碰在线 | 免费黄色在线网址 | 日韩精品第一区 | 伊色综合久久之综合久久 | 日韩中文字幕亚洲一区二区va在线 | av成人免费在线看 | 91网页版在线观看 | 天天色视频 | 国产麻豆果冻传媒在线观看 | www.成人sex| 国产精品久久久久久久久久久久冷 | 亚洲精品xxx | 天天操天天怕 | 久久久久亚洲精品 | 波多野结衣视频一区二区三区 | 色婷婷激婷婷情综天天 | 国产精品免费观看视频 | 欧洲精品在线视频 | 美女国产免费 | 99热最新精品 | 欧美日韩国产二区三区 | 亚洲伊人av | 欧美激情视频一区二区三区 | 亚洲自拍av在线 | 九九热在线精品视频 |