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

提升內存管理效率,攜程酒店查詢服務輕量化探索和實踐

開發 新聞
本文相對完整的記述了酒店查詢服務在輕量化中的一次優化過程,希望其中的經驗和過程能對讀者有所幫助。

作者簡介

NekoMatryoshka,攜程酒店資深后端開發工程師,主要工作是緩存類組件的開發維護,并對業務應用的排障和優化有所關注。

一、背景和目標

在容器化部署成為主流的現在,降低集群中單個容器的資源需求的意義已經不只限于更少的硬件成本,同時也意味著整個集群更加輕量化,這通常會帶來一系列其他優勢:例如更短的恢復時間,更精確的資源控制和調度,和更快速的伸縮和部署等。但在另一方面,一味的追求壓縮容器配置必然會嚴重影響應用在穩定性、響應耗時和吞吐量等方面的表現,所以輕量化的措施需要在多個性能維度上進行仔細的權衡取舍,以達到一個總體更優的結果。

作為攜程計算量最大的接口之一,酒店查詢服務一直承擔著沉重的硬件成本壓力,僅僅詳情頁集群就包含了千余臺服務器實例和數十TB的Redis資源,因此對應用進行全面的輕量化有著很高的必要性和預期收益。在內存方向上,我們的主要目標是將單個容器的內存從32GB壓縮到16GB,并在以下兩個基本方向上進行了探索:

  • 減少內存增長速度:壓縮本地緩存,減少浮動內存的產生,并對線程,類庫,參數和代碼邏輯進行針對性的優化和調整。
  • 提升內存管理效率:加強JVM等服務依賴的基礎組件其本身的性能。

由于第一個方向需要根據應用的具體代碼實現來分析和排查,普適性相對較差,所以本文將主要分享查詢服務在輕量化中對于內存管理方向上的探索過程和實踐經驗。

二、堆內內存管理

我們的應用原本運行在JDK8的CMS收集器之上,但是在JDK11以后,CMS已經被完全淘汰。于是,要提高堆內的內存管理效率,我們首先嘗試的便是對GC進行升級和調優。因此我們對G1、ZGC和ShenandoahGC等更現代的收集器進行了性能上的測試和對比,來嘗試找出最合適的技術選型。

2.1 垃圾收集器的選型

首先,在JDK17上,ZGC第一次以生產環境可用的狀態登陸了LTS版本,所以我們這次選型起初的目標也是嘗試將應用遷移到ZGC之上。相對于大家熟悉的G1,ZGC最主要的優勢在于其通過著色指針和讀屏障兩個特性,使得用戶線程幾乎可以全程與標記-復制算法并行,基本解決了YGC的STW問題。簡單來說,ZGC在標記過程中會向64位指針的高位4bit中記錄三色標記、重分配標記和可達性標記;當應用線程訪問對象時,讀屏障機制會依據指針狀態和復制表信息去更新對象的地址和狀態。

這樣,即使GC線程正在后臺轉移、復制或清理對象,也可以保證前臺線程能始終訪問到正確的地址,這使得ZGC幾乎可以做到無停頓回收。除此之外,ZGC還向用戶承諾了可擴展性:由于ZGC的停頓時間基本只和初始掃描中GC Roots的數量相關,堆的大小和活躍對象的數量并不會導致停頓時間的增長。

圖片

其次,ShenandoahGC與ZGC同為新一代的零停頓收集器,總體來看,其內存布局非常類似于G1,而并發設計則與ZGC如出一轍,所以我們也將其作為一個可能的備選方案。

ShenandoahGC與ZGC的主要區別在于其使用的是Brook指針而非染色指針:即在對象頭中額

外記錄一個指向復制后正確地址的指針。但是由于額外信息記錄在對象頭中,Brook指針的讀屏障無法在第一次訪問后直接更新正確地址來自我恢復。另一方面,ShenandoahGC的區塊布局和回收階段則與G1非常相似,甚至部分代碼都是直接復用的。其不同主要在于ShenandoahGC利用了一個被稱為連接矩陣的二維數組來取代G1中開銷巨大的記憶集,來解決跨區引用問題:例如區塊N引用了區塊M,則在數組的`[N][M]`坐標打上標記。

最后,作為現在最主流的收集器,同時也是CMS的取代者,G1理所應當的也被我們作為最成熟和穩妥的一個選擇。G1本身的內存布局使得其對可控的停頓耗時和吞吐量的平衡上有較好的兼顧,在理論上使它更適合查詢接口這種會短時間內突然生成大量臨時對象的計算密集型應用。

綜上所述,我們以原本在輕量化前的生產配置(16C32G+JDK1.8+CMS)作為基準,選取了以下幾個組合作為測試方案:

圖片

其他各相關參數都為默認配置。

2.2 G1調優實踐

在橫向比較不同收集器的性能之前,我們首先需要按應用的需求對每個收集器做一些簡單的適配和調整,以發揮這些收集器的全部性能。由于G1是為開箱即用而準備的默認收集器,使用起來相對簡單,基本上只需要簡單設置下堆大小和線程數等參數即可。然而在實際使用中,我們仍然遇到了一些小問題,需要對關鍵某些參數進行控制。

(1)現象1:某個高壓力場景的計算集群的YGC頻率相對較高,GC吞吐量不足,最終甚至會引發FGC。

由于輕量化配置的資源本身就比較緊張,很難通過增加`ConcGCThreads`線程數來提升吞吐量,于是我們嘗試放寬了`MaxGCPauseMillis`來減少G1的回收壓力。作為G1最核心的參數,當`MaxGCPauseMillis`過小時,G1會自動調整其他GC參數來盡可能滿足該目標,進而導致YGC非常頻繁并影響吞吐量。由于各個應用的情況不同,需要開發人員手動進行基準測試來找到最合適的數值:當我們把數值從200調整到300后,平均響應有非常明顯的下降,而繼續上調的邊際效應則很不明顯。

(2)現象2:應用在長時間穩定運行后,老年代突然大量上漲后卻不及時回收,在數小時內老年代都維持高位,擠占年輕代的占比并影響到了YGC的停頓耗時。

由于查詢服務主要是無狀態的計算邏輯,除了一部分本地緩存外大部分的對象都是相對短命的,但是當GC壓力上升的情況下仍然會有大量對象進入老年代。這里我們通過縮小`InitiatingHeapOccupancyPercent`來降低MGC的閾值,讓G1可以及時回收掉進入老年代的短命對象。

除此之外,我們也對JDK8、11和17上的G1進行過縱向對比,發現實際反映到機器性能和響應耗時維度上的區別非常小,在排除掉宿主機本身的硬件區別后幾乎可以忽略不計。最終,由于依賴類庫和監控平臺等各種原因,最終選擇了相對成熟的JDK11作為G1的平臺。

2.3 ZGC調優實踐

與G1的普適明顯不同,對ZGC上的適配工作明顯困難的多,作為最現代的收集器之一,ZGC并不是萬用的銀彈,因此也并沒有成為JDK17的默認收集器。相比G1,ZGC并不能簡單的適配于所有場景,我們在試運行過程中遇到了一系列難以解決的問題,經過大量的參數調整和性能測試后,才能發揮其全部的實力。

(1)現象1:在訪問量突然上漲時,會觀察到非常顯著的分鐘級響應尖刺。

由于ZGC會使用之前數次的GC指標來預測下一次GC的回收策略,使得其相比CMS等傳統收集器更容易受到流量波動的沖擊,在高流量壓力下的魯棒性很差。解決響應尖刺的辦法主要有兩個:首先是通過提高`ZAllocationSpikeTolerance`的數值來減少觸發GC的閾值,其次是打開周期性的主動回收參數`ZProactive`,并通過減少`ZCollectionInterval`來縮短兩次主動GC的間隔。兩個參數的具體數值需要開發人員手動調試確定,但是在高壓力下無論怎么調整參數,提升都相對有限。

圖片

(2)現象2:GC日志出現大量Allocation Stall/Rellocation Stall,同時監控上發現秒級的STW出現,某些時候甚至伴有OOM報錯。

雖然ZGC的停頓時間很短,但整個回收階段很長,期間用戶線程一直處于并發運行的狀態。這使得回收過程中會產生大量的浮動垃圾,只能等到下次GC時再回收。此時如果浮動垃圾占滿了整個堆使得回收無法繼續,ZGC就會直接暫停對應的用戶線程,來優先執行回收任務,同時在日志上記錄對應線程的Allocation/Relocation Stall。簡而言之,Allocation Stall是一種當GC吞吐量不夠時觸發的用戶線程暫停,大量秒級的Allocation Stall甚至比FGC的影響更大。

這種情況一般都是GC回收速度跟不上內存申請速度導致的,如果GC資源相對充足的話,可以通過上面兩個主動GC參數來增加GC頻率,而如果GC資源本身就很匱乏,則只能通過增加GC線程數`ConcGCThreads`和`ParallelGCThreads`來根本性的解決問題。

圖片

(3)現象3:ZGC堆使用的RSS持續上升,其大小不會隨著內存使用情況智能伸縮,最終導致了堆外溢出。

低版本的ZGC并不會主動將長期未使用的堆內存返還給系統,JDK13后ZGC提供了`ZUncommitDelay`參數來設置將空閑內存返還給OS的期限,可以通過縮短這個值來使得RSS空間被更加靈活的使用。為了保證生產環境服務的穩定性,我們直接通過讓堆大小的上下限相同來防止堆的伸縮。

2.4 基準測試的結果

在實際試驗中,我們首先觀察到ZGC確實無愧于其零停頓收集器的名號,可以做到在全程任何情況下都達到百微秒級每次的停頓時間,每分鐘累計不超過1ms,同時CMS中令人困擾的FGC現象也不再成為問題。而與之原理相近的ShenandoahGC的性能表現也非常好,平均每分鐘的停頓時間也不超過10ms。G1與這些新一代的收集器相比雖然遜色許多,但是仍然能在僅僅使用生產配置一半的內存下,達到比CMS更好的GC性能:其YGC停頓約下降了50%,每分鐘停頓約為200ms左右,并且MGC也基本可以滿足老年代的回收需要,數天時間內沒有觀察到FGC。

但是隨著流量壓力的上升,我們很快發現作為首選的ZGC和ShenandoahGC等零停頓收集器實際上并不適合查詢接口這樣的運算密集型應用:他們的運行顯著地依賴于資源開銷,最終嚴重擠占了業務邏輯的計算資源,使得響應耗時飆升,服務趨于崩潰。

為了穩定服務,我們不得不重新分配了更多計算資源并降低了流量,并得出了結論:即使使用了兩倍的線程資源,在CPU利用率三倍于CMS的情況下,ZGC和ShenandoahGC仍然只能達到相當于生產環境約50%-60%的極限吞吐量。與之相對,G1在這方面的表現則好得多,在輕量化配置下比起生產配置的整體吞吐量僅稍有下降,在相同QPS下的CPU利用率變高了約5-7%,幾乎可以忽略不計。經過后續排查,我們發現主要的原因是ZGC的四條ZWORKER線程幾乎每個都會100%的占用一個核心(如下圖),大量的吞吃了CPU資源并影響到了核心處理流程。

圖片

在內存方面,ZGC的實際表現也并不盡如人意。ZGC不僅比傳統收集器記錄了更多的額外信息,且很多優化和特性(例如字符串去重、分代、指針壓縮等)也暫時無法使用,這使得ZGC無論是堆內還是堆外的內存開銷都要明顯高于G1和CMS。測試中我們使用NMT和JMX簡單對比了各收集器在未接入流量一段時間內的平均內存開銷,發現ZGC的堆內開銷大約比CMS高三分之一,堆外則高達CMS的10倍左右。

圖片

綜合來看,ZGC等零停頓收集器雖然可以達到10ms以下的每分鐘停頓時間,但是其占用的大量GC資源會嚴重影響核心計算邏輯。在資源緊張的輕量化場景下,切換至ZGC導致了服務在極限壓測中損失了相當于100%生產流量的吞吐量,同時接口的響應耗時上升了70%。與之相對,G1在響應耗時上的表現則幾乎與原來相同,各細節指標上也僅僅只有CPU利用率略差。

圖片

2.5 遷移到JDK11

由于ZGC和ShenandoahGC在測試中表現不佳,且各種問題在資源緊張的限制下幾乎無法解決,我們最終將目光轉向了更為成熟穩定的G1+JDK11的組合。從JDK8遷移到11是兩個連續的LTS版本之間的遷移,比起直接遷移到17來說簡單很多。我們在實際遷移中主要遇到了三個類型的問題:官方類庫缺失,權限控制,以及第三方類庫報錯。

  • 官方類庫缺失:JDK11中移除了一系列官方類庫,其中部分類庫只是從rt.jar中被拆分,可以簡單的通過maven補回,例如javax.*,但是其他一些包含危險操作的類庫則被直接刪除,例如jdk.nashorn,sun.misc等,一般也可以通過重寫來繞過這些代碼。
  • ?權限控制:JDK11中對各種權限做了更精細的控制。例如自代理需要使用參數??-Djdk.attach.allowAttachSelf???控制,而跨類庫的反射權限則需要用??--add-exports=???和??--add-exports??來打開。如果未能注意到這些參數則會造成大量權限控制報錯。?
  • 第三方類庫報錯:此類報錯一般都是兼容性問題導致,Lombok和AspectJ等類庫需要根據JDK版本來選擇對應的類庫版本。主要排查難點在于報錯的形式五花八門,報錯信息對定位幾乎沒有幫助,有時候很難確定是哪個類庫導致的。

三、堆外內存管理

一般來說,對于運行在容器中的單個Java應用,大部分堆外相關的細節都會被虛擬機給屏蔽掉,導致開發人員往往很少會深入到相關問題。然而,由于這次輕量化后剩余的內存資源非常緊張,我們被迫給堆外留下了非常有限的空間,導致了后續測試過程中出現的一系列問題。

3.1 問題表象與排查

具體來說,在生產測試中,我們經常觀察到應用經常在半夜多次無故宕機后被拉起,最終反復點火失敗導致應用崩潰無法繼續服務。經過大量試驗后,我們發現這一現象與JDK版本和GC無關,可以在多個輕量化配置上復現,現象為RSS在較長的一段時間內持續上升,最終導致了應用多次崩潰重啟。

圖片

由于是RSS持續上升,我們排查時首先懷疑是堆內溢出。但是卻并沒有在應用日志上發現OOM報錯,且使用JFR檢查堆內存增長情況后也并沒有找到明顯的溢出跡象。所以我們進一步檢查了機器的dmesg日志,發現反復崩潰的原因是malloc申請不到內存,導致內核的oom_killer線程直接kill掉了DMESGTomcact進程,然后又被重啟腳本重新拉起。

由于堆內存是基本穩定的,我們使用NMT baseline對JVM的堆外內存使用情況進行了檢查。雖然現代GC本身的native占用相對較高,但增長并不顯著,總體內存使用很穩定,也沒有泄露的傾向。

圖片

進一步向下排查,我們用 `gdb --batch --pid 36563 --ex 'call malloc_trim()'` 強行回收內存后,發現RSS有明顯下降,至此基本判斷是glibc這一塊造成了泄露問題。

圖片

3.2 內存分配器

要解釋溢出的原因,首先需要了解一下內存管理的機制。對于Java應用來說,內存管理一般分為四層:內核負責管理和映射虛擬頁,glibc進行通用的內存算法管理,JVM負責屏蔽內存申請和回收的細節,而最上層才是Java應用。

圖片

由于mmap和brk是系統調用,如果應用每次申請內存時都直接訪問內核函數的話,性能會非常差,代碼實現也更加困難。所以,linux會使用通用的內存分配算法來緩沖和規劃內存的使用,其主要關注點在三個指標上:

  • 減少申請和釋放操作的時間和開銷?
  • 減少小對象分配帶來的內存碎片?
  • 減少分配器本身數據結構的額外內存開
    ?

3.3 默認分配器PTMALLOC的優缺點

在默認情況下,glibc使用的是其原生的ptmalloc2內存分配器,由以下三層數據結構組成:

  • arena(分配區)是ptmalloc中的內存緩沖區,在一個環形鏈表上被管理。也是ptmalloc中最小的鎖顆粒度。?
  • bin(空閑鏈表)是arena中用于管理可用內存塊的鏈表。不同的bins根據其管理的內存塊大小而被分為fast、unsorted、small和large四種。
  • chunk(內存塊)則是用戶申請和釋放內存的最小單位。bins的頭部永遠是一個被稱為top chunk的空閑塊,當沒有合適的chunk時,會擴容并返回top chunk來處理請求。

圖片

ptmalloc作為標準實現,主要使用了以下幾個方法來優化以上三個重要指標:

內存池(減少頻繁的系統調用和內存碎片):用戶free掉的內存,不會被直接被歸還給系統,而是暫存到bins中,供下次申請時直接分配。

多分配區(減少鎖競爭):所有內存操作都需要加鎖,如果沒有找到未上鎖的arena,則會新增一個副arena并上鎖,直到arena的數量上限。?

ptmalloc雖然滿足了內存分配器的基本需求,但是本身實現有很多缺陷,導致了內在的OOM傾向:

  • 額外內存開銷大:每個chunk都需要額外消耗8b的內存,而chunk是內存操作的最小單位,這會導致整體上浪費了非常多內存。
  • 內存利用率不穩定:由于多分配區的機制,激烈的鎖競爭會導致副arena數量快速增多。并且,新增的副arena永遠不會被銷毀,且保留會其初始的chunk。這意味著在一臺16核的標準機器上最多會有128個arena,并占用高達8G的堆外緩沖區。
  • 多線程性能差:所有的內存操作都需要進行悲觀鎖的加鎖解鎖操作,導致其性能較差。同時,即使有多分配區機制,在動輒500個以上線程的生產環境中這個并發量完全不夠。?
  • 回收機制簡陋:由于bins是鏈表結構,ptmalloc的內存收縮必須從上向下收縮,這意味著只要后申請的內存沒有被釋放,之前申請的所有chunk都無法被收縮,這導致了在管理長周期內存時,有內存泄漏的可能性。

具體到這次詳情頁的溢出,則主要有三個原因:

  • 前置條件:由于輕量化的需要,應用目前僅僅能給堆外大約2.5G的空間。并且G1本身使用的堆外空間是CMS的4-6倍之多。而原來的32G的堆外空間充足,所以之前沒有發現類似問題。?
  • 由于大量的緩存、快照和報文的處理,應用本身有非常頻繁和重量級的NIO和序列化/壓縮操作(尤其是點火的時候,線程數非常多),這導致了應用會高頻的申請和釋放堆外內存作為IO緩沖區。因此ptmalloc在這種情況下新增了大量的arena來避免頻繁的鎖競爭(下圖中有大量64M大小的內存塊)。
  • ptmalloc本身的釋放機制就導致申請的內存被歸還的特別慢,甚至有內存溢出的傾向,這些因素綜合在一起引起了OOM的發生。

圖片

3.4 解決方案JEMALLOC

考慮到ptmalloc的性能相對較差,我們將目光轉向了第三方的內存管理器。無論是谷歌的tcmalloc還是臉書的jemalloc都完全是默認分配器的上位替代,各項性能遠超ptmalloc,并且遷移起來非常方便。雖然tcmalloc和jemalloc兩者之間優劣差別不大,但是由于jemalloc相對優秀的工具鏈,我們最終優先對它進行了測試。

jemalloc是專精于多核多線程場景的內存分配器,可以說在并發量越大的情況下,jemalloc的優勢越明顯。對比pemalloc,jemalloc有以下的優勢:

(1)內存碎片率:jemalloc承諾至多20%的內存碎片。

通過將內存塊根據大小進一步細分為232個小類,同一個bins中的內存塊大小一致,向上取整申請,來提高每個內存塊在分配時的利用率和性能。(同樣處理10kb內存的申請,返回10kb的 chunk和返回20kb的chunk之間肯定有區別)

采用了低地址優先的分配策略,進一步降低了內存碎片率。(使用紅黑樹記錄了地址排序,總是從低地址開始分配,使高地址的內存更整塊)

(2)鎖的顆粒度:jemalloc在大部分場景下幾乎是無鎖的。

每個線程都擁有動態伸縮的緩存tcache,在小內存操作時是無鎖的。

大部分的線程都會被綁定到專屬的arena上,使其操作無鎖化(類似于JVM的偏向鎖)。即使多個 線程共享一個arena,也會在arena內部細化為局部鎖,而不是直接使用全局鎖。

(3)內存回收:除了類似于ptmalloc的回收機制外,jemalloc還有兩種機制。

當發現某個chunk全部都是臟頁后,會直接釋放整個chunk。

當臟頁數量超過某個閾值的時候,進行主動的purge操作。

(4)額外開銷:僅僅占用約2%的額外內存,用于存儲一些meta信息。

(5)工具鏈:jemalloc有完善的內存分析工具,可以更好的定位溢出和泄露問題。

圖片

3.5 遷移和收益

對于簡單的性能測試,手動安裝jemalloc非常容易,甚至不需要重新編譯代碼,直接在一臺正常運行的機器上安裝好jemalloc后,修改tomcat的sh文件中將LD_PRELOAD變量指定為對應的so文件覆蓋glibc動態庫并重啟tomcat即可。而后續容器部署也只需要在dockerfile中自定義數行代碼模擬上述操作,然后構建并上傳自定義鏡像便能完成。 

目前查詢服務已經在jemalloc上生產運行了數個月,至今還沒有觀察到再次出現堆外溢出的問題;同時RSS的波動非常穩定,即使遇到流量高峰也不會出現內存尖刺,可以保持良好的響應時間和穩定。

圖片

從實際的情況來看,jemalloc與ptmalloc相比主要有以下收益:

  • 從運維方面來看,集群為了方便調度,一般會限制幾個預設的容器配置以供選擇。在資源相對緊張的情況下,jemalloc可以使得應用整體的部署更加靈活,而使用默認的ptmalloc則會被迫將容器配置向上升級,否則就需要額外對特殊配置進行審批和調度,這樣不但會造成不必要的資源浪費,同時在流量尖峰時也難以對集群進行調度和擴容。
  • 在成本方面,從測試結果出發,僅僅使用jemalloc本身就能比ptmalloc在每臺機器上節省1-1.5G的堆外內存,雖然在單機上可能不夠顯著,但是推廣到整個云的范圍時收益應該是非常可觀的。
  • 性能上,jemalloc的內存回收和多線程機制更加高效和智能化,對低配置機器更加友好,能大大加強內存資源緊張的機器上服務的魯班性,同時對IO、GC、類加載等多線程native操作有較大的優化。
  • 從遷移角度看,遷移到jemalloc幾乎是無成本的操作,僅僅需要簡單的鏡像自定義和一定的灰度測試,就可以完成優化。

故綜合來看,jemalloc的收益相比于成本大得多的,有一定的分享和推廣的意義。

四、結語

本文相對完整的記述了酒店查詢服務在輕量化中的一次優化過程,希望其中的經驗和過程能對讀者有所幫助。然而,對于應用的優化過程是一個從猜想到驗證的循環。在有了可能的猜測和方向之后,比起反復的調研,更重要的則是不斷向著落地驗證去推進。雖然這些經驗有一些普適性,但是由于應用之間各有不同,仍然需要讀者根據實際情況親手試驗后,才能最終確定是否有借鑒意義。

責任編輯:張燕妮 來源: 攜程技術
相關推薦

2024-04-18 09:41:53

2024-03-22 15:09:32

2022-07-08 09:38:27

攜程酒店Flutter技術跨平臺整合

2022-06-03 08:58:24

APP攜程流暢度

2022-10-21 10:40:08

攜程酒店MySQL慢查詢

2024-09-10 16:09:58

2023-08-18 10:49:14

開發攜程

2022-09-03 21:13:19

攜程供應商直連平臺

2023-08-25 09:51:21

前端開發

2022-06-17 10:44:49

實體鏈接系統旅游AI知識圖譜攜程

2024-12-13 10:50:00

數據開發攜程

2023-10-13 09:34:27

算法數據

2022-04-14 17:53:50

攜程AWS上云

2022-12-14 10:09:44

研發效能

2017-07-06 19:57:11

AndroidMVP攜程酒店

2023-11-13 11:27:58

攜程可視化

2025-08-05 09:28:08

2024-09-25 15:37:46

2023-11-24 09:44:07

數據攜程

2023-08-04 09:35:18

點贊
收藏

51CTO技術棧公眾號

一区二区视频在线播放| 国产精品jizz在线观看麻豆| 亚洲精品成人无码毛片| 国产伦久视频在线观看| 国产色综合久久| 国产原创欧美精品| 亚洲黄色一区二区| 欧美顶级大胆免费视频| 亚洲电影av在线| 中文字幕av专区| √8天堂资源地址中文在线| 国产午夜精品久久| 国产精品免费一区二区三区四区| 亚洲av无码精品一区二区| 91精品国产调教在线观看| 亚洲精品久久久久| 99视频在线观看视频| 小早川怜子影音先锋在线观看| 国产精品成人免费在线| 精品网站在线看| 99国产精品久久久久久久成人| 国产情侣一区| 欧美成人免费全部| 午夜黄色福利视频| 亚州综合一区| 欧美精品一区二区三区一线天视频| 色噜噜狠狠狠综合曰曰曰| 国产在线观看一区二区三区| 好吊妞视频一区二区三区| 亚洲91中文字幕无线码三区| 亚洲小视频在线| 人体私拍套图hdxxxx| 国产精品美女久久久久人| 在线精品视频一区二区| 国产成人a亚洲精v品无码| av网站在线免费| 国产精品青草综合久久久久99| 久久99九九| 亚洲国产精品久久久久久6q| 九九九久久久精品| 国产成人精品久久二区二区91 | 麻豆精品一区| 欧美视频第二页| www.日本xxxx| 黄色亚洲网站| 精品国产乱码久久久久久婷婷 | 久久久久一区| 欧美整片在线观看| 久久精品视频1| 亚洲免费影视| 欧美中文字幕在线观看| 久久久久久久久影院| 亚洲免费播放| 91精品国产成人| 免费看日韩毛片| 宅男噜噜噜66一区二区| 97激碰免费视频| 欧美特黄aaaaaa| 亚久久调教视频| 国产成人免费av电影| 波多野结衣mp4| 看电视剧不卡顿的网站| 国产日韩中文字幕在线| 中文字幕有码视频| 精品一区二区综合| 91美女片黄在线观看游戏| 99这里有精品视频| 国产精品系列在线观看| 福利视频久久| 手机亚洲第一页| 国产欧美日产一区| 一区二区欧美日韩| 免费观看成人高潮| 亚洲一区二区成人在线观看| 国产一级爱c视频| 欧美黄色网页| 精品视频一区二区不卡| 午夜一级免费视频| 中文字幕一区二区三区中文字幕| 欧美精品一区二区三区久久久 | 午夜精品久久久久久久久久久久| 国产精品18p| 久热国产精品| 成人黄色在线免费| 人妻中文字幕一区| 欧美激情一区二区| 成年在线观看视频| 欧美男女交配| 制服丝袜激情欧洲亚洲| 国产69视频在线观看| 怕怕欧美视频免费大全| 精品国产一区二区三区久久狼5月| 久久r这里只有精品| 国产欧美日韩亚洲一区二区三区| 国产精品久久久久77777| 国产毛片久久久久| 久久综合九色综合欧美就去吻| 一个色的综合| 毛片电影在线| 777久久久精品| 最新中文字幕视频| 亚洲午夜精品一区 二区 三区| 2019av中文字幕| 国产精品女同一区二区| 久久丝袜美腿综合| 久久人妻无码一区二区| 日本一区二区三区视频在线| 精品日本一线二线三线不卡| 国产一级久久久久毛片精品| 亚洲一本视频| 国产美女久久久| 三级在线电影| 亚洲一区中文日韩| 女人高潮一级片| 希岛爱理av免费一区二区| www日韩中文字幕在线看| 丁香六月婷婷综合| 懂色一区二区三区免费观看| 一本一生久久a久久精品综合蜜| 日韩伦理在线一区| 精品精品国产高清a毛片牛牛 | 国内精品国产三级国产aⅴ久| 婷婷成人影院| 久久久久久com| 国产成人精品一区二三区四区五区 | 亚洲国产va精品久久久不卡综合| 天天视频天天爽| 奇米亚洲欧美| 欧美在线视频免费观看| 天堂网av在线播放| 亚洲一级在线观看| 国产精品二区视频| 欧美99在线视频观看| 成人午夜高潮视频| 视色,视色影院,视色影库,视色网| 亚洲国产精品国自产拍久久| 中文字幕一区av| 亚洲少妇久久久| 欧美猛男同性videos| 欧美性视频精品| 天天干天天爱天天操| 一区二区三区久久| 麻豆精品国产传媒| 午夜精品久久99蜜桃的功能介绍| 国产日韩欧美夫妻视频在线观看| 成人免费视频| 欧美日韩三级一区| 粉嫩精品久久99综合一区| 石原莉奈在线亚洲二区| 欧美中日韩免费视频| 丝袜美腿一区| 国产一区二区三区精品久久久| 亚洲欧美一区二区三区在线观看| 337p粉嫩大胆色噜噜噜噜亚洲| 免费一级特黄毛片| 任你弄精品视频免费观看| 亚州精品天堂中文字幕| 无码国产伦一区二区三区视频| 午夜亚洲国产au精品一区二区| 波多野结衣视频播放| 在线亚洲欧美| 手机在线观看国产精品| 日韩成人精品一区二区三区| 久久久精品999| 亚洲精品成av人片天堂无码| 亚洲国产精品一区二区www| 日批视频免费看| 亚洲中字黄色| 视频一区二区三| 91精品一区| 欧美精品久久久久久久| 日本福利午夜视频在线| 欧美最猛性xxxxx直播| 美女三级黄色片| 风间由美性色一区二区三区 | 青娱乐精品在线视频| 亚洲欧洲国产日韩精品| 天堂精品久久久久| 91精品国产网站| av资源网在线观看| 国产乱色在线观看| 欧美精品乱人伦久久久久久| 国产探花在线播放| 91在线视频播放| 手机看片一级片| 黄色欧美成人| 亚洲国产精品综合| 在线精品国产亚洲| 国产91色在线| 欧美四级在线| 亚洲午夜国产成人av电影男同| 国产精品久久久久久69| 亚洲国产精品一区二区尤物区| 久久久久久亚洲中文字幕无码| 久久精品国产精品亚洲红杏| 视色,视色影院,视色影库,视色网| 午夜先锋成人动漫在线| 亚洲www视频| 日韩激情电影免费看| 精品国产一区久久久| 亚洲色图欧美视频| 制服丝袜日韩国产| 丰满人妻老熟妇伦人精品| 亚洲视频你懂的| 3d动漫精品啪啪一区二区下载| 国内精品久久久久影院薰衣草 | 男人的午夜天堂| av电影天堂一区二区在线观看| 亚洲综合色在线观看| 中文在线最新版地址| 福利电影一区二区| 日韩免费高清在线| 亚洲高清av| 中文字幕av久久| 欧美日韩在线二区| 国产一区二区三区免费不卡| 91精品视频一区二区| 国产精品99一区| 中国色在线日|韩| 欧美精品videosex牲欧美| 老司机午夜在线| 国产一区二区三区直播精品电影 | 亚洲福利视频网| 国产精品区在线观看| 日韩欧美国产中文字幕| 久久久久无码国产精品不卡| 中文字幕在线观看不卡视频| 国产美女精品久久| 成人中文字幕在线| 丰满少妇中文字幕| 狠狠色综合播放一区二区| 91视频免费版污| 母乳一区在线观看| 777777av| 国产一区二区三区久久| 久久人人爽人人爽人人av| 68国产成人综合久久精品| 亚洲高清视频一区| sdde在线播放一区二区| 日韩av电影免费播放| 久久av综合| 欧美日韩国产综合在线| 天堂俺去俺来也www久久婷婷| 国产欧美日韩在线播放| 国产精品色在线网站| 国产精品久久久久久久久久久久午夜片 | 亚洲午夜在线电影| 国产在线观看免费av| 亚洲午夜在线视频| 天天插天天操天天干| 午夜欧美一区二区三区在线播放| 国产精品theporn动漫| 亚洲成人在线网站| 国产成人自拍视频在线| 第一福利永久视频精品 | 久久午夜精品一区二区| 精品一卡二卡三卡| 视频一区二区三区中文字幕| 五月婷婷狠狠操| 免费在线观看视频一区| 亚洲综合色在线观看| 黄页网站大全一区二区| 四虎国产精品永久免费观看视频| 欧美一级视频免费| 精品女同一区二区三区在线播放| 亚洲精品午夜久久久久久久| 精品国产乱码久久久久酒店| 天天干天天干天天操| 色天天综合色天天久久| 在线观看国产精品入口男同| 欧美精品欧美精品系列| 亚洲精品喷潮一区二区三区| 亚洲精品动漫100p| 国产精品麻豆一区二区三区| 中文字幕精品www乱入免费视频| 日本中文字幕在线播放| 久久97精品久久久久久久不卡| hd国产人妖ts另类视频| 日韩av电影中文字幕| 成人深夜福利| 波多野结衣久草一区| 亚洲日本三级| 特级黄色录像片| 中文亚洲字幕| 欧美美女一级片| 波多野结衣中文一区| 美女被到爽高潮视频| 亚洲欧洲制服丝袜| 国产精品乱子伦| 欧美精品久久久久久久久老牛影院| www久久久com| 一本大道亚洲视频| 蜜臀av在线| 国产精品入口日韩视频大尺度| 欧美成人一级| 日本黑人久久| 亚洲二区精品| 国模私拍视频在线观看| 91在线观看一区二区| 天天爽天天爽天天爽| 精品国产老师黑色丝袜高跟鞋| 97人妻精品一区二区三区软件| 国产日韩精品一区二区三区| 国产私拍一区| 精品国产乱码久久久久久蜜坠欲下| 激情五月五月婷婷| 天堂va蜜桃一区二区三区漫画版| 日本55丰满熟妇厨房伦| 国产日韩高清在线| 亚洲一区二区91| 777奇米四色成人影色区| 欧美xxx.com| 久久久久久国产免费| 天天综合在线观看| 欧美日韩一区二区三| 91久久视频| 极品人妻一区二区| 国产精品麻豆网站| 无码人妻熟妇av又粗又大| 亚洲精品在线一区二区| 免费日本一区二区三区视频| 国产成人精品一区二区在线| 国产精品网站在线看| 国产一二三四五| 美女网站色91| 亚洲精品国产91| 欧美日韩在线观看视频| 国产成人自拍一区| 欧美国产一区二区三区| 一区二区三区日本视频| 日韩美女一区| 日韩一区精品视频| av男人的天堂av| 岛国av在线不卡| 日夜干在线视频| 91超碰caoporn97人人| 国产精品网站在线看| 欧美在线一区视频| 成人av片在线观看| 日操夜操天天操| 精品国产sm最大网站免费看| 亚洲卡一卡二| 97人人做人人人难人人做| 欧美在线观看天堂一区二区三区| 成人综合久久网| 最好看的中文字幕久久| 97人妻一区二区精品免费视频| 最近中文字幕2019免费| 成人在线高清| 五月天色婷婷综合| 国产乱一区二区| 免费中文字幕在线观看| 精品国产乱码久久久久久夜甘婷婷 | 亚洲美女在线一区| 国产精选久久久| 欧美巨乳美女视频| 91精品国产自产精品男人的天堂 | 久久精品一区二区| 国产网友自拍视频| 日韩的一区二区| 天天综合网天天| 亚洲砖区区免费| 国产成人亚洲综合a∨婷婷| 国产精品1234区| 国产婷婷成人久久av免费高清| 欧美magnet| 亚洲一区三区视频在线观看| 国产一区二区在线观看视频| 欧美久久久久久久久久久久| 亚洲第一色在线| 欧美三级网址| 一区二区免费在线观看| 福利视频网站一区二区三区| 三级黄色在线视频| 在线免费看av不卡| 九九99久久精品在免费线bt| www.av91| 久久精品免费在线观看| 中文字幕乱码人妻无码久久 | 波多野结衣视频一区二区| 久久久久欧美| 久久精品国产一区二区| 久久精品www| 亚洲日本中文字幕| 国产专区精品| 久久精品国产精品亚洲色婷婷| 国产日韩欧美不卡在线| 精品人妻一区二区三区含羞草 | 精品一区二区三区无码视频| 91麻豆国产精品久久| 国产又粗又猛又黄| 午夜精品久久久久久99热| 日本a级不卡| 中国一级特黄录像播放| 欧美日韩国产首页| 久久男人av资源站| 免费成人进口网站| 久久欧美一区二区| www.97超碰| 国产精品一二区|