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

Java 性能瓶頸分析工具 你知道幾個(gè)?

開(kāi)發(fā) 開(kāi)發(fā)工具
本文介紹了常用的性能分析工具和故障排查工具,希望可以幫助開(kāi)發(fā)人員在排查性能問(wèn)題的時(shí)候快速定位到性瓶頸。每個(gè)工具都有其優(yōu)勢(shì)與劣勢(shì),只有更好了解問(wèn)題所出現(xiàn)的場(chǎng)景,理清解決問(wèn)題的思路,才能最大化的發(fā)揮工具的價(jià)值。

[[264860]]

0. Introduction

Java 性能優(yōu)化分為很多個(gè)方面,如系統(tǒng)優(yōu)化、算法優(yōu)化、代碼優(yōu)化等。代碼優(yōu)化是指開(kāi)發(fā)人員在研發(fā)、測(cè)試過(guò)程中使用性能瓶頸分析工具快速定位出由于編碼存在的性能瓶頸問(wèn)題并持續(xù)進(jìn)行優(yōu)化。一種很常見(jiàn)的場(chǎng)景是測(cè)試同學(xué)在對(duì)服務(wù)進(jìn)行壓測(cè)時(shí),無(wú)論怎么增加并發(fā)應(yīng)用的 TPS 一直保持在某個(gè)值進(jìn)行左右波動(dòng),這個(gè)時(shí)候要怎么排查呢。為了可以準(zhǔn)確獲得運(yùn)行過(guò)程中程序的性能數(shù)據(jù),性能調(diào)優(yōu)人員和開(kāi)發(fā)者需要使用性能分析(profiling)輔助工具從全局視角來(lái)查看系統(tǒng)的運(yùn)行狀況。本文主要介紹通過(guò)熟練掌握 JMC、Tprofiler、JProfiler 等各種性能瓶頸分析工具,進(jìn)而提高定位性能瓶頸、系統(tǒng)故障排查能力。

1. Java Mission Control

JMC(Java 任務(wù)控制)是 Java 7u40 新增加的性能監(jiān)控工具。目前,Oracle Java 官方在今年 5 月份已經(jīng)公布 Java Mission Control(JMC)的源代碼已正式開(kāi)源,此舉得到了 Java 開(kāi)發(fā)社區(qū)的高度贊賞。

JMC 源碼地址: JMC source code

 

Java 性能瓶頸分析工具

JMC 工具主要由三個(gè)組件構(gòu)成:Java 進(jìn)程瀏覽器、JMX 控制臺(tái)和 Java Flight 記錄器等。

Java 進(jìn)程瀏覽器能夠利用 Java 自帶的 JDP 協(xié)議自動(dòng)發(fā)現(xiàn)本地或者遠(yuǎn)程正在使用的 Java 進(jìn)程;

JMX 控制臺(tái)通過(guò) JMX 接口管理監(jiān)控 JDK,它能夠查看堆內(nèi)存使用情況、CPU 負(fù)載等;

Java Flight Recorder 是一個(gè)內(nèi)置在 JDK 中的監(jiān)測(cè)和事件收集框架。收集的事件包括:磁盤(pán) IO、GC、線(xiàn)程 sleep、線(xiàn)程 wait、Socket read/write 等。

下圖顯示了 JMC 啟動(dòng)后當(dāng)前機(jī)器正在運(yùn)行中的所有 Java 進(jìn)程,選擇一個(gè)進(jìn)程進(jìn)行性能監(jiān)控。

 

Java 性能瓶頸分析工具

 

如果使用的操作系統(tǒng)是 Mac 并且 JDK 版本為 1.8,啟動(dòng) JMC 之后可能會(huì)發(fā)現(xiàn)操作界面被冷凍住了你沒(méi)辦法進(jìn)行任何操作。產(chǎn)生這種現(xiàn)象的原因是 JDK 在升級(jí)過(guò)程中存在一個(gè)bug,具體解決方案可以參考:

  1. Jdk1.8 bug 

1.1 JFR 內(nèi)存視圖

JFR 模塊包含一般信息、內(nèi)存、代碼、線(xiàn)程、IO、系統(tǒng)、事件等視圖。其中,JFR 內(nèi)存視圖收集的信息非常豐富,可以獲得內(nèi)測(cè)使用量、GC 配置、GC 時(shí)間、對(duì)象統(tǒng)計(jì)時(shí)間等統(tǒng)計(jì)信息。下圖展示了當(dāng)前 JVM 進(jìn)程 GC 時(shí)間的統(tǒng)計(jì)信息。

 

Java 性能瓶頸分析工具

1.2 JFR 代碼視圖

JFR 代碼視圖可以很容易統(tǒng)計(jì)出所有 Java 包占 JVM 進(jìn)程所有方法調(diào)用的總時(shí)長(zhǎng)。該視圖很方便查看熱點(diǎn)類(lèi)、熱點(diǎn)方法和熱點(diǎn)包的調(diào)用次數(shù)、所占比例等。JFR 還提供了 I/O 視圖、線(xiàn)程視圖、系統(tǒng)視圖從不同角度更好分析當(dāng)前進(jìn)程運(yùn)行情況。

 

Java 性能瓶頸分析工具

 

1.3 啟動(dòng) JFR

Java 飛行記錄器(JFR)是一種用于收集關(guān)于正在運(yùn)行的 Java 應(yīng)用程序的診斷和分析數(shù)據(jù)的工具。它集成到 Java 虛擬機(jī)(JVM)中,幾乎不會(huì)造成性能開(kāi)銷(xiāo),因此即使在負(fù)載非常大的生產(chǎn)環(huán)境中也可以使用它。

  • 首先,JVM 進(jìn)程開(kāi)啟 JFR 功能需要在 JVM 啟動(dòng)參數(shù)(Jvm start flags)中增加兩個(gè)參數(shù)
  1. -XX:+UnlockCommercialFeatures -XX:+FlightRecorder 

默認(rèn)情況下,JFR 在 JVM 中是禁用的。要啟用 JFR,必須使用 - XX:+FlightRecorder 選項(xiàng)啟動(dòng) Java 應(yīng)用程序。因?yàn)?JFR 是一個(gè)商業(yè)特性,僅在基于 Java 平臺(tái)、標(biāo)準(zhǔn)版(Oracle Java SE Advanced 和 Oracle Java SE Suite)的商業(yè)包中可用,所以您還必須使用 - XX:+UnlockCommercialFeatures 選項(xiàng)啟用商業(yè)特性。

 

Java 性能瓶頸分析工具

 

當(dāng)然,也可以配置 JMC 進(jìn)行遠(yuǎn)程監(jiān)控,在啟動(dòng) Java 程序時(shí)加上如下參數(shù):

  1. -Dcom.sun.management.jmxremote  
  2. -Dcom.sun.management.jmxremote.port=18090  
  3. -Dcom.sun.management.jmxremote.ssl=false  
  4. -Dcom.sun.management.jmxremote.authenticate=false  
  5. -Djava.rmi.server.hostname=192.168.149.184  
  6. -XX:+UnlockCommercialFeatures  
  7. -XX:+FlightRecorder 

允許其它機(jī)器監(jiān)控該程序,必須指定 -Djava.rmi.server.hostname=,如果不指定該配置,那么就只能在本機(jī)監(jiān)控該程序。

控制監(jiān)控的授權(quán)(讓特定的用戶(hù)才能連接 JMX 服務(wù)),需要設(shè)置

  1. -Dcom.sun.management.jmxremote.authenticate=true 

如果設(shè)置為 false 則不需要授權(quán)。

授權(quán)需要指定兩個(gè)文件:jmxremote.password 和 jmxremote.access,password 文件主要是配置用戶(hù)名和密碼。

  • 其次,選中需要進(jìn)行性能分析的進(jìn)程,點(diǎn)擊右鍵選擇開(kāi)啟飛行記錄器:

 

Java 性能瓶頸分析工具

 

 

Java 性能瓶頸分析工具

 

1.4 JFR 事件

JFR 記錄并保存事件流,JMC 提供不同的視圖來(lái)分析這些事件,但是 JFR 事件面板(如上圖所示)才是分析事件最有效的途徑。點(diǎn)擊事件,展開(kāi)堆棧跟蹤。

 

Java 性能瓶頸分析工具

 

從圖中可以看出,在 2 分鐘內(nèi)發(fā)生了 4403 次 Hotspot JVM 事件和 161 次 Java Runtime 事件。應(yīng)用程序有多個(gè)線(xiàn)程共消耗 73 毫秒向套接字內(nèi)寫(xiě)數(shù)據(jù)(Socket Write);應(yīng)用程序中多個(gè)線(xiàn)程共消耗 120 秒從套接字讀取數(shù)據(jù)(Socket Read)。這看起來(lái)并不正常,通過(guò)查看這些事件的處理記錄可以發(fā)現(xiàn),由多個(gè)線(xiàn)程使用阻塞式 I/O 讀取請(qǐng)求。這些管理請(qǐng)求的時(shí)間間隔通常很長(zhǎng),但這些線(xiàn)程卻在 read() 方法內(nèi)被阻塞,所以導(dǎo)致這些線(xiàn)程讀取數(shù)據(jù)時(shí)消耗了過(guò)多的時(shí)間。

 

Java 性能瓶頸分析工具

 

JFR 的事件就如黑匣子一般,通過(guò)收集的這些事件的詳細(xì)信息能夠更加深入了解程序的內(nèi)部運(yùn)行過(guò)程,這是很多其他工具所不具備的。

1.5 實(shí)際案例

API Gateway 是一種高并發(fā)、高流量的系統(tǒng),它的主要功能是用于給第三方合作伙伴提供數(shù)據(jù)與服務(wù)的能力。因此,API Gateway 對(duì)于處理用戶(hù)請(qǐng)求的完整鏈路中每個(gè)環(huán)節(jié)的性能損耗都會(huì)非常敏感。

最近,在升級(jí)網(wǎng)關(guān)的核心功能模塊之后與測(cè)試同學(xué)一起合作對(duì)網(wǎng)關(guān)的某些 API 接口進(jìn)行性能壓力測(cè)試,利用壓測(cè)機(jī) Jmeter 模擬多用戶(hù)并發(fā)請(qǐng)求。但不管怎么增加并發(fā)數(shù),每分鐘的請(qǐng)求總量穩(wěn)定保持在 4 萬(wàn)/min,TPS 也一直在 650 左右波動(dòng),而且所有服務(wù)器的 CPU、內(nèi)存、網(wǎng)絡(luò)、IO 占用率均不高。

針對(duì)這種情況,我們首先排除了業(yè)務(wù)方的性能問(wèn)題,因此直接對(duì)業(yè)務(wù)方(2 核 8G)發(fā)起并發(fā)請(qǐng)求,TPS 都可以達(dá)到 800 左右的并發(fā)數(shù)。其次,我們也排除了接入層 SLB、OpenResty 的問(wèn)題,因?yàn)榫W(wǎng)關(guān)未升級(jí)核心功能情況下單臺(tái)網(wǎng)關(guān)的 TPS 很容易達(dá)到 4000 左右。

因此,根據(jù)以上分析基本可以確定性能瓶頸出在網(wǎng)關(guān)處理請(qǐng)求的過(guò)程中。

在網(wǎng)關(guān)的 JVM 啟動(dòng)參數(shù)中增加 JFR 啟動(dòng)參數(shù):

  1. -XX:+UnlockCommercialFeatures -XX:+FlightRecorder 

 

Java 性能瓶頸分析工具

 

使用 JFR 的事件視圖點(diǎn)擊堆棧跟蹤,就可以查看到代碼調(diào)用鏈,看到自己的業(yè)務(wù)代碼,從而定位到最耗時(shí)的代碼位置。

下圖很清楚展示了來(lái)自客戶(hù)端每個(gè)請(qǐng)求主要的事件都耗費(fèi)在調(diào)用 Redis 讀取 API 元信息,每一次讀取源信息都需要進(jìn)行序列化與反序列化,導(dǎo)致平均響應(yīng)時(shí)間增加網(wǎng)關(guān)處理請(qǐng)求時(shí)間加長(zhǎng),因此 TPS 下降并一直穩(wěn)定在某個(gè)值。解決方案 API 元信息盡可能緩存到本地 JVM 內(nèi)存,優(yōu)先從本地內(nèi)存讀取數(shù)據(jù)減少訪(fǎng)問(wèn) Redis 頻次。

 

Java 性能瓶頸分析工具

 

當(dāng)然系統(tǒng) TPS 上不去的原因也不能僅僅從單一維度分析,要綜合起來(lái)多維度進(jìn)行分析,如網(wǎng)絡(luò)帶寬、連接池、Java 內(nèi)存管理、HTTP 通信機(jī)制、業(yè)務(wù)邏輯、系統(tǒng)架構(gòu)(緩存、數(shù)據(jù)庫(kù)等)等等。

2. Tprofiler

TProfiler 是淘寶開(kāi)源的一個(gè)可以在生產(chǎn)環(huán)境長(zhǎng)期使用的性能分析工具。它同時(shí)支持剖析和采樣兩種方式,記錄方法執(zhí)行的時(shí)間和次數(shù),生成方法熱點(diǎn)、對(duì)象熱點(diǎn)、線(xiàn)程狀態(tài)分析等數(shù)據(jù),為查找系統(tǒng)性能瓶頸提供數(shù)據(jù)支持。

TProfiler 在 JVM 啟動(dòng)時(shí)把時(shí)間采集程序注入到字節(jié)碼中,整個(gè)過(guò)程無(wú)需修改應(yīng)用源碼。運(yùn)行時(shí)會(huì)把數(shù)據(jù)寫(xiě)到日志文件,一般情況下每小時(shí)輸出的日志小于 50M。目前 TProfiler 已應(yīng)用于淘寶的核心 Java 前端系統(tǒng),部署后低峰期對(duì)應(yīng)用響應(yīng)時(shí)間影響 20% 高峰期對(duì)吞吐量大約有 30% 的降低。

2.1 配置部署

  • 安裝 TProfiler

直接下載完整安裝包或者下載源碼運(yùn)行 package.bat 腳本或者執(zhí)行 mvn assembly:assembly命令生成 tprofiler.jar 即可。

  • 配置 profile.properties

profile.properties 作為 tprofiler.jar 的配置文件,可以根據(jù)實(shí)際情況進(jìn)行調(diào)整。

  1. #log file name 
  2. logFileName = tprofiler.log 
  3. methodFileName = tmethod.log 
  4. samplerFileName = tsampler.log 
  5. #basic configuration items 
  6. startProfTime = 19:00:00 #開(kāi)始進(jìn)行profile的時(shí)間 
  7. endProfTime = 23:00:00 #結(jié)束profile的時(shí)間 
  8. eachProfUseTime = 5 #profile時(shí)間長(zhǎng)度(單位秒) 
  9. eachProfIntervalTime = 50#兩次profile的時(shí)間間隔(單位秒) 
  10. samplerIntervalTime = 20 #兩次采樣的時(shí)間間隔 
  11. port = 50000  
  12. debugMode = false  
  13. needNanoTime = false 
  14. ignoreGetSetMethod = true 
  15. #file paths 
  16. logFilePath = /home/admin/tprofiler/logs/${logFileName} 
  17. methodFilePath = /home/admin/tprofiler/logs/${methodFileName} 
  18. samplerFilePath = /home/admin/tprofiler/logs/${samplerFileName} 
  19. #include & excludes items 
  20. excludeClassLoader = org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader 
  21. includePackageStartsWith = com.taobao;com.taobao.common 
  22. excludePackageStartsWith = com.taobao.sketch;org.apache.velocity;com.alibaba;com.taobao.forest.domain.dataobject 
  • 配置 JVM 進(jìn)程

在 JVM 啟動(dòng)參數(shù)中添加,然后重啟應(yīng)用。

  1. -javaagent:/home/admin/tprofiler/lib/tprofiler.jar  
  2. -Dprofile.properties=/home/admin/tprofiler/lib/profile.properties 
  • 遠(yuǎn)程操作
    1. java -cp tprofiler.jar com.taobao.profile.client.TProfilerClient [192.168.132.*.*] [port] status #遠(yuǎn)程查看狀態(tài)操作 
    2. java -cp tprofiler.jar com.taobao.profile.client.TProfilerClient [192.168.132.*.*] [port] start #遠(yuǎn)程開(kāi)始操作 
    3. java -cp tprofiler.jar com.taobao.profile.client.TProfilerClient [192.168.132.*.*] [port] stop #遠(yuǎn)程停止操作 
    4. java -cp tprofiler.jar com.taobao.profile.client.TProfilerClient [192.168.132.*.*] [port] flushmethod #遠(yuǎn)程刷出方法數(shù)據(jù) 
Java 性能瓶頸分析工具

2.2 TProfiler 性能方法的采集

TProfiler 能夠生成日志:tmethod.log、tprofiler.log、tsampler.log。

  • 普通方法、線(xiàn)程信息統(tǒng)計(jì)

執(zhí)行如下命令,會(huì)生成 method.log 和 thread.log:

  1. java -cp ../lib/tprofiler-1.0.1.jar com.taobao.profile.analysis.SamplerLogAnalysis tsampler.log method.log thread.log 

method.log 文件格式說(shuō)明:

  1. 方法信息 采樣過(guò)程中方法出現(xiàn)次數(shù) 
  2. org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1131) 54 
  3. org.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:498) 54 
  4. org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) 36 
  5. org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44) 36 
  6. org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:163) 36 
  7. org.jboss.netty.channel.socket.nio.SelectorUtil.select(SelectorUtil.java:38) 36 
  8. org.I0Itec.zkclient.ZkEventThread.run(ZkEventThread.java:67) 36 
  9. com.alibaba.dubbo.remoting.exchange.support.DefaultFuture$RemotingInvocationTimeoutScan.run(DefaultFuture.java:300) 18 
  10. com.taobao.profile.thread.TimeControlThread.run(TimeControlThread.java:116) 18 
  11. com.taobao.profile.thread.SamplerThread.run(SamplerThread.java:57) 18 
  12. com.taobao.profile.thread.TimeControlThread.await(TimeControlThread.java:84) 18 
  13. com.taobao.profile.thread.InnerSocketThread.run(InnerSocketThread.java:44) 18 
  14. com.taobao.profile.thread.DataDumpThread.run(DataDumpThread.java:69) 17 
  15. org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:492) 1 
  16. org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363) 1 
  17. com.taobao.profile.thread.DataDumpThread.run(DataDumpThread.java:62) 1 

thread.log 文件格式說(shuō)明:

  1. 線(xiàn)程信息 采樣過(guò)程中線(xiàn)程出現(xiàn)次數(shù) 
  2. 26 ZkClient-EventThread-26-192.168.150.149:2181 WAITING 18 
  3. 3 Finalizer WAITING 18 
  4. 47 DubboResponseTimeoutScanTimer TIMED_WAITING 18 
  5. 36 New I/O client worker #1-1 RUNNABLE 18 
  6. 29 DubboRegistryFailedRetryTimer-thread-1 TIMED_WAITING 18 
  7. 30 ZkClient-EventThread-30-192.168.150.149:2181 WAITING 18 
  8. 27 main-SendThread(192.168.150.149:2181) RUNNABLE 18 
  9. 31 main-SendThread(192.168.150.149:2181) RUNNABLE 18 
  10. 8 TProfiler-DataDump TIMED_WAITING 18 
  11. 52 DestroyJavaVM RUNNABLE 18 
  12. 12 VM JFR Buffer Thread RUNNABLE 18 
  13. 49 global-client-idle-conn-cleanup-scheduler-4-1 TIMED_WAITING 18 
  14. 5 Signal Dispatcher RUNNABLE 18 
  15. 40 commons-pool-EvictionTimer TIMED_WAITING 18 
  16. 23 main-EventThread WAITING 18 
  17. 10 JFR request timer WAITING 18 
  18. 6 TProfiler-TimeControl TIMED_WAITING 18 
  19. 32 main-EventThread WAITING 18 
  20. 46 jupiter-0-ClientToProxyAcceptor-0 RUNNABLE 18 
  21. 9 TProfiler-Sampler RUNNABLE 18 
  22. 28 main-EventThread WAITING 18 
  23. 2 Reference Handler WAITING 18 
  24. 45 ObjectCleanerThread TIMED_WAITING 18 
  25. 22 main-SendThread(192.168.150.199:2181) RUNNABLE 18 
  26. 19 RMI TCP Accept-0 RUNNABLE 18 
  27. 48 print-cache-job-1 TIMED_WAITING 18 
  28. 7 TProfiler-InnerSocket RUNNABLE 18 
  29. 43 dubbo-remoting-client-heartbeat-thread-2 WAITING 18 
  30. 50 rxnetty-nio-eventloop-2-1 RUNNABLE 18 
  31. 33 DubboSaveRegistryCache-thread-1 WAITING 18 
  32. 42 New I/O client worker #1-2 RUNNABLE 18 
  33. 17 RMI TCP Accept-0 RUNNABLE 18 
  34. 18 RMI TCP Accept-18090 RUNNABLE 18 
  35. 34 DubboClientReconnectTimer-thread-1 WAITING 10 
  36. 54 jupiter-0-ClientToProxyWorker-1 RUNNABLE 10 
  37. 60 jupiter-0-ProxyToServerWorker-1 RUNNABLE 10 
  38. 58 jupiter-0-ProxyToServerWorker-2 RUNNABLE 10 
  39. 53 jupiter-0-ClientToProxyWorker-0 RUNNABLE 10 
  40. 41 DubboClientReconnectTimer-thread-2 TIMED_WAITING 10 
  41. 57 jupiter-0-ProxyToServerWorker-0 RUNNABLE 10 
  42. 55 jupiter-0-ClientToProxyWorker-2 RUNNABLE 10 
  43. 56 jupiter-0-ClientToProxyWorker-3 RUNNABLE 10 
  44. 59 jupiter-0-ProxyToServerWorker-3 RUNNABLE 10 
  45. 41 DubboClientReconnectTimer-thread-2 WAITING 8 
  46. 34 DubboClientReconnectTimer-thread-1 TIMED_WAITING 8 
  47. 37 DubboClientHandler-192.168.149.183:20880-thread-1 TIMED_WAITING 3 
  48. 35 NettyClientBoss-thread-1 TIMED_WAITING 2 
  49. 44 DubboClientHandler-192.168.150.149:20892-thread-1 TIMED_WAITING 2 
  50. 35 NettyClientBoss-thread-1 TERMINATED 1 
  • top 熱點(diǎn)方法、熱點(diǎn)對(duì)象信息統(tǒng)計(jì)

執(zhí)行如下命令,生成 topmethod.log 和 topobject.log 文件

  1. java -cp ../lib/tprofiler-1.0.1.jar com.taobao.profile.analysis.ProfilerLogAnalysis tprofiler.log tmethod.log topmethod.log topobject.log 

topmethod.log 文件格式說(shuō)明:

  1. 方法信息 執(zhí)行次數(shù) 平均執(zhí)行時(shí)間 全部執(zhí)行時(shí)間 
  2. cn/com/company/xqy/framework/cacheframework/rediscache/RedisFactory:getJedisCache:107 750 7 5451 
  3. cn/com/company/xqy/framework/cacheframework/rediscache/ShardedJedisClient:checkObjectKeyExisted:243 516 3 1524 
  4. cn/com/company/xqy/framework/cacheframework/rediscache/ShardedJedisClient:get:180 563 3 1493 
  5. cn/com/company/xqy/framework/cacheframework/rediscache/ShardedJedisClient:getString:839 572 2 1199 
  6. cn/com/company/xqy/framework/cacheframework/rediscache/ShardedJedisClient:incr:1144 353 2 727 
  7. cn/com/company/xqy/jupiter/gateway/netty/ClientToProxyHandler:channelRead0:357 356 2 646 
  8. cn/com/company/xqy/jupiter/gateway/netty/filter/chain/request/pre/RateLimiterRequestFilter:doFilter:114 358 1 533 
  9. cn/com/company/xqy/framework/cacheframework/rediscache/ShardedJedisClient:ttl:1176 214 2 447 
  10. cn/com/company/xqy/jupiter/gateway/netty/ClientToProxyHandler$2:onCompleted:354 263 1 316 
  11. cn/com/company/xqy/framework/cacheframework/rediscache/RedisUtil:unseriallize:78 80 3 258 
  12. cn/com/company/xqy/jupiter/gateway/netty/filter/chain/request/pre/AuthenticationFilter:doFilter:126 310 1 237 
  13. cn/com/company/xqy/jupiter/gateway/netty/filter/chain/HttpRequestFilterChain:doFilter:72 358 0 137 
  14. cn/com/company/xqy/jupiter/gateway/component/cache/service/VaultCacheServiceImpl:getAppSecretByAppKey:52 237 0 73 
  15. cn/com/company/xqy/jupiter/gateway/netty/upstream/NettyRequestSender:writeRequest:183 25 2 56 
  16. cn/com/company/xqy/jupiter/gateway/netty/upstream/ProxyToServerHandler:channelRead0:70 266 0 45 
  17. cn/com/company/xqy/jupiter/gateway/netty/filter/chain/request/log/TraceUtils:createTraceId:39 1 44 44 
  18. cn/com/company/xqy/jupiter/gateway/util/ComponentUtil:getRedisConfig:52 1 44 44 
  19. cn/com/company/xqy/jupiter/gateway/netty/upstream/NettyRequestSender:sendRequest:98 50 1 40 
  20. cn/com/company/xqy/jupiter/gateway/util/ToString:toString:20 7 5 37 
  21. cn/com/company/xqy/framework/log/LoggerUtils:info:31 13 2 29 
  22. cn/com/company/xqy/jupiter/gateway/netty/HttpProxyServer$1:initChannel:142 12 2 28 
  23. cn/com/company/xqy/jupiter/gateway/netty/uri/PatternRequest:matchingPattern:53 9 2 22 
  24. cn/com/company/xqy/jupiter/gateway/netty/upstream/NettyRequestSender:sendRequestWithNewChannel:124 9 2 19 
  25. cn/com/company/xqy/jupiter/gateway/netty/filter/chain/servlet/NettyHttpServletRequest:getParameter:114 4 4 15 
  26. cn/com/company/xqy/framework/log/LoggerUtils:format:150 5 3 14 
  27. cn/com/company/xqy/jupiter/gateway/component/cache/service/ApiAuthSerivceImpl:checkApiAuth:54 271 0 13 
  28. cn/com/company/xqy/jupiter/gateway/netty/filter/chain/request/pre/AuthenticationFilter:getAppSecret:188 239 0 11 
  29. cn/com/company/xqy/jupiter/gateway/netty/HttpProxyServer:newHttpServerCodec:171 3 3 9 
  30. cn/com/company/xqy/jupiter/gateway/netty/filter/chain/request/pre/AuthenticationFilter:buildParams:246 5 2 8 
  31. cn/com/company/xqy/jupiter/gateway/component/compatible/CompatibleRequestUtil:fetchParameterModel:127 7 1 7 
  32. cn/com/company/xqy/jupiter/gateway/netty/filter/HttpFiltersRunner:clientToProxyRequest:35 358 0 7 
  33. cn/com/company/xqy/jupiter/gateway/netty/filter/chain/FilterUtil:getHeaderValue:30 1 6 6 
  34. cn/com/company/xqy/jupiter/gateway/util/PathUtils:getRegularPath:27 2 3 5 
  35. cn/com/company/xqy/jupiter/gateway/netty/uri/ExtendedAntPathMatcher:match:36 2 3 5 
  36. cn/com/company/xqy/framework/cacheframework/rediscache/RedisFactory:returnResource:136 3 2 5 
  37. cn/com/company/xqy/jupiter/gateway/netty/upstream/lb/WeightedRoundRobinLoadBalance:gcd:39 2 2 4 
  38. cn/com/company/xqy/jupiter/gateway/component/security/sign/HmacSHA256Signature:sign:38 2 2 4 
  39. cn/com/company/xqy/jupiter/gateway/netty/ClientToProxyHandler:channelInactive:395 14 0 4 
  40. cn/com/company/xqy/jupiter/gateway/netty/channel/Channels:isChannelValid:32 1 4 4 
  41. cn/com/company/xqy/jupiter/gateway/netty/channel/ChannelManager:tryToOfferChannelToPool:142 1 3 3 
  42. cn/com/company/xqy/jupiter/gateway/netty/upstream/ProxyToServerHandler:channelRead0:24 266 0 3 
  43. cn/com/company/xqy/jupiter/gateway/netty/upstream/NettyRequestSender:printProxyToServerLog:215 1 2 2 
  44. cn/com/company/xqy/jupiter/gateway/netty/uri/UrlPathUtils:getCanonicalizedPath:31 3 1 2 
  45. cn/com/company/xqy/jupiter/gateway/component/cache/RouteCacheComponent:getAllApiConfigs:225 355 0 2 
  46. cn/com/company/xqy/jupiter/gateway/component/SpringContextHolder:getBean:20 1 2 2 
  47. cn/com/company/xqy/jupiter/gateway/netty/filter/chain/servlet/NettyHttpServletRequest:getHeader:162 1 2 2 
  48. cn/com/company/xqy/jupiter/gateway/netty/upstream/lb/Server:hashCode:169 1 2 2 
  49. cn/com/company/xqy/jupiter/client/utils/UrlUtils:normalizedPath:62 1 2 2 
  50. cn/com/company/xqy/framework/cacheframework/rediscache/RedisFactory:getShardedJedisPool:111 1 2 2 
  51. cn/com/company/xqy/jupiter/gateway/netty/ClientToProxyHandler:checkPathValidity:378 10 0 2 
  52. cn/com/company/xqy/jupiter/gateway/netty/filter/chain/request/log/TraceLogContext:getTraceIdForLog:80 1 2 2 
  53. cn/com/company/xqy/jupiter/gateway/netty/ClientToProxyHandler:channelRead0:54 356 0 2 
  54. cn/com/company/xqy/jupiter/gateway/netty/upstream/NettyResponseFuture:<init>:50 1 2 2 
  55. cn/com/company/xqy/jupiter/gateway/netty/filter/HttpFiltersAdapter:<init>:29 1 2 2 
  56. cn/com/company/xqy/jupiter/gateway/netty/upstream/NettyRequestSender:sendRequestWithOpenChannel:142 25 0 1 
  57. cn/com/company/xqy/jupiter/gateway/netty/filter/chain/HttpRequestUtils:isJsonRequest:62 1 0 0 
  58. cn/com/company/xqy/jupiter/gateway/netty/upstream/lb/WeightedRoundRobinLoadBalance:select:96 2 0 0 
  59. cn/com/company/xqy/jupiter/gateway/netty/upstream/lb/WeightedRoundRobinLoadBalance:getGCDForServers:54 2 0 0 
  60. cn/com/company/xqy/jupiter/gateway/netty/HttpProxyServer$1:initChannel:130 12 0 0 
  61. cn/com/company/xqy/jupiter/gateway/component/compatible/CompatibleRequestUtil:getParameterAppKey:24 5 0 0 
  62. cn/com/company/xqy/jupiter/gateway/netty/channel/ChannelUtils:getTraceIdForLog:32 1 0 0 
  63. cn/com/company/xqy/jupiter/gateway/component/compatible/CompatibleRequestUtil:getParameterVersion:64 1 0 0 
  64. cn/com/company/xqy/jupiter/gateway/component/security/sign/AbstractSignature:sign:57 2 0 0 
  65. cn/com/company/xqy/jupiter/gateway/component/security/sign/AbstractSignature:sign:46 2 0 0 
  66. cn/com/company/xqy/jupiter/gateway/component/compatible/CompatibleRequestUtil:getParameterTimestamp:54 1 0 0 
  67. cn/com/company/xqy/jupiter/gateway/netty/filter/chain/request/pre/ParameterValidationFilter:doFilter:74 1 0 0 
  68. cn/com/company/xqy/jupiter/gateway/netty/upstream/SimpleChannelFutureListener:operationComplete:8 1 0 0 
  69. cn/com/company/xqy/jupiter/gateway/netty/upstream/SimpleChannelFutureListener:operationComplete:18 1 0 0 
  70. cn/com/company/xqy/jupiter/gateway/netty/upstream/NettyRequestSender$2:onSuccess:175 1 0 0 
  71. cn/com/company/xqy/jupiter/gateway/netty/HttpProxyServer:access$200:38 3 0 0 
  72. cn/com/company/xqy/jupiter/gateway/netty/filter/chain/request/pre/AuthenticationFilter:computeSign:165 2 0 0 
  73. cn/com/company/xqy/jupiter/gateway/netty/filter/HttpFiltersRunner:<init>:22 1 0 0 
  74. cn/com/company/xqy/jupiter/gateway/util/ComponentUtil:getRedisCacheClient:48 1 0 0 
  75. cn/com/company/xqy/jupiter/gateway/netty/upstream/NettyRequestSender:sendRequest:58 50 0 0 
  76. cn/com/company/xqy/framework/cacheframework/rediscache/ShardedJedisClient:isExist:227 516 0 0 
  77. cn/com/company/xqy/jupiter/gateway/netty/filter/HttpFiltersProviderAdapter:filterRequest:13 1 0 0 

topobject.log 文件格式說(shuō)明:

  1. 方法信息 執(zhí)行次數(shù) 平均執(zhí)行時(shí)間 全部執(zhí)行時(shí)間 
  2. cn/com/company/xqy/jupiter/gateway/netty/upstream/NettyResponseFuture:<init>:50 1 2 2 
  3. cn/com/company/xqy/jupiter/gateway/netty/filter/HttpFiltersAdapter:<init>:29 1 2 2 
  4. cn/com/company/xqy/jupiter/gateway/netty/filter/HttpFiltersRunner:<init>:22 1 0 0 

這是壓測(cè)多次時(shí)隨機(jī)挑選的一次結(jié)果。熱點(diǎn)方法和熱點(diǎn)代碼尤其值得我們關(guān)注,因此及其有可能是代碼瓶頸所在。這些熱點(diǎn)代碼一般要么是平均響應(yīng)時(shí)間高一些,要是產(chǎn)生的臨時(shí)對(duì)象會(huì)多一些。

3. Jprofiler

JProfiler 是由 ej-technologies 公司開(kāi)發(fā)的一款性能瓶頸分析工具。它是一款優(yōu)秀的商業(yè)軟件,功能非常豐富,因此具備一些免費(fèi)軟件所不具備的功能。Jprofiler 提供的主要功能有內(nèi)存視圖、CPU 視圖、線(xiàn)程視圖、堆遍歷器(Heap Walker)等。

3.1 Jprofiler 使用

CPU 視圖可以查看各個(gè)函數(shù)的 CPU 占用時(shí)間。Hot Spots 顯示消耗時(shí)間最多的方法的列表,它不僅給出了單個(gè)函數(shù)的 CPU 使用時(shí)間和方法調(diào)用次數(shù),同時(shí)還能顯示函數(shù)調(diào)用堆棧信息,方便定位問(wèn)題。

 

Java 性能瓶頸分析工具

 

在線(xiàn)程視圖可以統(tǒng)計(jì)并查詢(xún)當(dāng)前 JVM 所有線(xiàn)程的運(yùn)行狀態(tài),線(xiàn)程持有鎖的狀態(tài)并且可 dump 線(xiàn)程。

 

Java 性能瓶頸分析工具

 

4. Arthas

Arthas 是阿里最近剛剛開(kāi)源的 Java 生成環(huán)境診斷工具。

Arthas 支持在 Linux/Unix/Mac 等平臺(tái)上進(jìn)行一鍵安裝,現(xiàn)在處于試用于反饋階段,感興趣的同學(xué)可以自己研究試用。

5.Conclusion

本文介紹了常用的性能分析工具和故障排查工具,希望可以幫助開(kāi)發(fā)人員在排查性能問(wèn)題的時(shí)候快速定位到性瓶頸。每個(gè)工具都有其優(yōu)勢(shì)與劣勢(shì),只有更好了解問(wèn)題所出現(xiàn)的場(chǎng)景,理清解決問(wèn)題的思路,才能***化的發(fā)揮工具的價(jià)值。

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2023-04-27 08:15:09

2024-02-26 00:00:00

前端工具Space.js

2016-09-19 14:42:12

大數(shù)據(jù)SQLPig

2021-11-04 11:54:30

Linux內(nèi)存系統(tǒng)

2024-12-04 10:08:05

2021-05-06 15:15:13

Python工具代碼

2022-01-19 09:03:01

工具

2022-04-15 09:01:18

前端工具UTF8編碼

2020-01-09 09:56:47

Java集合框架

2022-03-29 07:20:04

密封類(lèi).NET性能

2020-04-08 16:41:18

大數(shù)據(jù)Hadoop工具

2019-05-23 08:08:33

MySQL數(shù)據(jù)庫(kù)DBA

2024-03-27 14:35:09

自動(dòng)驗(yàn)證工具

2024-02-02 15:21:08

工具頁(yè)面性能

2019-10-31 11:50:19

MySQL數(shù)據(jù)庫(kù)Windows

2022-04-29 15:24:53

Redis存儲(chǔ)慢查詢(xún)

2021-02-16 16:43:21

工具性能調(diào)優(yōu)

2021-02-27 17:13:21

前端代碼邏輯

2021-10-12 09:20:02

數(shù)據(jù)庫(kù)SQL腳本

2024-01-18 00:16:07

點(diǎn)贊
收藏

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

国产精品午夜春色av| 亚洲影院在线| 亚洲激情第一页| 精品中文字幕av| 啊v在线视频| 国产一区二区调教| 国产69久久精品成人看| 国产精品一区二区亚洲| aaa国产精品视频| 一本色道**综合亚洲精品蜜桃冫| 亚洲综合五月天| 污视频在线免费| 麻豆视频观看网址久久| 欧美黄色小视频| 正在播放国产对白害羞| 国产精品毛片av| 欧美日本在线观看| 久激情内射婷内射蜜桃| 在线视频三区| 26uuu色噜噜精品一区二区| 91久久精品国产91久久性色| 免费日韩一级片| 亚洲精品二区三区| 亚洲天堂男人天堂女人天堂| 久久久久中文字幕亚洲精品 | 国内老熟妇对白hdxxxx| 久久精品动漫| 久久久视频在线| 国产高潮流白浆| 日本一区二区高清不卡| 日韩电影中文字幕在线| 欧美一级大片免费看| 久久精品国产福利| 在线精品视频一区二区三四| 免费看一级大黄情大片| 欧美四级在线| 亚洲女爱视频在线| 中日韩在线视频| av一区在线观看| 国产视频911| 欧美综合激情| 黄色国产在线| 久久色在线视频| 精品国产乱码久久久久久郑州公司 | 国产免费一区二区| 精品人妻一区二区三区三区四区| 久久精品99国产精品日本| 国产成人极品视频| 一级黄色大片视频| 噜噜噜91成人网| 77777亚洲午夜久久多人| 国产系列精品av| 黄色av成人| 欧美极品少妇与黑人| 激情综合网五月天| 欧美另类女人| 久久久久国色av免费观看性色| 欧美片一区二区| 狠狠综合久久| 97久久精品国产| 97久久久久久久| 久久美女性网| 国产精品久久久久久搜索| 中文字幕免费高清网站| 日产欧产美韩系列久久99| 国产成人精品最新| 在线观看日批视频| 国产乱码精品一区二区三 | 永久免费的av网站| 国产美女亚洲精品7777| 欧美mv日韩mv国产网站app| 中文字幕99页| 亚洲欧美日本伦理| 尤物99国产成人精品视频| а天堂中文在线资源| 欧美一区网站| 68精品国产免费久久久久久婷婷| 五月天激情国产综合婷婷婷| 日韩高清不卡一区二区| 成人一区二区电影| 六月婷婷综合网| 久久久噜噜噜久久人人看 | 亚洲一区二区成人| 国产精品久久久久久久久久久久 | 欧美日韩免费看片| 欧美久久久久久久久| 久久久久亚洲av成人网人人软件| 天海翼精品一区二区三区| 国产亚洲欧美日韩精品| 91麻豆免费视频网站| 日韩一级网站| 国产一区二区在线播放| 男人天堂综合网| 国产嫩草影院久久久久| 国产午夜精品视频一区二区三区| 亚洲女同志freevdieo| 制服.丝袜.亚洲.另类.中文 | 国产精品看片你懂得 | 日韩专区在线视频| 动漫一区二区在线| av在线免费观看网| 亚洲成av人片在线观看无码| www.涩涩涩| 嫩草国产精品入口| 久久福利视频导航| 日韩欧美在线观看免费| 国产成a人无v码亚洲福利| 欧洲在线视频一区| 98色花堂精品视频在线观看| 欧美日韩视频在线第一区 | 中文字幕亚洲欧美在线不卡| 欧美乱大交xxxxx潮喷l头像| 在线免费成人| 亚洲香蕉成人av网站在线观看| 亚洲国产精品免费在线观看| 久久国产免费| 国产亚洲第一区| 成人在线app| 欧美午夜电影在线播放| 日韩 中文字幕| 韩国久久久久| 亚洲一区二区三区四区在线播放| 成年人在线观看| 欧美午夜精品久久久久久人妖 | 久久精品视频一区二区三区| 老子影院午夜伦不卡大全| 成人激情久久| 久久精品久久久久电影| 久久午夜鲁丝片| 久久一日本道色综合| www.日本少妇| 9l视频自拍九色9l视频成人| 欧美精品生活片| 国产尤物在线观看| 国产精品欧美极品| 国产免费999| 精品国产乱码久久久久久果冻传媒| 性欧美亚洲xxxx乳在线观看| www.日本在线观看| 亚洲女人****多毛耸耸8| 免费黄频在线观看| 午夜av一区| 91精品视频在线| 老司机在线永久免费观看| 欧美私模裸体表演在线观看| 西西444www无码大胆| 久久一区二区三区四区五区| 麻豆成人小视频| 亚洲十八**毛片| 亚洲欧美在线一区| 69xxxx国产| 亚洲国产精华液网站w| 热久久精品免费视频| 国产一区2区| 国产精品va在线播放| 成人在线免费电影| 欧美片在线播放| 人妻人人澡人人添人人爽| 国产呦萝稀缺另类资源| 久久久久久久香蕉| 久久97精品| 欧美在线一区二区视频| 福利片在线看| 51精品久久久久久久蜜臀| 国产午夜手机精彩视频| 国产99久久久国产精品潘金| 成人免费毛片在线观看| 日本天堂一区| 国产精品一区二区三区久久久| 一级毛片视频在线| 日韩女优av电影| 欧美一区二区激情视频| 国产精品乱人伦| wwwxx日本| 天堂在线一区二区| 免费观看中文字幕| 九九热hot精品视频在线播放 | 亚洲国产精品无码久久久| 亚洲欧洲韩国日本视频| 国产国语老龄妇女a片| 羞羞答答国产精品www一本| 视频一区二区综合| 日韩精品一区二区三区中文在线| 国内偷自视频区视频综合 | 欧美激情久久久久| 免费黄色片在线观看| 欧美精品久久一区| 日韩乱码人妻无码中文字幕| 日本一二三不卡| 美女露出粉嫩尿囗让男人桶| 久久久久久久尹人综合网亚洲| 人人妻人人澡人人爽精品欧美一区| 澳门成人av| 国产精品久久久久久久久久久久 | 91亚洲国产| 精品一区二区不卡| 白嫩亚洲一区二区三区| 91爱视频在线| 草莓福利社区在线| 亚洲午夜精品视频| 刘亦菲久久免费一区二区| 欧洲一区二区三区在线| 欧美日韩国产精品一区二区三区| 久久精品一区二区| 在线观看亚洲免费视频| 久久成人av少妇免费| 国内自拍在线观看| 欧美三级特黄| 免费观看黄色的网站| 亚洲最好看的视频| 国产精品视频免费一区二区三区| 欧美成人家庭影院| 日本高清不卡的在线| 国产一线二线在线观看| 色偷偷噜噜噜亚洲男人的天堂 | 日韩有码在线视频| 国际av在线| 亚洲国产精品嫩草影院久久| 国产精品视频a| 欧美视频在线一区二区三区 | 另类中文字幕网| 男人透女人免费视频| 91久久综合| 17c丨国产丨精品视频| 久久国产亚洲| 日韩国产精品一区二区| 西野翔中文久久精品国产| 国产精品永久入口久久久| 日韩在线成人| 亚洲中国色老太| 久久久久久久久久久久电影| 国产欧洲精品视频| 国产精品xxx| 国产精品福利在线观看| av资源亚洲| 日本精品久久久| 欧美成人h版| 国产成人精品一区二区| 黑人巨大精品欧美一区二区桃花岛| 91精品国产成人| 天堂а√在线最新版中文在线| 国内精品久久久久影院优 | 亚洲激情中文在线| 精品嫩模一区二区三区| 欧美 日韩 国产一区二区在线视频 | 偷拍欧美精品| 黄色网zhan| 欧美福利影院| 亚洲理论电影在线观看| 最新国产乱人伦偷精品免费网站| 日本香蕉视频在线观看| 亚洲国产网站| 成人一级片网站| 喷水一区二区三区| 自拍偷拍一区二区三区四区| 精品一二线国产| 人妻巨大乳一二三区| 成人免费毛片app| 亚洲蜜桃精久久久久久久久久久久| 91伊人久久大香线蕉| 日韩精品电影一区二区| 国产精品青草久久| 真实国产乱子伦对白在线| 亚洲国产欧美日韩另类综合| 欧美日韩综合在线观看| 欧美影院一区二区| 国产三区在线播放| 亚洲国产天堂久久国产91| 你懂的在线网址| zzijzzij亚洲日本成熟少妇| 怡红院在线播放| 91国产精品91| 国产成人精品一区二区三区在线 | 红桃成人av在线播放| 中文字幕精品一区日韩| 韩国自拍一区| wwww.国产| 国产超碰在线一区| 在线观看国产精品一区| 亚洲欧美日韩电影| av中文在线播放| 欧美精品v日韩精品v韩国精品v| 亚洲经典一区二区三区| 亚洲欧美在线第一页| 在线xxxx| 国产成人精品在线观看| 欧美影院精品| 日韩欧美一区二区三区四区 | 日韩va在线观看| 99精品久久99久久久久| 日本成人免费在线观看| 亚洲不卡一区二区三区| 中文字幕一区二区三区波野结 | 亚洲精品国产熟女久久久| 亚洲欧美另类图片小说| 久草手机在线视频| 日韩一区二区三区电影| 黄色在线视频观看网站| 欧美高跟鞋交xxxxhd| 国产黄色精品| 久久精精品视频| 欧美激情1区| 午夜在线观看av| 91在线观看免费视频| 精品一区在线观看视频| 在线免费观看日本一区| 日日夜夜精品免费| 久久伊人精品天天| 欧洲av一区二区| 久久精品国产综合精品| 欧美1级日本1级| 天天干天天av| 国产女主播一区| 91午夜精品亚洲一区二区三区| 日韩精品一区在线| 国产精品久久久久久福利| 国产成人精品久久二区二区| 久久亚洲道色| 91成人综合网| 国产成人在线色| 久久人妻无码aⅴ毛片a片app| 欧美在线一二三| 国产在线视频资源| 欧美一级免费视频| 欧美人体视频| www国产精品内射老熟女| 国产v综合v亚洲欧| 久久97人妻无码一区二区三区| 制服丝袜中文字幕亚洲| 麻豆系列在线观看| 国产欧美日韩精品丝袜高跟鞋| 国产欧美亚洲精品a| 成人三级视频在线播放| www国产成人免费观看视频 深夜成人网| 久久久久香蕉视频| 日韩欧美国产1| 人人澡人人添人人爽一区二区| 亚洲最大成人网色| 伊人久久大香线| 中文字幕avav| 亚洲你懂的在线视频| aaa一区二区| 欧美黑人巨大精品一区二区| 一区二区视频| av日韩一区二区三区| jvid福利写真一区二区三区| 国产精品免费av一区二区| 日韩精品www| 欧美精品高清| 午夜一区二区三区| 精品一区二区精品| 久久久无码一区二区三区| 精品国产乱码久久久久久老虎| 2020国产在线| 欧美日韩在线观看一区| 日韩国产在线观看一区| 91免费在线看片| 欧美一区二区三区精品| 草莓视频丝瓜在线观看丝瓜18| 极品日韩久久| 青青草91视频| 免费在线观看一级片| 欧美精品一区二区三区四区| 女人高潮被爽到呻吟在线观看| 欧美日韩无遮挡| 男人的天堂久久精品| 亚洲视频重口味| 337p日本欧洲亚洲大胆精品 | av免费在线观| 国产一区二区三区无遮挡| 男人天堂欧美日韩| 永久免费看片视频教学| 欧美草草影院在线视频| 日韩欧美看国产| 自拍偷拍亚洲色图欧美| 成人一区二区三区视频在线观看| 依依成人综合网| 日韩视频免费看| 女同另类激情重口| 在线免费观看视频黄| 一区二区高清视频在线观看| 日韩欧美亚洲系列| 亚洲va久久久噜噜噜久久天堂| 日韩午夜精品| 三级在线观看免费大全| 日韩av中文字幕在线播放| 日韩大陆av| 国产美女主播在线播放| 国产精品色呦呦| 天堂8在线视频| 成人中文字幕+乱码+中文字幕| 99精品视频免费| 国产又粗又硬又长又爽| 日韩精品免费电影| 色悠久久久久综合先锋影音下载| 日韩av播放器| 午夜精品免费在线观看| 欧美成人三区| 日韩欧美精品一区二区| 白白色亚洲国产精品|