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

一篇文章帶你全面了解內(nèi)存泄漏

開(kāi)發(fā) 開(kāi)發(fā)工具
如果內(nèi)存泄漏已經(jīng)發(fā)生,在尋找內(nèi)存泄漏的問(wèn)題點(diǎn)時(shí),除了全面定點(diǎn)排查項(xiàng)目中涉及到資源使用的情況之外,還可以結(jié)合具體的編程語(yǔ)言(比如,Java的VisualVM等)的內(nèi)存分析工具進(jìn)行來(lái)定位導(dǎo)致內(nèi)存泄漏的地方。

背景

今天這篇文章跟大家聊聊應(yīng)用程序內(nèi)存泄漏相關(guān)的概念、原因以及排查和解決方案。

過(guò)完春節(jié)來(lái)公司,發(fā)現(xiàn)有幾個(gè)項(xiàng)目出現(xiàn)了很明顯的內(nèi)存泄漏問(wèn)題。在此之前,一直在趕新功能的開(kāi)發(fā),項(xiàng)目幾乎每天都在上線(xiàn)發(fā)布新的功能,內(nèi)存泄漏的問(wèn)題并沒(méi)有暴露出來(lái)。春節(jié)期間,項(xiàng)目停止了發(fā)布,這一問(wèn)題便顯現(xiàn)出來(lái)了。

項(xiàng)目是基于k8s部署的,有兩個(gè)項(xiàng)目的Pod進(jìn)行了自動(dòng)擴(kuò)容,查看Pod的內(nèi)存使用情況,呈直線(xiàn)上升的趨勢(shì)。

內(nèi)存泄露場(chǎng)景圖內(nèi)存泄露場(chǎng)景圖

于是,節(jié)后的第一件事便是進(jìn)行內(nèi)存泄漏問(wèn)題的排查。項(xiàng)目中內(nèi)存泄漏的問(wèn)題最終找到并解決了,在此期間也調(diào)研和排查了各類(lèi)內(nèi)存泄漏的問(wèn)題。本篇文章會(huì)對(duì)解決內(nèi)存泄漏問(wèn)題中涉及到的理論知識(shí)進(jìn)行梳理和講解,以便大家在遇到類(lèi)似問(wèn)題時(shí)可參考解決。

內(nèi)存泄漏與內(nèi)存溢出

在聊內(nèi)存泄漏的時(shí)候,肯定要提一下內(nèi)存溢出,這兩者很容易混淆,但區(qū)分缺失非常明顯的。

內(nèi)存溢出(Out of Memory,簡(jiǎn)稱(chēng)OOM),通俗地來(lái)講,就是當(dāng)程序申請(qǐng)內(nèi)存時(shí),沒(méi)有足夠的內(nèi)存可以使用了,也就是說(shuō)程序申請(qǐng)的內(nèi)存大于系統(tǒng)能夠提供的內(nèi)存,此時(shí)就會(huì)出現(xiàn)Out Of Memory的錯(cuò)誤。

內(nèi)存泄漏(Memory Leak),是指程序在申請(qǐng)內(nèi)存后,使用完畢之后,無(wú)法釋放對(duì)應(yīng)的內(nèi)存空間。比如,在程序運(yùn)行時(shí),申請(qǐng)分配一部分內(nèi)存給臨時(shí)變量使用,但使用完之后這部分內(nèi)存沒(méi)有被手動(dòng)釋放或無(wú)法被GC(Java中的垃圾回收)回收,就會(huì)導(dǎo)致此部分內(nèi)存始終被占用,從而導(dǎo)致內(nèi)存泄漏。

一次內(nèi)存泄漏危害可以忽略,但內(nèi)存泄漏堆積后果很?chē)?yán)重,因?yàn)闊o(wú)論多少內(nèi)存,遲早會(huì)被耗光。最終導(dǎo)致OOM(內(nèi)存溢出)。

在Linux內(nèi)核的操作系統(tǒng)中,當(dāng)系統(tǒng)內(nèi)存嚴(yán)重不足時(shí),還會(huì)觸發(fā)OOM Killer(Out of Memory Killer)機(jī)制,強(qiáng)行釋放進(jìn)程內(nèi)存。這也是某些應(yīng)用程序莫名其妙被Kill的原因之一。

內(nèi)存泄漏分類(lèi)

了解了內(nèi)存泄漏的基本定義,再來(lái)看看內(nèi)存泄漏的場(chǎng)景和分類(lèi)。

按泄漏頻次分類(lèi)

如果按照泄漏的頻次特性來(lái)劃分,內(nèi)存泄漏可分為4類(lèi):

常發(fā)性?xún)?nèi)存泄漏:發(fā)生內(nèi)存泄漏的代碼經(jīng)常會(huì)被執(zhí)行,而每次執(zhí)行都會(huì)導(dǎo)致一定程度的內(nèi)存泄漏。

偶發(fā)性?xún)?nèi)存泄漏:在某些特定環(huán)境或特定分支邏輯中才會(huì)發(fā)生內(nèi)存泄漏。常發(fā)性和偶發(fā)性是相對(duì)的。對(duì)于特定的環(huán)境,偶發(fā)性的也許就變成了常發(fā)性的。因此,測(cè)試環(huán)境和測(cè)試方法對(duì)檢測(cè)內(nèi)存泄漏至關(guān)重要。

一次性?xún)?nèi)存泄漏:發(fā)生內(nèi)存泄漏的代碼只會(huì)被執(zhí)行一次,或者由于算法上的缺陷,導(dǎo)致總會(huì)有且僅有一塊內(nèi)存發(fā)生泄漏。比如,在類(lèi)的構(gòu)造函數(shù)中分配內(nèi)存,在析構(gòu)函數(shù)中卻沒(méi)有釋放該內(nèi)存,此時(shí)內(nèi)存泄漏只會(huì)發(fā)生一次。

隱式內(nèi)存泄漏:程序在運(yùn)行過(guò)程中不停地分配內(nèi)存,直到結(jié)束時(shí)才釋放。嚴(yán)格說(shuō)這里并沒(méi)有發(fā)生內(nèi)存泄漏,因?yàn)閮?nèi)存最終被釋放了。但是對(duì)于服務(wù)器程序來(lái)說(shuō),往往會(huì)運(yùn)行幾天,幾周甚至幾個(gè)月,不及時(shí)釋放內(nèi)存也可能會(huì)導(dǎo)致耗盡系統(tǒng)的內(nèi)存。稱(chēng)這類(lèi)內(nèi)存泄漏為隱式內(nèi)存泄漏。

站在用戶(hù)的角度來(lái)看,內(nèi)存泄漏的影響有限(可能會(huì)產(chǎn)生響應(yīng)慢等情況),但當(dāng)內(nèi)存泄漏堆積到一定程度,耗盡系統(tǒng)內(nèi)存時(shí),往往會(huì)導(dǎo)致服務(wù)器資源的浪費(fèi)(比如,開(kāi)篇提到的自動(dòng)擴(kuò)容)、響應(yīng)緩慢,甚至OOM和OOM Killer。此時(shí),危害性就比較大了。特別是應(yīng)用系統(tǒng)沒(méi)有做自動(dòng)擴(kuò)容恢復(fù)等運(yùn)維措施時(shí)。

對(duì)于上述4類(lèi)內(nèi)存泄漏,常發(fā)性?xún)?nèi)存泄漏最容易發(fā)現(xiàn)和解決,偶發(fā)性?xún)?nèi)存泄漏次之,最難發(fā)現(xiàn)和排查的當(dāng)屬隱式內(nèi)存泄漏,而且它的危害性非常大。對(duì)于一次性?xún)?nèi)存泄漏,不會(huì)進(jìn)行堆積,相對(duì)而言,影響有限。

按泄漏位置分類(lèi)

根據(jù)內(nèi)存泄漏在內(nèi)存中的位置分為以下兩類(lèi):

  • 堆內(nèi)存泄漏:我們經(jīng)常說(shuō)的內(nèi)存泄漏就是堆內(nèi)存泄漏,在堆上申請(qǐng)了資源,在使用完畢時(shí),沒(méi)有將內(nèi)存釋放歸還給OS,從而導(dǎo)致該塊內(nèi)存無(wú)法被再次使用。
  • 資源泄漏:通常指的是系統(tǒng)資源,比如socket,文件描述符等,這些資源在系統(tǒng)中都是有限制的,如果創(chuàng)建了而不歸還,久而久之,就會(huì)耗盡資源,導(dǎo)致其他程序不可用。

內(nèi)存泄漏的場(chǎng)景

以下以Java語(yǔ)言中的場(chǎng)景來(lái)進(jìn)行說(shuō)明。

1、被長(zhǎng)生命周期對(duì)象持有

場(chǎng)景一:在Java中像HashMap、LinkedList等集合類(lèi),如果在使用時(shí)將其生命為靜態(tài)變量,那么它們的生命周期將伴隨整個(gè)JVM的生命周期。在這種場(chǎng)景下,如果持續(xù)將對(duì)象放入該類(lèi)容器,而未進(jìn)行相應(yīng)的移除操作,便會(huì)形成一個(gè)長(zhǎng)生命周期(與JVM一樣)的對(duì)象,持有了(大量)短生命周期的對(duì)象,從而導(dǎo)致短生命周期的對(duì)象所占有的內(nèi)存資源無(wú)法釋放,從而造成內(nèi)存泄漏問(wèn)題。

示例如下:

public class TestStaticSet {

    static List<Object> list = new ArrayList<>();

    public void memoryLeakCase1() {
        Object object = new Object();
        list.add(object);
    }
}

場(chǎng)景二:與上述場(chǎng)景類(lèi)似的,在使用單例模式時(shí),單例的靜態(tài)對(duì)象也具有與JVM相同的生命周期,如果該靜態(tài)類(lèi)持有了外部對(duì)象的引用,也會(huì)導(dǎo)致外部對(duì)象無(wú)法被釋放,從而造成內(nèi)存泄漏。

場(chǎng)景三:同樣是一個(gè)對(duì)象被長(zhǎng)期持有,與上面兩種情況不同的是,該對(duì)象是某個(gè)其他對(duì)象的內(nèi)部類(lèi)。這樣,不僅被長(zhǎng)期持有的內(nèi)部類(lèi)對(duì)象無(wú)法被釋放,就連內(nèi)部類(lèi)所在的外部類(lèi)對(duì)象,即便已經(jīng)不再使用,也同樣無(wú)法被釋放。

場(chǎng)景四:變量的作用域不同導(dǎo)致的生命周期不同。比如,原本一個(gè)變量的作用域在方法內(nèi)部,但如果將該變量設(shè)置為類(lèi)級(jí)別的成員變量,此時(shí),原本在方法內(nèi)部使用完即可釋放的內(nèi)存,變?yōu)榕c類(lèi)對(duì)象生命周期一樣長(zhǎng)??赡軙?huì)造成一定程度的內(nèi)存泄漏。

場(chǎng)景五:緩存泄漏。這個(gè)場(chǎng)景屬于場(chǎng)景一的拓展場(chǎng)景。比如將對(duì)象放入緩存(靜態(tài)集合也可以看做是緩存的容器)中,而忽略了緩存不同場(chǎng)景下的大小以及釋放機(jī)制,從而導(dǎo)致一定程度的內(nèi)存泄漏。

以上情況,都可以歸類(lèi)為由于長(zhǎng)生命周期的對(duì)象持有了短生命周期的對(duì)象,而沒(méi)有做好釋放操作而導(dǎo)致內(nèi)存泄漏情況的發(fā)生。

2、系統(tǒng)資源型內(nèi)存泄漏

在項(xiàng)目實(shí)踐中會(huì)涉及到各類(lèi)連接性資源,比如數(shù)據(jù)庫(kù)連接、網(wǎng)絡(luò)連接、流和IO連接等。無(wú)論什么時(shí)候當(dāng)我們創(chuàng)建一個(gè)連接或打開(kāi)一個(gè)流,JVM都會(huì)分配內(nèi)存給這些資源。比如,數(shù)據(jù)庫(kù)鏈接、輸入流和session對(duì)象。

忘記關(guān)閉這些資源,會(huì)阻塞內(nèi)存,從而導(dǎo)致GC無(wú)法進(jìn)行清理。特別是當(dāng)程序發(fā)生異常時(shí),沒(méi)有在finally中進(jìn)行資源關(guān)閉的情況。

以數(shù)據(jù)庫(kù)操作為例,在對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作時(shí),創(chuàng)建的數(shù)據(jù)庫(kù)連接使用完畢之后,未調(diào)用對(duì)應(yīng)的close方法進(jìn)行釋放,便會(huì)造成兩個(gè)維度的內(nèi)存泄漏問(wèn)題。

以數(shù)據(jù)庫(kù)連接為例:

第一個(gè)維度,JVM中大量對(duì)象無(wú)法釋放。在針對(duì)于數(shù)據(jù)庫(kù)的操作中,像Connection、Statement、ResultSet這些對(duì)象都需要顯式地關(guān)閉,如果不關(guān)閉它們,這些對(duì)象不會(huì)被垃圾回收器回收,繼而造成JVM內(nèi)部?jī)?nèi)存的占用不斷增加。這會(huì)導(dǎo)致Java應(yīng)用程序內(nèi)存的不斷消耗,最終可能會(huì)導(dǎo)致內(nèi)存溢出(OutOfMemoryError)。

第二個(gè)維度,數(shù)據(jù)庫(kù)連接資源無(wú)法釋放。數(shù)據(jù)庫(kù)連接是一種寶貴的資源。建立和關(guān)閉數(shù)據(jù)庫(kù)連接的開(kāi)銷(xiāo)很高,通常使用連接池來(lái)重復(fù)利用這些連接。如果數(shù)據(jù)庫(kù)連接沒(méi)有被顯式關(guān)閉,就會(huì)被占用在連接池外部。這會(huì)導(dǎo)致連接池中的可用連接數(shù)量減少,最終可能用盡連接池,導(dǎo)致后續(xù)請(qǐng)求無(wú)法獲取到可用的數(shù)據(jù)庫(kù)連接,系統(tǒng)的數(shù)據(jù)庫(kù)操作因此陷入僵局。

類(lèi)似這種場(chǎng)景的資源型泄漏還有HTTP連接、操作本地磁盤(pán)文件等場(chǎng)景下的資源釋放。特別是針對(duì)異常情況下的資源釋放,否則會(huì)引發(fā)偶發(fā)性或隱式內(nèi)存泄漏。

3、監(jiān)聽(tīng)器和回調(diào)

內(nèi)存泄漏的常見(jiàn)來(lái)源還有監(jiān)聽(tīng)器和其他回調(diào),如果客戶(hù)端在對(duì)應(yīng)的API中注冊(cè)了回調(diào),卻沒(méi)有顯示的取消,那么就會(huì)造成積聚,從而引發(fā)內(nèi)存泄漏。這種內(nèi)存泄漏屬于被動(dòng)型的,類(lèi)似的要處理好服務(wù)端的連接超時(shí)、資源超時(shí)釋放等場(chǎng)景。

針對(duì)上述回調(diào)場(chǎng)景,需要確?;卣{(diào)立即被當(dāng)作垃圾回收的最佳方法是只保存它的弱引用,例如將它們保存成為WeakHashMap中的鍵。

4、不當(dāng)?shù)膃quals方法和hashCode方法實(shí)現(xiàn)

當(dāng)我們定義個(gè)新的類(lèi)時(shí),往往需要重寫(xiě)equals方法和hashCode方法。在HashSet和HashMap中的很多操作都用到了這兩個(gè)方法。如果重寫(xiě)不得當(dāng),會(huì)造成內(nèi)存泄漏的問(wèn)題。

下面來(lái)看一個(gè)具體的實(shí)例:

public class Person { 
    public String name; 
     
    public Person(String name) { 
        this.name = name; 
    } 
}

現(xiàn)在將重復(fù)的Person對(duì)象插入到Map當(dāng)中。我們知道Map的key是不能重復(fù)的。

@Test 
public void givenMap_whenEqualsAndHashCodeNotOverridden_thenMemoryLeak() { 
    Map<Person, Integer> map = new HashMap<>(); 
    for(int i=0; i<100; i++) { 
        map.put(new Person("jon"), 1); 
    } 
    Assert.assertFalse(map.size() == 1); 
}

上述代碼中將Person對(duì)象作為key,存入Map當(dāng)中。理論上當(dāng)重復(fù)的key存入Map時(shí),會(huì)進(jìn)行對(duì)象的覆蓋,不會(huì)導(dǎo)致內(nèi)存的增長(zhǎng)。

但由于上述代碼的Person類(lèi)并沒(méi)有重寫(xiě)equals方法,因此在執(zhí)行put操作時(shí),Map會(huì)認(rèn)為每次創(chuàng)建的對(duì)象都是新的對(duì)象,從而導(dǎo)致內(nèi)存不斷的增長(zhǎng)。

VisualVM中顯示信息如下圖:

imgimg

內(nèi)存走勢(shì)圖

當(dāng)重寫(xiě)equals方法和hashCode方法之后,Map當(dāng)中便只會(huì)存儲(chǔ)一個(gè)對(duì)象了,內(nèi)存泄漏問(wèn)題也便解決了。

5、使用ThreadLocal場(chǎng)景

ThreadLocal提供了線(xiàn)程本地變量,它可以保證訪(fǎng)問(wèn)到的變量屬于當(dāng)前線(xiàn)程,每個(gè)線(xiàn)程都保存有一個(gè)變量副本,每個(gè)線(xiàn)程的變量都不同。ThreadLocal相當(dāng)于提供了一種線(xiàn)程隔離,將變量與線(xiàn)程相綁定,從而實(shí)現(xiàn)線(xiàn)程安全的特性。

堆棧結(jié)構(gòu)堆棧結(jié)構(gòu)

ThreadLocal的實(shí)現(xiàn)中,每個(gè)Thread維護(hù)一個(gè)ThreadLocalMap映射表,key是ThreadLocal實(shí)例本身,value是真正需要存儲(chǔ)的Object。

ThreadLocalMap使用ThreadLocal的弱引用作為key,如果一個(gè)ThreadLocal沒(méi)有外部強(qiáng)引用來(lái)引用它,那么系統(tǒng)GC時(shí),這個(gè)ThreadLocal勢(shì)必會(huì)被回收,這樣一來(lái),ThreadLocalMap中就會(huì)出現(xiàn)key為null的Entry,就沒(méi)有辦法訪(fǎng)問(wèn)這些key為null的Entry的value。

如果當(dāng)前線(xiàn)程遲遲不結(jié)束的話(huà),這些key為null的Entry的value就會(huì)一直存在一條強(qiáng)引用鏈:Thread Ref -> Thread -> ThreaLocalMap -> Entry -> value永遠(yuǎn)無(wú)法回收,造成內(nèi)存泄漏。

如何解決此問(wèn)題?

第一,使用ThreadLocal提供的remove方法,可對(duì)當(dāng)前線(xiàn)程中的value值進(jìn)行移除;

第二,不要使用ThreadLocal.set(null) 的方式清除value,它實(shí)際上并沒(méi)有清除值,而是查找與當(dāng)前線(xiàn)程關(guān)聯(lián)的Map并將鍵值對(duì)分別設(shè)置為當(dāng)前線(xiàn)程和null。

第三,最好將ThreadLocal視為需要在finally塊中關(guān)閉的資源,以確保即使在發(fā)生異常的情況下也始終關(guān)閉該資源。

try { 
    threadLocal.set(System.nanoTime()); 
    //... further processing 
} finally { 
    threadLocal.remove(); 
}

內(nèi)存泄漏的檢測(cè)與定位

檢測(cè)和定位內(nèi)存泄漏的方法和場(chǎng)景很多,針對(duì)Java語(yǔ)言中的JVM內(nèi)存泄露的排查,介紹幾種常用的方法:

分析堆轉(zhuǎn)儲(chǔ)(Heap Dump Analysis):通過(guò)分析堆轉(zhuǎn)儲(chǔ)文件,可以查看當(dāng)前JVM堆中所有對(duì)象的內(nèi)存占用情況。常用的工具包括VisualVM等。

JConsole和Java Mission Control:這兩個(gè)工具是Java自帶的性能分析工具,可以實(shí)時(shí)監(jiān)控JVM的性能指標(biāo),包括堆使用情況、垃圾收集情況等。通過(guò)這兩個(gè)工具,可以快速定位內(nèi)存泄露的問(wèn)題。

GC日志分析:垃圾收集器的日志文件中記錄了每次垃圾收集的信息,通過(guò)分析這些日志文件,可以找出哪些對(duì)象占用了大量?jī)?nèi)存并且無(wú)法被回收。

代碼審查:通過(guò)仔細(xì)審查代碼,特別是關(guān)注那些可能導(dǎo)致對(duì)象長(zhǎng)時(shí)間被引用的代碼,可以發(fā)現(xiàn)潛在的內(nèi)存泄露問(wèn)題。

小結(jié)

根據(jù)上述案例及場(chǎng)景的分析,我們可以看到,導(dǎo)致內(nèi)存泄漏的場(chǎng)景非常多,但最終歸結(jié)成一句話(huà)就是內(nèi)存泄漏本身的定義:程序在申請(qǐng)內(nèi)存后,使用完畢之后,無(wú)法釋放對(duì)應(yīng)的內(nèi)存空間。

因此,在具體實(shí)踐的過(guò)程中,針對(duì)本文所述場(chǎng)景以及其他涉及資源、內(nèi)存使用的場(chǎng)景要特別留意一下,做好正常、異常邏輯下各類(lèi)資源的釋放操作。

當(dāng)然,如果內(nèi)存泄漏已經(jīng)發(fā)生,在尋找內(nèi)存泄漏的問(wèn)題點(diǎn)時(shí),除了全面定點(diǎn)排查項(xiàng)目中涉及到資源使用的情況之外,還可以結(jié)合具體的編程語(yǔ)言(比如,Java的VisualVM等)的內(nèi)存分析工具進(jìn)行來(lái)定位導(dǎo)致內(nèi)存泄漏的地方。關(guān)于各類(lèi)工具的使用及內(nèi)存分析,本篇文章就不再展開(kāi)。

責(zé)任編輯:武曉燕 來(lái)源: 程序新視界
相關(guān)推薦

2021-06-30 21:21:01

抽象泄漏框架

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺(tái)

2021-08-12 14:19:14

Slice數(shù)組類(lèi)型內(nèi)存

2023-05-08 08:21:15

JavaNIO編程

2023-09-06 14:57:46

JavaScript編程語(yǔ)言

2023-07-30 15:18:54

JavaScript屬性

2021-03-05 18:04:15

JavaScript循環(huán)代碼

2021-03-09 14:04:01

JavaScriptCookie數(shù)據(jù)

2021-09-27 09:18:30

ListIterato接口方法

2021-01-26 23:46:32

JavaScript數(shù)據(jù)結(jié)構(gòu)前端

2020-12-08 08:09:49

SVG圖標(biāo)Web

2024-01-30 13:47:45

2021-02-26 20:01:57

SVG濾鏡元素

2021-06-24 09:05:08

JavaScript日期前端

2021-05-18 08:30:42

JavaScript 前端JavaScript時(shí)

2024-04-19 14:23:52

SwitchJavaScript開(kāi)發(fā)

2021-02-02 18:39:05

JavaScript

2021-01-29 18:41:16

JavaScript函數(shù)語(yǔ)法

2021-06-04 09:56:01

JavaScript 前端switch
點(diǎn)贊
收藏

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

特黄视频在线观看| 熟女少妇a性色生活片毛片| 不卡av免费观看| 91在线你懂得| 成人免费福利视频| 日本熟妇色xxxxx日本免费看| 女人av一区| 欧美一区二区女人| 国产在线青青草| av网站网址在线观看| av日韩在线网站| 国产色视频一区| 日韩av一二三区| 婷婷亚洲五月色综合| 亚洲激情在线观看视频免费| 岛国毛片在线播放| 一个人看的www视频在线免费观看| 中文字幕第一区第二区| 国产精品自拍首页| 在线免费看毛片| 午夜在线观看免费一区| 欧美日韩成人免费| www..com.cn蕾丝视频在线观看免费版 | 国产精品成人国产乱| 国产精品嫩模av在线| 精品欧美乱码久久久久久| 亚欧在线免费观看| 国产污视频在线播放| 亚洲欧洲精品一区二区精品久久久| 九九九热999| www久久久久久| 久久精品免费观看| 国产成人精品一区二区| 久久久久久久黄色| 91精品亚洲| 色系列之999| aaaaaav| 这里视频有精品| 欧美日韩一级片网站| 欧美 日韩 国产在线观看| 日本大胆在线观看| 国产精品国产自产拍高清av | 国产精品成人在线| 中文字幕一区二区三区精品 | 欧美日本在线视频中文字字幕| 一级在线观看视频| 精品一区二区三区中文字幕老牛| 亚洲精品999| 999精品免费视频| 第四色在线一区二区| 日韩一区二区电影网| 国产福利精品一区二区三区| 国产精品黄色片| 欧美日韩一区三区四区| 亚洲欧美激情网| 成人在线不卡| 欧美美女一区二区在线观看| 国产一伦一伦一伦| 国内欧美日韩| 欧美日韩国产三级| 伊人成人免费视频| av不卡一区二区| 亚洲国产精品免费| 一区二区视频观看| 亚洲人成伊人成综合图片| 国产视频亚洲视频| 美女脱光内衣内裤| 精品国产1区| 日韩亚洲第一页| 91高清免费观看| 欧美精品午夜| 国内精久久久久久久久久人| 国产成人无码精品久久久久| 国产乱码精品| 国产精品黄色影片导航在线观看| 中国女人真人一级毛片| 精品在线视频一区| 99久久99| 免费一级在线观看| 国产精品拍天天在线| 欧美一级免费在线观看| 成人免费高清观看| 色老头久久综合| gai在线观看免费高清| 国产中文欧美日韩在线| 精品1区2区在线观看| 香蕉网在线播放| 欧美成人精品一区二区三区在线看| 久久久国产影院| 日本系列第一页| 日本伊人色综合网| 91亚洲精品视频| 日本私人网站在线观看| 国产精品私人自拍| 青草视频在线观看视频| 国产超碰精品| 精品免费国产一区二区三区四区| 中日韩精品一区二区三区 | 久久精品99久久久久久久久| 精品在线免费观看视频| 久久久精品性| av资源站久久亚洲| 国产尤物视频在线| 亚洲综合男人的天堂| 日本黄网站免费| 免费一区二区三区在线视频| 日韩av在线免费观看一区| 羞羞在线观看视频| 国产亚洲精品v| 91精品在线一区| 国产日本在线观看| 亚洲国产中文字幕| 97超碰人人爽| 蜜桃一区二区| 欧美激情中文网| 亚洲天堂网在线观看视频| 99国产精品久久| 日本一级淫片演员| 992tv国产精品成人影院| 精品99久久久久久| 欧产日产国产v| 日本成人在线一区| 久久国产精品免费一区| 日本伦理一区二区| 欧美日韩国产首页| 亚洲午夜精品久久久久久高潮 | 午夜欧美不卡精品aaaaa| 亚洲视频中文字幕在线观看| 91理论电影在线观看| 大荫蒂性生交片| 国产精区一区二区| 深夜福利亚洲导航| 亚洲精品久久久久久久蜜桃| 99精品国产99久久久久久白柏| 777久久精品一区二区三区无码 | 另类视频在线| 69堂成人精品免费视频| 日本欧美一区二区三区不卡视频| 国产一区白浆| 精品欧美一区二区在线观看视频 | 国产成人aa精品一区在线播放| 亚洲精品国产精| 亚洲婷婷在线视频| www.com黄色片| 成人精品影院| 国产一区视频在线播放| 亚乱亚乱亚洲乱妇| 欧美性猛交一区二区三区精品| 97超碰在线免费观看| 香蕉精品999视频一区二区 | 亚洲男女av一区二区| 成人妇女淫片aaaa视频| 蜜芽在线免费观看| 欧美精品日韩一区| 性欧美疯狂猛交69hd| 激情综合网av| 菠萝蜜视频在线观看入口| 亚洲精品aⅴ| 久久久久免费视频| 欧美 日韩 国产 精品| 亚洲一区二区三区激情| 日本一级大毛片a一| 亚洲激情综合| 欧美大香线蕉线伊人久久| 欧美裸体视频| 国产香蕉97碰碰久久人人| 国产精品午夜一区二区| 国产精品久久久久久久久久久免费看| 免费看污污网站| 久久久久久久久99精品大| 91九色国产社区在线观看| 日本欧美电影在线观看| 亚洲精品电影网| 国产精品尤物视频| 亚洲三级电影网站| 麻豆短视频在线观看| 国产日韩一区| 亚洲图片都市激情| 亚洲午夜精品| 国产91精品久久久久久| 9色在线视频| 日韩女优制服丝袜电影| 日韩欧美中文字幕一区二区| 久久久久高清精品| 欧美激情第3页| 亚洲精品看片| 色一情一乱一伦一区二区三区丨| 成人黄色毛片| 欧美激情视频在线免费观看 欧美视频免费一| 性猛交xxxx乱大交孕妇印度| 欧美性感美女h网站在线观看免费| 少妇太紧太爽又黄又硬又爽小说| 美女网站在线免费欧美精品| 免费成人深夜夜行网站视频| 久久免费视频66| 国产欧美精品va在线观看| 国产一线二线在线观看| 亚洲午夜av久久乱码| 不卡av中文字幕| 在线观看不卡视频| 久久久久久免费观看| 国产婷婷色一区二区三区四区| www.成年人| 久久激情中文| 久久这里只有精品8| 精品免费一区二区| 国产精品一区二区欧美| 久久99国产精品二区高清软件| 国语自产在线不卡| 巨大荫蒂视频欧美大片| 亚洲人成电影网站色www| 精品久久久免费视频| 91久久精品网| 男女啊啊啊视频| 亚洲女爱视频在线| 久久亚洲AV无码专区成人国产| 成人午夜又粗又硬又大| 91亚洲精品久久久蜜桃借种| 免费在线亚洲欧美| 人妻av无码专区| 色综合色综合| 欧美日韩一区在线视频| 麻豆精品av| 91视频免费进入| **精品中文字幕一区二区三区| 欧洲s码亚洲m码精品一区| 日韩另类在线| 久久成人一区二区| 超碰97在线免费观看| 日韩hd视频在线观看| 亚洲成a人片在线| 91精品国产一区二区人妖| 一区二区小视频| 在线一区二区三区四区| 日韩毛片在线视频| 亚洲亚洲人成综合网络| 国产盗摄一区二区三区在线| 亚洲欧洲精品一区二区三区 | 特种兵之深入敌后| 精品中文字幕一区二区 | av一二三不卡影片| 日韩成人av影院| 成人性生交大片免费看视频在线| 色婷婷一区二区三区在线观看| 久久99久久99| 色一情一区二区三区| 美女精品自拍一二三四| 99热这里只有精品在线播放| 视频一区国产视频| 中文字幕无码不卡免费视频| 鲁大师成人一区二区三区| 欧美色图另类小说| 麻豆91精品| 国产aaaaa毛片| 免费成人美女在线观看.| 国产一级做a爰片久久| 另类的小说在线视频另类成人小视频在线 | 性xxxfreexxxx性欧美| 九九精品视频在线| 美女精品视频| 91国内揄拍国内精品对白| 老牛影视精品| 日本精品视频在线播放| 久久91导航| 成人激情在线观看| 亚洲超碰在线观看| 国产欧美日韩综合一区在线观看 | 一区二区三区无码高清视频| 日韩黄色影院| 欧美国产亚洲视频| 中国色在线日|韩| 国产精品美女午夜av| 色8久久久久| 波多野结衣久草一区| 全国精品免费看| 婷婷久久五月天| 永久亚洲成a人片777777| 亚洲理论电影在线观看| 老牛嫩草一区二区三区日本| 天天操天天干天天做| 国产成a人亚洲精品| 双性尿奴穿贞c带憋尿| 国产精品欧美一区二区三区| 538精品在线观看| 欧美日韩在线另类| 91女人18毛片水多国产| 亚洲精品在线免费播放| 黄色影院在线播放| 九九热精品视频国产| 中文字幕在线中文字幕在线中三区| 国产精品久久中文| gogo久久日韩裸体艺术| 欧美在线一二三区| 欧美一区成人| 北条麻妃视频在线| 国产宾馆实践打屁股91| xxxx日本免费| 亚洲美女精品一区| 国产午夜精品久久久久| 欧美一区二区三区色| 免费在线看v| 欧美极品少妇xxxxⅹ免费视频| 欧美一级大片| 99热在线播放| 人人狠狠综合久久亚洲婷| 国产手机免费视频| 九色|91porny| 90岁老太婆乱淫| 清纯唯美日韩| 国产成人一区二区在线| 51精品国产| 超碰在线免费观看97| 老色鬼久久亚洲一区二区| 潘金莲一级淫片aaaaa| 欧美激情一区二区三区蜜桃视频| 国产午夜精品一区二区理论影院| 欧美精品久久99久久在免费线| 人操人视频在线观看| 色综合久综合久久综合久鬼88| 成人亚洲综合| 日本一区视频在线观看免费| 91久久亚洲| 在线播放第一页| 亚洲男帅同性gay1069| 中国老头性行为xxxx| 亚洲午夜av久久乱码| 欧美91看片特黄aaaa| 国产精品午夜av在线| 欧美黄在线观看| 国产大片一区二区三区| 国产精品二三区| 日韩xxx视频| 国产一区二区美女视频| 一区二区三区电影大全| 好看的日韩精品| 1024精品一区二区三区| 中文字幕18页| 亚洲午夜视频在线观看| 99久久精品国产一区色| 久久久av免费| 四虎国产精品成人免费影视| 亚洲欧美日韩另类精品一区二区三区| 性欧美暴力猛交另类hd| 亚洲第九十七页| 欧美视频在线免费| 亚洲三区在线播放| 欧美亚洲另类在线| 色88888久久久久久影院| 国产中文字幕视频在线观看| 91麻豆6部合集magnet| 国产成人在线视频观看| 精品中文字幕久久久久久| 综合另类专区| 偷拍视频一区二区| 蜜桃在线一区二区三区| 亚洲黄色网址大全| 欧美精品亚洲二区| caopo在线| 99re在线国产| 亚洲高清免费| 日本aaa视频| 在线精品视频免费观看| 99视频在线观看地址| 成人福利在线视频| 国自产拍偷拍福利精品免费一 | 激情网站五月天| 国产偷国产偷亚洲高清人白洁 | 激情五月婷婷在线| 日韩美女天天操| 在线女人免费视频| 亚洲精品无人区| 国产麻豆日韩欧美久久| 久久久夜色精品| 亚洲男女性事视频| 免费成人黄色网| 黄网站色视频免费观看| 91色在线porny| 中文字幕一二三四| 欧美黑人一区二区三区| 亚瑟一区二区三区四区| 国产精品拍拍拍| 洋洋av久久久久久久一区| 亚州男人的天堂| 91精品在线看| 亚洲一区二区三区免费在线观看| 亚洲高潮女人毛茸茸| 日韩一级欧美一级| 韩国美女久久| 色哺乳xxxxhd奶水米仓惠香| 9久草视频在线视频精品| 自拍偷拍色综合| 久久久久久有精品国产| 欧美日韩精品在线一区| 在线观看免费视频黄| 欧美亚洲综合在线| 久草在线视频福利| 亚洲不卡1区| 91在线看国产| 国产熟女一区二区三区四区| 欧美最顶级丰满的aⅴ艳星|