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

線上故障排查全套路,拿走不謝

安全 應用安全
線上故障主要會包括 CPU、磁盤、內存以及網絡問題,而大多數故障可能會包含不止一個層面的問題,所以進行排查時候盡量四個方面依次排查一遍。

 線上故障主要會包括 CPU、磁盤、內存以及網絡問題,而大多數故障可能會包含不止一個層面的問題,所以進行排查時候盡量四個方面依次排查一遍。

 

 

[[326405]]

圖片來自 Pexels

同時例如 jstack、jmap 等工具也是不囿于一個方面的問題的,基本上出問題就是 df、free、top 三連,然后依次 jstack、jmap 伺候,具體問題具體分析即可。

CPU

一般來講我們首先會排查 CPU 方面的問題。CPU 異常往往還是比較好定位的。原因包括業務邏輯問題(死循環)、頻繁 GC 以及上下文切換過多。

而最常見的往往是業務邏輯(或者框架邏輯)導致的,可以使用 jstack 來分析對應的堆棧情況。

①使用 jstack 分析 CPU 問題

我們先用 ps 命令找到對應進程的 pid(如果你有好幾個目標進程,可以先用 top 看一下哪個占用比較高)。

接著用top -H -p pid來找到 CPU 使用率比較高的一些線程:

 

 

然后將占用最高的 pid 轉換為 16 進制 printf '%x\n' pid 得到 nid:

 

 

接著直接在 jstack 中找到相應的堆棧信息 jstack pid |grep 'nid' -C5 –color:

 

 

可以看到我們已經找到了 nid 為 0x42 的堆棧信息,接著只要仔細分析一番即可。

當然更常見的是我們對整個 jstack 文件進行分析,通常我們會比較關注 WAITING 和 TIMED_WAITING 的部分,BLOCKED 就不用說了。

我們可以使用命令 cat jstack.log | grep "java.lang.Thread.State" | sort -nr | uniq -c 來對 jstack 的狀態有一個整體的把握,如果 WAITING 之類的特別多,那么多半是有問題啦。

 

 

②頻繁 GC

當然我們還是會使用 jstack 來分析問題,但有時候我們可以先確定下 GC 是不是太頻繁。

使用 jstat -gc pid 1000 命令來對 GC 分代變化情況進行觀察,1000 表示采樣間隔(ms),S0C/S1C、S0U/S1U、EC/EU、OC/OU、MC/MU 分別代表兩個 Survivor 區、Eden 區、老年代、元數據區的容量和使用量。

YGC/YGT、FGC/FGCT、GCT 則代表 YoungGc、FullGc 的耗時和次數以及總耗時。

如果看到 GC 比較頻繁,再針對 GC 方面做進一步分析,具體可以參考一下 GC章節的描述。

 

 

③上下文切換

針對頻繁上下文問題,我們可以使用 vmstat 命令來進行查看:

 

 

cs(context switch)一列則代表了上下文切換的次數。如果我們希望對特定的 pid 進行監控那么可以使用 pidstat -w pid 命令,cswch 和 nvcswch 表示自愿及非自愿切換。

 

 

磁盤

磁盤問題和 CPU 一樣是屬于比較基礎的。首先是磁盤空間方面,我們直接使用 df -hl 來查看文件系統狀態:

 

 

更多時候,磁盤問題還是性能上的問題。我們可以通過 iostatiostat -d -k -x 來進行分析:

 

 

最后一列 %util 可以看到每塊磁盤寫入的程度,而 rrqpm/s 以及 wrqm/s 分別表示讀寫速度,一般就能幫助定位到具體哪塊磁盤出現問題了。

另外我們還需要知道是哪個進程在進行讀寫,一般來說開發自己心里有數,或者用 iotop 命令來進行定位文件讀寫的來源。

 

 

不過這邊拿到的是 tid,我們要轉換成 pid,可以通過 readlink 來找到 pidreadlink -f /proc/*/task/tid/../..。

 

 

找到 pid 之后就可以看這個進程具體的讀寫情況 cat /proc/pid/io:

 

 

我們還可以通過 lsof 命令來確定具體的文件讀寫情況 lsof -p pid:

 

 

內存

內存問題排查起來相對比 CPU 麻煩一些,場景也比較多。主要包括 OOM、GC 問題和堆外內存。

一般來講,我們會先用 free 命令先來檢查一發內存的各種情況:

 

 

堆內內存

內存問題大多還都是堆內內存問題。表象上主要分為 OOM 和 Stack Overflow。

①OOM

JMV 中的內存不足,OOM 大致可以分為以下幾種:

Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread

這個意思是沒有足夠的內存空間給線程分配 Java 棧,基本上還是線程池代碼寫的有問題,比如說忘記 shutdown,所以說應該首先從代碼層面來尋找問題,使用 jstack 或者 jmap。

如果一切都正常,JVM 方面可以通過指定 Xss 來減少單個 thread stack 的大小。

另外也可以在系統層面,可以通過修改 /etc/security/limits.confnofile 和 nproc 來增大 os 對線程的限制。

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

這個意思是堆的內存占用已經達到 -Xmx 設置的最大值,應該是最常見的的 OOM 錯誤了。

解決思路仍然是先應該在代碼中找,懷疑存在內存泄漏,通過 jstack 和 jmap 去定位問題。如果說一切都正常,才需要通過調整 Xmx 的值來擴大內存。

Caused by: java.lang.OutOfMemoryError: Meta space

這個意思是元數據區的內存占用已經達到 XX:MaxMetaspaceSize 設置的最大值,排查思路和上面的一致,參數方面可以通過 XX:MaxPermSize 來進行調整(這里就不說 1.8 以前的永久代了)。

②Stack Overflow

棧內存溢出,這個大家見到也比較多。

Exception in thread "main" java.lang.StackOverflowError

表示線程棧需要的內存大于 Xss 值,同樣也是先進行排查,參數方面通過Xss來調整,但調整的太大可能又會引起 OOM。

③使用 JMAP 定位代碼內存泄漏

上述關于 OOM 和 Stack Overflow 的代碼排查方面,我們一般使用 JMAPjmap -dump:format=b,file=filename pid 來導出 dump 文件:

通過 mat(Eclipse Memory Analysis Tools)導入 dump 文件進行分析,內存泄漏問題一般我們直接選 Leak Suspects 即可,mat 給出了內存泄漏的建議。

另外也可以選擇 Top Consumers 來查看最大對象報告。和線程相關的問題可以選擇 thread overview 進行分析。

除此之外就是選擇 Histogram 類概覽來自己慢慢分析,大家可以搜搜 mat 的相關教程。

日常開發中,代碼產生內存泄漏是比較常見的事,并且比較隱蔽,需要開發者更加關注細節。

比如說每次請求都 new 對象,導致大量重復創建對象;進行文件流操作但未正確關閉;手動不當觸發 GC;ByteBuffer 緩存分配不合理等都會造成代碼 OOM。

另一方面,我們可以在啟動參數中指定 -XX:+HeapDumpOnOutOfMemoryError 來保存 OOM 時的 dump 文件。

④GC 問題和線程

GC 問題除了影響 CPU 也會影響內存,排查思路也是一致的。一般先使用 jstat 來查看分代變化情況,比如 youngGC 或者 FullGC 次數是不是太多呀;EU、OU 等指標增長是不是異常呀等。

線程的話太多而且不被及時 GC 也會引發 OOM,大部分就是之前說的 unable to create new native thread。

除了 jstack 細細分析 dump 文件外,我們一般先會看下總體線程,通過 pstreee -p pid |wc -l。

或者直接通過查看 /proc/pid/task 的數量即為線程數量。

堆外內存

如果碰到堆外內存溢出,那可真是太不幸了。首先堆外內存溢出表現就是物理常駐內存增長快,報錯的話視使用方式都不確定。

如果由于使用 Netty 導致的,那錯誤日志里可能會出現 OutOfDirectMemoryError 錯誤,如果直接是 DirectByteBuffer,那會報 OutOfMemoryError: Direct buffer memory。

堆外內存溢出往往是和 NIO 的使用相關,一般我們先通過 pmap 來查看下進程占用的內存情況 pmap -x pid | sort -rn -k3 | head -30,這段意思是查看對應 pid 倒序前 30 大的內存段。

這邊可以再一段時間后再跑一次命令看看內存增長情況,或者和正常機器比較可疑的內存段在哪里。

我們如果確定有可疑的內存端,需要通過 gdb 來分析 gdb --batch --pid {pid} -ex "dump memory filename.dump {內存起始地址} {內存起始地址+內存塊大小}"。

獲取 dump 文件后可用 heaxdump 進行查看 hexdump -C filename | less,不過大多數看到的都是二進制亂碼。

NMT 是 Java7U40 引入的 HotSpot 新特性,配合 jcmd 命令我們就可以看到具體內存組成了。

需要在啟動參數中加入 -XX:NativeMemoryTracking=summary 或者 -XX:NativeMemoryTracking=detail,會有略微性能損耗。

一般對于堆外內存緩慢增長直到爆炸的情況來說,可以先設一個基線 jcmd pid VM.native_memory baseline。

然后等放一段時間后再去看看內存增長的情況,通過 jcmd pid VM.native_memory detail.diff(summary.diff) 做一下 summary 或者 detail 級別的 diff。

可以看到 jcmd 分析出來的內存十分詳細,包括堆內、線程以及 GC(所以上述其他內存異常其實都可以用 nmt 來分析),這邊堆外內存我們重點關注 Internal 的內存增長,如果增長十分明顯的話那就是有問題了。

detail 級別的話還會有具體內存段的增長情況,如下圖:

此外在系統層面,我們還可以使用 strace 命令來監控內存分配 strace -f -e "brk,mmap,munmap" -p pid。

這邊內存分配信息主要包括了 pid 和內存地址:

不過其實上面那些操作也很難定位到具體的問題點,關鍵還是要看錯誤日志棧,找到可疑的對象,搞清楚它的回收機制,然后去分析對應的對象。

比如 DirectByteBuffer 分配內存的話,是需要 Full GC 或者手動 system.gc 來進行回收的(所以最好不要使用-XX:+DisableExplicitGC)。

那么其實我們可以跟蹤一下 DirectByteBuffer 對象的內存情況,通過 jmap -histo:live pid 手動觸發 Full GC 來看看堆外內存有沒有被回收。

如果被回收了,那么大概率是堆外內存本身分配的太小了,通過 -XX:MaxDirectMemorySize 進行調整。

如果沒有什么變化,那就要使用 jmap 去分析那些不能被 GC 的對象,以及和 DirectByteBuffer 之間的引用關系了。

GC 問題

堆內內存泄漏總是和 GC 異常相伴。不過 GC 問題不只是和內存問題相關,還有可能引起 CPU 負載、網絡問題等系列并發癥,只是相對來說和內存聯系緊密些,所以我們在此單獨總結一下 GC 相關問題。

我們在 CPU 章介紹了使用 jstat 來獲取當前 GC 分代變化信息。

而更多時候,我們是通過 GC 日志來排查問題的,在啟動參數中加上 -verbose:gc,-XX:+PrintGCDetails,-XX:+PrintGCDateStamps,-XX:+PrintGCTimeStamps 來開啟 GC 日志。

常見的 Young GC、Full GC 日志含義在此就不做贅述了。針對 GC 日志,我們就能大致推斷出 youngGC 與 Full GC 是否過于頻繁或者耗時過長,從而對癥下藥。

我們下面將對 G1 垃圾收集器來做分析,這邊也建議大家使用 G1-XX:+UseG1GC。

①youngGC 過頻繁

youngGC 頻繁一般是短周期小對象較多,先考慮是不是 Eden 區/新生代設置的太小了,看能否通過調整 -Xmn、-XX:SurvivorRatio 等參數設置來解決問題。

如果參數正常,但是 youngGC 頻率還是太高,就需要使用 Jmap 和 MAT 對 dump 文件進行進一步排查了。

②youngGC 耗時過長

耗時過長問題就要看 GC 日志里耗時耗在哪一塊了。以 G1 日志為例,可以關注 Root Scanning、Object Copy、Ref Proc 等階段。

Ref Proc 耗時長,就要注意引用相關的對象。Root Scanning 耗時長,就要注意線程數、跨代引用。

Object Copy 則需要關注對象生存周期。而且耗時分析它需要橫向比較,就是和其他項目或者正常時間段的耗時比較。

比如說圖中的 Root Scanning 和正常時間段比增長較多,那就是起的線程太多了。

③觸發 Full GC

G1 中更多的還是 mixedGC,但 mixedGC 可以和 youngGC 思路一樣去排查。

觸發 Full GC 了一般都會有問題,G1 會退化使用 Serial 收集器來完成垃圾的清理工作,暫停時長達到秒級別,可以說是半跪了。

FullGC 的原因可能包括以下這些,以及參數調整方面的一些思路:

  • 并發階段失?。涸诓l標記階段,MixGC 之前老年代就被填滿了,那么這時候 G1 就會放棄標記周期。

這種情況,可能就需要增加堆大小,或者調整并發標記線程數 -XX:ConcGCThreads。

  • 晉升失?。涸?GC 的時候沒有足夠的內存供存活/晉升對象使用,所以觸發了 Full GC。

這時候可以通過 -XX:G1ReservePercent 來增加預留內存百分比,減少 -XX:InitiatingHeapOccupancyPercent 來提前啟動標記,-XX:ConcGCThreads 來增加標記線程數也是可以的。

  • 大對象分配失?。捍髮ο笳也坏胶线m的 Region 空間進行分配,就會進行 Full GC,這種情況下可以增大內存或者增大 -XX:G1HeapRegionSize。
  • 程序主動執行 System.gc():不要隨便寫就對了。

另外,我們可以在啟動參數中配置 -XX:HeapDumpPath=/xxx/dump.hprof 來 dump fullGC 相關的文件,并通過 jinfo 來進行 GC 前后的 dump:

jinfo -flag +HeapDumpBeforeFullGC pid jinfo -flag +HeapDumpAfterFullGC pid

這樣得到兩份 dump 文件,對比后主要關注被 GC 掉的問題對象來定位問題。

網絡

涉及到網絡層面的問題一般都比較復雜,場景多,定位難,成為了大多數開發的噩夢,應該是最復雜的了。

這里會舉一些例子,并從 TCP 層、應用層以及工具的使用等方面進行闡述。

①超時

超時錯誤大部分處在應用層面,所以這塊著重理解概念。超時大體可以分為連接超時和讀寫超時,某些使用連接池的客戶端框架還會存在獲取連接超時和空閑連接清理超時。

讀寫超時:readTimeout/writeTimeout,有些框架叫做 so_timeout 或者 socketTimeout,均指的是數據讀寫超時。

注意這邊的超時大部分是指邏輯上的超時。soa 的超時指的也是讀超時。讀寫超時一般都只針對客戶端設置。

連接超時:connectionTimeout,客戶端通常指與服務端建立連接的最大時間。

服務端這邊 connectionTimeout 就有些五花八門了,Jetty 中表示空閑連接清理時間,Tomcat 則表示連接維持的最大時間。

其他:包括連接獲取超時 connectionAcquireTimeout 和空閑連接清理超時 idleConnectionTimeout。多用于使用連接池或隊列的客戶端或服務端框架。

我們在設置各種超時時間中,需要確認的是盡量保持客戶端的超時小于服務端的超時,以保證連接正常結束。

在實際開發中,我們關心最多的應該是接口的讀寫超時了。如何設置合理的接口超時是一個問題。

如果接口超時設置的過長,那么有可能會過多地占用服務端的 TCP 連接。而如果接口設置的過短,那么接口超時就會非常頻繁。

服務端接口明明 RT 降低,但客戶端仍然一直超時又是另一個問題。這個問題其實很簡單,客戶端到服務端的鏈路包括網絡傳輸、排隊以及服務處理等,每一個環節都可能是耗時的原因。

②TCP 隊列溢出

TCP 隊列溢出是個相對底層的錯誤,它可能會造成超時、RST 等更表層的錯誤。因此錯誤也更隱蔽,所以我們單獨說一說。

如上圖所示,這里有兩個隊列:

  • syns queue(半連接隊列)
  • accept queue(全連接隊列)

三次握手,在 server 收到 client 的 syn 后,把消息放到 syns queue,回復 syn+ack 給 client,server 收到 client 的 ack。

如果這時 accept queue 沒滿,那就從 syns queue 拿出暫存的信息放入 accept queue 中,否則按 tcp_abort_on_overflow 指示的執行。

tcp_abort_on_overflow 0 表示如果三次握手第三步的時候 accept queue 滿了那么 server 扔掉 client 發過來的 ack。

tcp_abort_on_overflow 1 則表示第三步的時候如果全連接隊列滿了,server 發送一個 RST 包給 client,表示廢掉這個握手過程和這個連接,意味著日志里可能會有很多 connection reset/connection reset by peer。

那么在實際開發中,我們怎么能快速定位到 TCP 隊列溢出呢?

netstat 命令,執行 netstat -s | egrep "listen|LISTEN":

如上圖所示,overflowed 表示全連接隊列溢出的次數,sockets dropped 表示半連接隊列溢出的次數。

ss 命令,執行 ss -lnt:

上面看到 Send-Q 表示第三列的 Listen 端口上的全連接隊列最大為 5,第一列 Recv-Q 為全連接隊列當前使用了多少。

接著我們看看怎么設置全連接、半連接隊列大小吧:全連接隊列的大小取決于 min(backlog,somaxconn)。

Backlog 是在 Socket 創建的時候傳入的,somaxconn 是一個 OS 級別的系統參數。而半連接隊列的大小取決于 max(64, /proc/sys/net/ipv4/tcp_max_syn_backlog)。

在日常開發中,我們往往使用 Servlet 容器作為服務端,所以我們有時候也需要關注容器的連接隊列大小。

在 Tomcat 中 backlog 叫做 acceptCount,在 Jetty 里面則是 acceptQueueSize。

③RST 異常

RST 包表示連接重置,用于關閉一些無用的連接,通常表示異常關閉,區別于四次揮手。

在實際開發中,我們往往會看到 connection reset/connection reset by peer 錯誤,這種情況就是 RST 包導致的。

端口不存在:如果像不存在的端口發出建立連接 SYN 請求,那么服務端發現自己并沒有這個端口則會直接返回一個 RST 報文,用于中斷連接。

主動代替 FIN 終止連接:一般來說,正常的連接關閉都是需要通過 FIN 報文實現,然而我們也可以用 RST 報文來代替 FIN,表示直接終止連接。

實際開發中,可設置 SO_LINGER 數值來控制,這種往往是故意的,來跳過 TIMED_WAIT,提供交互效率,不閑就慎用。

客戶端或服務端有一邊發生了異常,該方向對端發送 RST 以告知關閉連接:我們上面講的 TCP 隊列溢出發送 RST 包其實也是屬于這一種。

這種往往是由于某些原因,一方無法再能正常處理請求連接了(比如程序崩了,隊列滿了),從而告知另一方關閉連接。

接收到的 TCP 報文不在已知的 TCP 連接內:比如,一方機器由于網絡實在太差 TCP 報文失蹤了,另一方關閉了該連接,然后過了許久收到了之前失蹤的 TCP 報文,但由于對應的 TCP 連接已不存在,那么會直接發一個 RST 包以便開啟新的連接。

一方長期未收到另一方的確認報文,在一定時間或重傳次數后發出 RST 報文這種大多也和網絡環境相關了,網絡環境差可能會導致更多的 RST 報文。

之前說過 RST 報文多會導致程序報錯,在一個已關閉的連接上讀操作會報 connection reset,而在一個已關閉的連接上寫操作則會報 connection reset by peer。

通常我們可能還會看到 broken pipe 錯誤,這是管道層面的錯誤,表示對已關閉的管道進行讀寫,往往是在收到 RST,報出 connection reset 錯后繼續讀寫數據報的錯,這個在 glibc 源碼注釋中也有介紹。

我們在排查故障時候怎么確定有 RST 包的存在呢?當然是使用 tcpdump 命令進行抓包,并使用 wireshark 進行簡單分析了。

tcpdump -i en0 tcp -w xxx.cap,en0 表示監聽的網卡:

接下來我們通過 wireshark 打開抓到的包,可能就能看到如下圖所示,紅色的就表示 RST 包了。

④TIME_WAIT 和 CLOSE_WAIT

TIME_WAIT 和 CLOSE_WAIT 是啥意思相信大家都知道。

在線上時,我們可以直接用命令 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'來查看 time-wait 和 close_wait 的數量。

用 ss 命令會更快 ss -ant | awk '{++S[$1]} END {for(a in S) print a, S[a]}':

TIME_WAIT:time_wait 的存在一是為了丟失的數據包被后面連接復用,二是為了在 2MSL 的時間范圍內正常關閉連接。

它的存在其實會大大減少 RST 包的出現。過多的 time_wait 在短連接頻繁的場景比較容易出現。

這種情況可以在服務端做一些內核參數調優:

#表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認為0,表示關閉net.ipv4.tcp_tw_reuse = 1#表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉net.ipv4.tcp_tw_recycle = 1

當然我們不要忘記在 NAT 環境下因為時間戳錯亂導致數據包被拒絕的坑了,另外的辦法就是改小 tcp_max_tw_buckets,超過這個數的 time_wait 都會被干掉,不過這也會導致報 time wait bucket table overflow 的錯。

CLOSE_WAIT:close_wait 往往都是因為應用程序寫的有問題,沒有在 ACK 后再次發起 FIN 報文。

close_wait 出現的概率甚至比 time_wait 要更高,后果也更嚴重。往往是由于某個地方阻塞住了,沒有正常關閉連接,從而漸漸地消耗完所有的線程。

想要定位這類問題,最好是通過 jstack 來分析線程堆棧來排查問題,具體可參考上述章節。這里僅舉一個例子。

開發同學說應用上線后 CLOSE_WAIT 就一直增多,直到掛掉為止,jstack 后找到比較可疑的堆棧是大部分線程都卡在了 countdownlatch.await 方法。

找開發同學了解后得知使用了多線程但是確沒有 catch 異常,修改后發現異常僅僅是最簡單的升級 SDK 后常出現的 class not found。

作者:fredalxin

編輯:陶家龍

出處:https://fredal.xin/java-error-check

 

責任編輯:武曉燕 來源: fredal.xin
相關推薦

2018-10-18 13:59:36

2022-05-20 08:17:43

Java日志

2021-08-31 10:45:28

故障內存問題排查

2018-07-03 16:07:50

2020-07-06 10:38:44

辦公軟件工具效率

2016-12-23 17:20:56

2022-05-07 10:14:07

Python數據可視化

2019-03-29 10:22:08

Linux系統故障技巧

2019-09-17 08:56:29

TomcatJVM性能

2021-11-16 23:11:24

Java微信搶紅包

2018-06-27 07:21:58

2019-12-04 18:44:00

華為Mate X

2020-03-01 13:47:21

Excel數據分析數據處理

2020-10-20 17:15:05

Java故障排查命令

2020-11-12 11:00:42

運維IT架構

2024-08-14 14:20:00

2018-06-08 16:33:34

大數據游戲吃雞

2019-06-24 08:17:55

CPUFullGCJava

2023-12-05 07:12:39

優化排查性能
點贊
收藏

51CTO技術棧公眾號

国产精品 日产精品 欧美精品| 日韩有码中文字幕在线| 亚洲视频 欧洲视频| 亚洲精品日产aⅴ| 久久久久久久久99| 免费看成人哺乳视频网站| 欧美高清视频不卡网| 亚洲国产精品无码av| 国产精品久久久久一区二区国产| 韩国成人福利片在线播放| 国内成人精品一区| 一区二区三区在线播放视频| 成人资源在线| 欧美日韩久久一区二区| 无码专区aaaaaa免费视频| 91大神在线网站| 波多野结衣精品在线| 国产日韩欧美综合| 久久久午夜影院| 婷婷综合久久| 亚洲天堂免费视频| 在线精品视频播放| 国产原创一区| 欧美视频一区二区三区…| 精品一区二区成人免费视频| 极品美乳网红视频免费在线观看| 国产高清成人在线| 国产剧情日韩欧美| 销魂美女一区二区| 亚洲精选在线| 欧美疯狂做受xxxx高潮| 日本伦理一区二区三区| 九九久久精品| 日韩电影网在线| 中文字幕第10页| 亚洲tv在线| 在线观看亚洲专区| 日韩人妻精品无码一区二区三区| 欧美草逼视频| 亚洲欧美偷拍三级| a级黄色片网站| 在线看免费av| 日本一区二区综合亚洲| 欧美色欧美亚洲另类七区| 日韩在线观看视频一区二区三区| 国产乱码字幕精品高清av | 亚洲精品一线| 一区精品在线播放| 新呦u视频一区二区| 国内三级在线观看| 久久久91精品国产一区二区精品| 另类欧美小说| 蜜芽tv福利在线视频| 久久综合九色综合久久久精品综合| 国产精品亚洲综合| 人妻妺妺窝人体色www聚色窝| 成人性色生活片免费看爆迷你毛片| 91青青草免费在线看| 国产丰满果冻videossex| 国产一区二区调教| 2019国产精品视频| 亚洲欧美另类综合| 成人av免费在线播放| 精品国产aⅴ麻豆| 青青青免费视频在线2| 久久久久久久网| 色女孩综合网| 秋霞影院午夜丰满少妇在线视频| 亚洲欧洲精品一区二区三区 | gogogo高清在线观看免费完整版| 欧美国产精品中文字幕| 一本一道久久a久久精品综合| 精品国产99久久久久久| 亚洲靠逼com| 男人添女人荫蒂免费视频| 极品av在线| 欧美影片第一页| www.com久久久| 1313精品午夜理伦电影| 精品亚洲国产视频| 性少妇xx生活| 欧美精品三区| 日韩av快播网址| 一本色道久久综合无码人妻| 国产在线精品一区在线观看麻豆| 国产一区二区精品在线| 国产精品99999| 亚洲欧美日韩在线| 免费 成 人 黄 色| 91精品店在线| 欧美不卡一二三| 黄瓜视频污在线观看| 久久视频国产| 国内精品久久久久久久久| 国产成人精品777777| 国产麻豆午夜三级精品| 欧美xxxx黑人又粗又长密月| 免费在线观看黄色| 精品日韩美女的视频高清| 一区二区三区网址| 成人在线超碰| www.日韩不卡电影av| 四虎永久在线精品| 麻豆成人综合网| 国新精品乱码一区二区三区18| 爱久久·www| 亚洲高清不卡在线| 亚洲欧美自拍另类日韩| 久久悠悠精品综合网| 丝袜情趣国产精品| 国产成人无码精品久在线观看| 捆绑变态av一区二区三区| 好看的日韩精品| 国产在线观看免费麻豆| 一本到三区不卡视频| 亚洲区 欧美区| 凹凸成人精品亚洲精品密奴| 26uuu亚洲国产精品| 国产av无码专区亚洲a∨毛片| 国产午夜精品久久久久久久 | 手机在线免费av| 欧美亚洲国产一区二区三区va| 亚洲av成人精品一区二区三区 | 人人妻人人澡人人爽欧美一区| 国产精品原创视频| 亚洲欧美一区二区三区四区| 国产在线视频99| 国产精品18久久久久| 五月天亚洲综合小说网| 超级碰碰久久| 日韩毛片在线看| 日韩少妇裸体做爰视频| 国产精品91一区二区| 三年中文高清在线观看第6集| 日韩中文影院| 亚洲欧美国产视频| 天堂а√在线中文在线新版| 国产一区二区三区蝌蚪| 中文字幕一区二区三区四区五区六区 | 91捆绑美女网站| 91成人在线观看喷潮教学| 1313精品午夜理伦电影| 色中色综合影院手机版在线观看| 国产精品丝袜黑色高跟鞋| 国产精品欧美极品| xxww在线观看| 999久久久精品国产| 国产精品一区二区久久| av在线免费播放网站| 欧美色图在线观看| 成人欧美一区二区三区黑人一| 精品一区二区三区视频| 在线视频不卡国产| 精品一区91| 欧美激情国产日韩精品一区18| 亚洲成人av综合| 亚洲国产精品一区二区久久恐怖片| 日本天堂在线播放| 亚洲日本视频| 欧美xxxx黑人又粗又长精品| 午夜无码国产理论在线| 中文字幕久久亚洲| 99久久精品国产成人一区二区| 亚洲男女毛片无遮挡| 性生活一级大片| 亚洲人体大胆视频| 日本高清久久一区二区三区| 国产精品扒开腿做爽爽爽视频软件| 国产亚洲精品一区二555| ,一级淫片a看免费| 亚洲综合色噜噜狠狠| 亚洲最大免费视频| 日韩不卡一二三区| 7777在线视频| 美女视频免费精品| 日韩免费在线播放| 日韩大片在线永久免费观看网站| 日韩一区二区不卡| 特一级黄色大片| 欧美经典一区二区| 日本一区二区三区在线免费观看| 亚洲精品社区| 亚洲.欧美.日本.国产综合在线| 国产一区二区高清在线| 久久免费视频网站| 欧美色18zzzzxxxxx| 欧美夫妻性生活| 久久精品视频8| 国产欧美日韩亚州综合 | 国产亚洲一区二区精品| 国产又粗又猛又黄又爽| 亚洲成人动漫av| 国产jizz18女人高潮| 国产不卡视频一区| av污在线观看| 国内精品美女在线观看| 日韩电影免费观看在| 91精品尤物| 国产精品欧美一区二区| segui88久久综合| 在线观看日韩av| 熟妇人妻一区二区三区四区 | 亚洲三级在线免费| www.久久国产| 国产成人综合视频| 91香蕉视频导航| 亚洲三级毛片| 国产成人免费高清视频| 国产精品午夜一区二区三区| 99www免费人成精品| 播放一区二区| 欧美亚洲视频一区二区| 欧美黄色视屏| 日韩在线视频免费观看| 欧美成人片在线| 欧美大片日本大片免费观看| 国产日韩在线免费观看| 欧美色另类天堂2015| 免费毛片在线播放免费| 国产精品福利一区| 国产熟妇久久777777| 丰满少妇久久久久久久| 午夜xxxxx| 蜜臀久久99精品久久久画质超高清| 少妇无码av无码专区在线观看| 欧美在线亚洲综合一区| 亚洲欧美日韩精品综合在线观看| 日韩三区视频| 精品久久久久久亚洲| 一区二区在线免费播放| 91九色国产社区在线观看| 日本一道高清亚洲日美韩| 欧美亚洲一级片| 91丝袜在线| 午夜精品免费视频| 男女视频在线| 欧美精品激情blacked18| 在线观看a级片| 久久久精品国产亚洲| 巨大荫蒂视频欧美大片| 永久免费看mv网站入口亚洲| 黄色在线播放| 亚洲性av网站| 国产日产精品久久久久久婷婷| 亚洲欧美中文另类| 欧美在线观看在线观看| 日韩精品久久久久| 日本天堂影院在线视频| 精品五月天久久| 男人的天堂在线免费视频| 亚洲美女黄色片| 欧美日韩国产综合视频| 亚洲色图色老头| www在线播放| www.亚洲一区| 国产福利视频在线| 欧美激情视频网| 俺来俺也去www色在线观看| 国语自产精品视频在免费| 成入视频在线观看| 欧洲精品在线视频| 日韩av电影资源网| 91亚洲一区精品| 一区二区三区四区精品视频| 久99久在线| 精品视频99| 中文字幕在线亚洲三区| 欧美日韩亚洲一区三区| 久久久久久久午夜| 日韩精品每日更新| 亚洲av无日韩毛片久久| 成人免费看的视频| 亚洲第一成人网站| 国产精品国产成人国产三级| 欧美日韩一级大片| 狠狠躁夜夜躁人人爽天天天天97| 欧美brazzers| 欧美一个色资源| 同心难改在线观看| 日韩在线小视频| 蜜臀av在线播放| 国产999在线观看| 嫩呦国产一区二区三区av| 久久国产精品久久精品国产| 秋霞欧美视频| 蜜桃视频一区二区在线观看| 香蕉国产精品偷在线观看不卡| 日本黄大片一区二区三区| 岛国精品在线观看| 蜜桃av乱码一区二区三区| 亚洲精品国产第一综合99久久| 欧美成人精品欧美一级| 日韩欧美有码在线| 国产黄a三级三级三级| 精品网站999www| av网址在线| 国产精品第七十二页| 91午夜精品| 亚洲成人一区二区三区| 最新成人av网站| 日韩欧美国产片| 91欧美激情一区二区三区成人| 免费高清在线观看电视| 欧美三级xxx| 精品国产免费无码久久久| 亚洲视频在线免费看| 密臀av在线| 成人av电影天堂| 国产剧情一区| 日韩国产欧美亚洲| 国产精品一区二区x88av| 国产精品理论在线| 精品久久久香蕉免费精品视频| 99精品视频免费看| 国产一区二区三区精品久久久| 91超碰在线| 亚洲字幕一区二区| 久久看人人摘| www.日本xxxx| 91香蕉视频mp4| 日本在线观看视频网站| 日韩一区二区免费高清| 五月香视频在线观看| 国产成人精品在线观看| 欧美做受69| 成人午夜视频在线观看免费| 国产高清久久久| 紧身裙女教师波多野结衣| 欧美日韩视频在线观看一区二区三区| 日本福利片在线| 97超级碰碰碰久久久| 国产情侣一区在线| 永久久久久久| 久久精品亚洲| 成都免费高清电影| 一本色道久久加勒比精品| 你懂的在线观看| 欧美亚洲视频一区二区| 亚洲综合图色| 黄色高清无遮挡| 国产日韩欧美制服另类| 中文字幕一区二区人妻视频| 亚洲图片在区色| av在线不卡精品| 色女人综合av| 久久国产精品免费| 美国精品一区二区| 欧美日韩免费不卡视频一区二区三区 | 国产成人午夜高潮毛片| 青娱乐av在线| 精品福利二区三区| 国模私拍一区二区国模曼安| 精选一区二区三区四区五区| 日韩午夜高潮| 亚洲做受高潮无遮挡| 色婷婷综合久久久久中文一区二区| 欧美成人片在线| 国产精品视频最多的网站| 999国产精品999久久久久久| 香蕉视频xxxx| 亚洲成人av一区二区三区| 亚洲色大成网站www| 91精品国产网站| 国产成人ay| 日本免费色视频| 亚洲综合激情网| 性xxxx视频| 国产经典一区二区| 97久久视频| 中国男女全黄大片| 精品美女永久免费视频| 91在线视频免费看| 亚洲在线一区二区| 亚洲精品婷婷| 欧美日韩国产黄色| 欧美一级一级性生活免费录像| av中文字幕在线看| 日韩欧美在线电影| 国产毛片精品视频| caoporn国产| 精品国内亚洲在观看18黄| 久久久久久久久久久久久久久久久久久久| 欧美亚洲一二三区| 国产精品久久久爽爽爽麻豆色哟哟| av在线免费在线观看| 97精品免费视频| 久久五月天小说| 亚洲一级av无码毛片精品| 在线免费视频一区二区| 在线heyzo| 人禽交欧美网站免费| 从欧美一区二区三区| 在线免费观看视频网站| 欧美精品激情blacked18| 精品视频网站| 91超薄肉色丝袜交足高跟凉鞋| 欧美在线一区二区三区| 亚洲婷婷噜噜| 亚洲成人蜜桃| 91免费视频网址|