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

Linux內存中的Cache真的能被回收么?

系統 Linux 系統運維
我們先了解一下page cache和buffer cache。Page cache主要用來作為文件系統上的文件數據的緩存來用,尤其是針對當進程對文件有read/write操作的時候。然而Buffer cache則主要是設計用來在系統對塊設備進行讀寫的時候,對塊進行數據緩存的系統來使用。這意味著某些對塊的操作會使用buffer cache進行緩存,比如我們在格式化文件系統的時候。

在Linux系統中,我們經常用free命令來查看系統內存的使用狀態。在一個RHEL6的系統上,free命令的顯示內容大概是這樣一個狀態:

  1. [root@tencent64 ~]# free total used free shared buffers cachedMem: 132256952 72571772 59685180 0 1762632 53034704-/+ buffers/cache: 17774436 114482516Swap: 2101192 508 2100684 

這里的默認顯示單位是kb,我的服務器是128G內存,所以數字顯得比較大。這個命令幾乎是每一個使用過Linux的人必會的命令,但越是這樣的命令,似乎真正明白的人越少(我是說比例越少)。一般情況下,對此命令輸出的理解可以分這幾個層次:

不了解。這樣的人的第一反應是:天啊,內存用了好多,70個多G,可是我幾乎沒有運行什么大程序啊?為什么會這樣?Linux好占內存!

自以為很了解。這樣的人一般評估過會說:嗯,根據我專業的眼光看的出來,內存才用了17G左右,還有很多剩余內存可用。buffers/cache占用的較多,說明系統中有進程曾經讀寫過文件,但是不要緊,這部分內存是當空閑來用的。

真的很了解。這種人的反應反而讓人感覺最不懂Linux,他們的反應是:free顯示的是這樣,好吧我知道了。神馬?你問我這些內存夠不夠,我當然不知道啦!我特么怎么知道你程序怎么寫的?

根據目前網絡上技術文檔的內容,我相信絕大多數了解一點Linux的人應該處在第二種層次。大家普遍認為,buffers和cached所占用的內存空間是可以在內存壓力較大的時候被釋放當做空閑空間用的。但真的是這樣么?在論證這個題目之前,我們先簡要介紹一下buffers和cached是什么意思:

什么是buffer/cache?

buffer和cache是兩個在計算機技術中被用濫的名詞,放在不通語境下會有不同的意義。在Linux的內存管理中,這里的buffer指Linux內存的:Buffer cache。這里的cache指Linux內存中的:Page cache。翻譯成中文可以叫做緩沖區緩存和頁面緩存。在歷史上,它們一個(buffer)被用來當成對io設備寫的緩存,而另一個(cache)被用來當作對io設備的讀緩存,這里的io設備,主要指的是塊設備文件和文件系統上的普通文件。但是現在,它們的意義已經不一樣了。在當前的內核中,page cache顧名思義就是針對內存頁的緩存,說白了就是,如果有內存是以page進行分配管理的,都可以使用page cache作為其緩存來管理使用。當然,不是所有的內存都是以頁(page)進行管理的,也有很多是針對塊(block)進行管理的,這部分內存使用如果要用到cache功能,則都集中到buffer cache中來使用。(從這個角度出發,是不是buffer cache改名叫做block cache更好?)然而,也不是所有塊(block)都有固定長度,系統上塊的長度主要是根據所使用的塊設備決定的,而頁長度在X86上無論是32位還是64位都是4k。

明白了這兩套緩存系統的區別,就可以理解它們究竟都可以用來做什么了。

什么是page cache

Page cache主要用來作為文件系統上的文件數據的緩存來用,尤其是針對當進程對文件有read/write操作的時候。如果你仔細想想的話,作為可以映射文件到內存的系統調用:mmap是不是很自然的也應該用到page cache?在當前的系統實現里,page cache也被作為其它文件類型的緩存設備來用,所以事實上page cache也負責了大部分的塊設備文件的緩存工作。

什么是buffer cache

Buffer cache則主要是設計用來在系統對塊設備進行讀寫的時候,對塊進行數據緩存的系統來使用。這意味著某些對塊的操作會使用buffer cache進行緩存,比如我們在格式化文件系統的時候。一般情況下兩個緩存系統是一起配合使用的,比如當我們對一個文件進行寫操作的時候,page cache的內容會被改變,而buffer cache則可以用來將page標記為不同的緩沖區,并記錄是哪一個緩沖區被修改了。這樣,內核在后續執行臟數據的回寫(writeback)時,就不用將整個page寫回,而只需要寫回修改的部分即可。

如何回收cache?

Linux內核會在內存將要耗盡的時候,觸發內存回收的工作,以便釋放出內存給急需內存的進程使用。一般情況下,這個操作中主要的內存釋放都來自于對buffer/cache的釋放。尤其是被使用更多的cache空間。既然它主要用來做緩存,只是在內存夠用的時候加快進程對文件的讀寫速度,那么在內存壓力較大的情況下,當然有必要清空釋放cache,作為free空間分給相關進程使用。所以一般情況下,我們認為buffer/cache空間可以被釋放,這個理解是正確的。

但是這種清緩存的工作也并不是沒有成本。理解cache是干什么的就可以明白清緩存必須保證cache中的數據跟對應文件中的數據一致,才能對cache進行釋放。所以伴隨著cache清除的行為的,一般都是系統IO飆高。因為內核要對比cache中的數據和對應硬盤文件上的數據是否一致,如果不一致需要寫回,之后才能回收。

在系統中除了內存將被耗盡的時候可以清緩存以外,我們還可以使用下面這個文件來人工觸發緩存清除的操作:

  1. [root@tencent64 ~]# cat /proc/sys/vm/drop_caches 1 

方法是:

  1. echo 1 > /proc/sys/vm/drop_caches 

當然,這個文件可以設置的值分別為1、2、3。它們所表示的含義為:

echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache。

echo 2 > /proc/sys/vm/drop_caches:表示清除回收slab分配器中的對象(包括目錄項緩存和inode緩存)。slab分配器是內核中管理內存的一種機制,其中很多緩存數據實現都是用的pagecache。

echo 3 > /proc/sys/vm/drop_caches:表示清除pagecache和slab分配器中的緩存對象。

cache都能被回收么?

我們分析了cache能被回收的情況,那么有沒有不能被回收的cache呢?當然有。我們先來看第一種情況:

tmpfs

大家知道Linux提供一種“臨時”文件系統叫做tmpfs,它可以將內存的一部分空間拿來當做文件系統使用,使內存空間可以當做目錄文件來用?,F在絕大多數Linux系統都有一個叫做/dev/shm的tmpfs目錄,就是這樣一種存在。當然,我們也可以手工創建一個自己的tmpfs,方法如下:

  1. [root@tencent64 ~]# mkdir /tmp/tmpfs[root@tencent64 ~]# mount -t tmpfs -o size=20G none /tmp/tmpfs/[root@tencent64 ~]# dfFilesystem 1K-blocks Used Available Use% Mounted on/dev/sda1 10325000 3529604 6270916 37% //dev/sda3 20646064 9595940 10001360 49% /usr/local/dev/mapper/vg-data 103212320 26244284 71725156 27% /datatmpfs 66128476 14709004 51419472 23% /dev/shmnone 20971520 0 20971520 0% /tmp/tmpfs 

于是我們就創建了一個新的tmpfs,空間是20G,我們可以在/tmp/tmpfs中創建一個20G以內的文件。如果我們創建的文件實際占用的空間是內存的話,那么這些數據應該占用內存空間的什么部分呢?根據pagecache的實現功能可以理解,既然是某種文件系統,那么自然該使用pagecache的空間來管理。我們試試是不是這樣?

  1. [root@tencent64 ~]# free -g total used free shared buffers cachedMem: 126 36 89 0 1 19-/+ buffers/cache: 15 111Swap: 2 0 2[root@tencent64 ~]# dd if=/dev/zero of=/tmp/tmpfs/testfile bs=1G count=1313+0 records in13+0 records out13958643712 bytes (14 GB) copied, 9.49858 s, 1.5 GB/s[root@tencent64 ~]# [root@tencent64 ~]# free -g total used free shared buffers cachedMem: 126 49 76 0 1 32-/+ buffers/cache: 15 110Swap: 2 0 2 

我們在tmpfs目錄下創建了一個13G的文件,并通過前后free命令的對比發現,cached增長了13G,說明這個文件確實放在了內存里并且內核使用的是cache作為存儲。再看看我們關心的指標: -/+ buffers/cache那一行。我們發現,在這種情況下free命令仍然提示我們有110G內存可用,但是真的有這么多么?我們可以人工觸發內存回收看看現在到底能回收多少內存:

  1. [root@tencent64 ~]# echo 3 > /proc/sys/vm/drop_caches[root@tencent64 ~]# free -g total used free shared buffers cachedMem: 126 43 82 0 0 29-/+ buffers/cache: 14 111Swap: 2 0 2 

可以看到,cached占用的空間并沒有像我們想象的那樣完全被釋放,其中13G的空間仍然被/tmp/tmpfs中的文件占用的。當然,我的系統中還有其他不可釋放的cache占用著其余16G內存空間。那么tmpfs占用的cache空間什么時候會被釋放呢?是在其文件被刪除的時候.如果不刪除文件,無論內存耗盡到什么程度,內核都不會自動幫你把tmpfs中的文件刪除來釋放cache空間。

  1. [root@tencent64 ~]# rm /tmp/tmpfs/testfile [root@tencent64 ~]# free -g total used free shared buffers cachedMem: 126 30 95 0 0 16-/+ buffers/cache: 14 111Swap: 2 0 2 

這是我們分析的第一種cache不能被回收的情況。還有其他情況,比如:

共享內存

共享內存是系統提供給我們的一種常用的進程間通信(IPC)方式,但是這種通信方式不能在shell中申請和使用,所以我們需要一個簡單的測試程序,代碼如下:

  1. [root@tencent64 ~]# cat shm.c #include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/ipc.h>#include <sys/shm.h>#include <string.h>#define MEMSIZE 2048*1024*1023intmain(){ int shmid; char *ptr; pid_t pid; struct shmid_ds buf; int ret; shmid = shmget(IPC_PRIVATE, MEMSIZE, 0600); if (shmid<0) { perror("shmget()"); exit(1); } ret = shmctl(shmid, IPC_STAT, &buf); if (ret < 0) { perror("shmctl()"); exit(1); } printf("shmid: %d\n", shmid); printf("shmsize: %d\n", buf.shm_segsz); buf.shm_segsz *= 2; ret = shmctl(shmid, IPC_SET, &buf); if (ret < 0) { perror("shmctl()"); exit(1); } ret = shmctl(shmid, IPC_SET, &buf); if (ret < 0) { perror("shmctl()"); exit(1); } printf("shmid: %d\n", shmid); printf("shmsize: %d\n", buf.shm_segsz); pid = fork(); if (pid<0) { perror("fork()"); exit(1); } if (pid==0) { ptr = shmat(shmid, NULL, 0); if (ptr==(void*)-1) { perror("shmat()"); exit(1); } bzero(ptr, MEMSIZE); strcpy(ptr, "Hello!"); exit(0); } else { wait(NULL); ptr = shmat(shmid, NULL, 0); if (ptr==(void*)-1) { perror("shmat()"); exit(1); } puts(ptr); exit(0); }} 

程序功能很簡單,就是申請一段不到2G共享內存,然后打開一個子進程對這段共享內存做一個初始化操作,父進程等子進程初始化完之后輸出一下共享內存的內容,然后退出。但是退出之前并沒有刪除這段共享內存。我們來看看這個程序執行前后的內存使用:

  1. [root@tencent64 ~]# free -g total used free shared buffers cachedMem: 126 30 95 0 0 16-/+ buffers/cache: 14 111Swap: 2 0 2[root@tencent64 ~]# ./shm shmid: 294918shmsize: 2145386496shmid: 294918shmsize: -4194304Hello![root@tencent64 ~]# free -g total used free shared buffers cachedMem: 126 32 93 0 0 18-/+ buffers/cache: 14 111Swap: 2 0 2 

cached空間由16G漲到了18G。那么這段cache能被回收么?繼續測試:

  1. [root@tencent64 ~]# echo 3 > /proc/sys/vm/drop_caches[root@tencent64 ~]# free -g total used free shared buffers cachedMem: 126 32 93 0 0 18-/+ buffers/cache: 14 111Swap: 2 0 2 

結果是仍然不可回收。大家可以觀察到,這段共享內存即使沒人使用,仍然會長期存放在cache中,直到其被刪除。刪除方法有兩種,一種是程序中使用shmctl()去IPC_RMID,另一種是使用ipcrm命令。我們來刪除試試:

  1. [root@tencent64 ~]# ipcs -m------ Shared Memory Segments --------key shmid owner perms bytes nattch status 0x00005feb 0 root 666 12000 4 0x00005fe7 32769 root 666 524288 2 0x00005fe8 65538 root 666 2097152 2 0x00038c0e 131075 root 777 2072 1 0x00038c14 163844 root 777 5603392 0 0x00038c09 196613 root 777 221248 0 0x00000000 294918 root 600 2145386496 0 [root@tencent64 ~]# ipcrm -m 294918[root@tencent64 ~]# ipcs -m------ Shared Memory Segments --------key shmid owner perms bytes nattch status 0x00005feb 0 root 666 12000 4 0x00005fe7 32769 root 666 524288 2 0x00005fe8 65538 root 666 2097152 2 0x00038c0e 131075 root 777 2072 1 0x00038c14 163844 root 777 5603392 0 0x00038c09 196613 root 777 221248 0 [root@tencent64 ~]# free -g total used free shared buffers cachedMem: 126 30 95 0 0 16-/+ buffers/cache: 14 111Swap: 2 0 2 

刪除共享內存后,cache被正常釋放了。這個行為與tmpfs的邏輯類似。內核底層在實現共享內存(shm)、消息隊列(msg)和信號量數組(sem)這些POSIX:XSI的IPC機制的內存存儲時,使用的都是tmpfs。這也是為什么共享內存的操作邏輯與tmpfs類似的原因。當然,一般情況下是shm占用的內存更多,所以我們在此重點強調共享內存的使用。說到共享內存,Linux還給我們提供了另外一種共享內存的方法,就是:

mmap

mmap()是一個非常重要的系統調用,這僅從mmap本身的功能描述上是看不出來的。從字面上看,mmap就是將一個文件映射進進程的虛擬內存地址,之后就可以通過操作內存的方式對文件的內容進行操作。但是實際上這個調用的用途是很廣泛的。當malloc申請內存時,小段內存內核使用sbrk處理,而大段內存就會使用mmap。當系統調用exec族函數執行時,因為其本質上是將一個可執行文件加載到內存執行,所以內核很自然的就可以使用mmap方式進行處理。我們在此僅僅考慮一種情況,就是使用mmap進行共享內存的申請時,會不會跟shmget()一樣也使用cache?

同樣,我們也需要一個簡單的測試程序:

  1. [root@tencent64 ~]# cat mmap.c #include <stdlib.h>#include <stdio.h>#include <strings.h>#include <sys/mman.h>#include <sys/stat.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>#define MEMSIZE 1024*1024*1023*2#define MPFILE "./mmapfile"int main(){ void *ptr; int fd; fd = open(MPFILE, O_RDWR); if (fd < 0) { perror("open()"); exit(1); } ptr = mmap(NULL, MEMSIZE, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANON, fd, 0); if (ptr == NULL) { perror("malloc()"); exit(1); } printf("%p\n", ptr); bzero(ptr, MEMSIZE); sleep(100); munmap(ptr, MEMSIZE); close(fd); exit(1);} 

這次我們干脆不用什么父子進程的方式了,就一個進程,申請一段2G的mmap共享內存,然后初始化這段空間之后等待100秒,再解除影射所以我們需要在它sleep這100秒內檢查我們的系統內存使用,看看它用的是什么空間?當然在這之前要先創建一個2G的文件./mmapfile。結果如下:

  1. [root@tencent64 ~]# dd if=/dev/zero of=mmapfile bs=1G count=2[root@tencent64 ~]# echo 3 > /proc/sys/vm/drop_caches[root@tencent64 ~]# free -g total used free shared buffers cachedMem: 126 30 95 0 0 16-/+ buffers/cache: 14 111Swap: 2 0 2 

然后執行測試程序:

  1. [root@tencent64 ~]# ./mmap &[1] 191570x7f1ae3635000[root@tencent64 ~]# free -g total used free shared buffers cachedMem: 126 32 93 0 0 18-/+ buffers/cache: 14 111Swap: 2 0 2[root@tencent64 ~]# echo 3 > /proc/sys/vm/drop_caches[root@tencent64 ~]# free -g total used free shared buffers cachedMem: 126 32 93 0 0 18-/+ buffers/cache: 14 111Swap: 2 0 2 

我們可以看到,在程序執行期間,cached一直為18G,比之前漲了2G,并且此時這段cache仍然無法被回收。然后我們等待100秒之后程序結束。

  1. [root@tencent64 ~]# [1]+ Exit 1 ./mmap[root@tencent64 ~]# [root@tencent64 ~]# free -g total used free shared buffers cachedMem: 126 30 95 0 0 16-/+ buffers/cache: 14 111Swap: 2 0 2 

程序退出之后,cached占用的空間被釋放。這樣我們可以看到,使用mmap申請標志狀態為MAP_SHARED的內存,內核也是使用的cache進行存儲的。在進程對相關內存沒有釋放之前,這段cache也是不能被正常釋放的。實際上,mmap的MAP_SHARED方式申請的內存,在內核中也是由tmpfs實現的。由此我們也可以推測,由于共享庫的只讀部分在內存中都是以mmap的MAP_SHARED方式進行管理,實際上它們也都是要占用cache且無法被釋放的。

最后

我們通過三個測試例子,發現Linux系統內存中的cache并不是在所有情況下都能被釋放當做空閑空間用的。并且也也明確了,即使可以釋放cache,也并不是對系統來說沒有成本的??偨Y一下要點,我們應該記得這樣幾點:

當cache作為文件緩存被釋放的時候會引發IO變高,這是cache加快文件訪問速度所要付出的成本。

tmpfs中存儲的文件會占用cache空間,除非文件刪除否則這個cache不會被自動釋放。

使用shmget方式申請的共享內存會占用cache空間,除非共享內存被ipcrm或者使用shmctl去IPC_RMID,否則相關的cache空間都不會被自動釋放。

使用mmap方法申請的MAP_SHARED標志的內存會占用cache空間,除非進程將這段內存munmap,否則相關的cache空間都不會被自動釋放。

實際上shmget、mmap的共享內存,在內核層都是通過tmpfs實現的,tmpfs實現的存儲用的都是cache。

當理解了這些的時候,希望大家對free命令的理解可以達到我們說的第三個層次。我們應該明白,內存的使用并不是簡單的概念,cache也并不是真的可以當成空閑空間用的。如果我們要真正深刻理解你的系統上的內存到底使用的是否合理,是需要理解清楚很多更細節知識,并且對相關業務的實現做更細節判斷的。我們當前實驗場景是Centos 6的環境,不同版本的Linux的free現實的狀態可能不一樣,大家可以自己去找出不同的原因。

當然,本文所述的也不是所有的cache不能被釋放的情形。那么,在你的應用場景下,還有那些cache不能被釋放的場景呢?

責任編輯:武曉燕 來源: IT技術博客大學習
相關推薦

2011-08-26 13:09:25

2014-12-18 10:16:00

Java

2018-08-03 09:07:40

Linux內存buffercache

2013-10-11 17:32:18

Linux運維內存管理

2010-06-02 13:00:43

Linux 內存監控

2017-08-22 14:26:39

Linuxbuffercache

2023-10-26 16:02:04

線程

2022-05-13 09:02:34

LinuxBufferCache

2013-07-22 16:31:27

微軟

2020-12-23 13:14:00

LinuxLinux內存Swap

2021-03-30 10:50:18

Linux內存命令

2021-09-05 18:29:58

Linux內存回收

2012-05-10 09:37:25

CIO云計算云服務

2025-03-26 00:00:05

2009-08-19 11:33:40

goto

2018-10-30 12:44:04

Linux系統內存

2019-08-27 08:24:17

簡歷技能工作

2013-04-01 10:07:19

Java內存回收機制

2023-03-14 11:00:05

過期策略Redis

2018-07-01 08:34:09

緩存數據服務
點贊
收藏

51CTO技術棧公眾號

亚洲黄色天堂| 成人在线日韩| 国产视频不卡一区| 成人h片在线播放免费网站| 91麻豆免费视频网站| 亚洲超碰在线观看| 色综合久久久久综合99| 在线观看日韩羞羞视频| 蜜桃视频在线观看www| 久久亚洲影院| 欧美日韩成人在线播放| 亚洲综合网在线观看| 亚洲高清国产拍精品26u| 亚洲不卡一区二区三区| 五月天婷亚洲天综合网鲁鲁鲁| 国产精品久久久久精| 99成人在线| 久久久精品在线| 中文字幕在线看高清电影| 亚洲福利影视| 欧美在线观看一二区| 成人免费性视频| 在线观看免费黄视频| 成人动漫一区二区| 91精品国产自产在线观看永久| 国产无码精品视频| 国产精品久久久久久久| 亚洲精品一区二区网址| 男插女视频网站| 成人日韩在线观看| 五月天欧美精品| 国产盗摄视频在线观看| 国产专区在线| 91丨porny丨首页| 999国产在线| 国产一区二区在线视频观看| 日韩精品色哟哟| 97成人在线视频| 久久久久黄色片| 外国成人免费视频| 中文精品99久久国产香蕉| 少妇按摩一区二区三区| 国产精品2023| 亚洲精品一线二线三线无人区| 午夜视频在线网站| 福利一区在线| 欧美性感一区二区三区| 成年人免费大片| 国产精选在线| 亚洲不卡在线观看| 欧美成人高潮一二区在线看| 欧美人与牲禽动交com| 亚洲视频香蕉人妖| 中文字幕一区二区三区四区五区| 国产中文字幕在线| 久久精品男人天堂av| 欧美日韩国产精品一区二区| 亚洲人成色777777精品音频| 99re热视频精品| 鲁丝一区二区三区免费| 无码国产伦一区二区三区视频 | 黄色片一级视频| www.综合网.com| 亚洲影院在线观看| 波多野结衣av一区二区全免费观看 | 国产精品亚洲天堂| 黄色网在线播放| 亚洲日本在线看| 91传媒免费视频| gogo高清午夜人体在线| 午夜a成v人精品| 成人综合视频在线| 欧美性片在线观看| 欧美精品国产精品| 人妻激情偷乱视频一区二区三区| 日韩激情综合| 日韩av在线看| 国产伦理片在线观看| 久久高清精品| 欧美极品美女电影一区| 91av在线免费视频| 日本中文字幕不卡| 91免费电影网站| 国 产 黄 色 大 片| 久久综合成人精品亚洲另类欧美| 奇米精品在线| 八戒八戒神马在线电影| 亚洲午夜久久久久久久久久久| 奇米精品一区二区三区| 日韩经典一区| 日韩一区二区电影在线| 一女三黑人理论片在线| 日韩片欧美片| 欧美精品久久久久| 久久久精品毛片| 国产一区啦啦啦在线观看| 国产欧美在线一区二区| 成人性爱视频在线观看| 夜夜嗨av一区二区三区网页 | 亚洲欧美国产精品桃花| 污网站在线免费看| 一本大道久久精品懂色aⅴ| 亚洲精品第三页| 日日天天久久| 欧美成人剧情片在线观看| 精品欧美一区二区三区免费观看 | 欧美日韩一区精品| 偷偷要91色婷婷| 一级做a爰片久久| 国产精品—色呦呦| 欧洲av一区二区嗯嗯嗯啊| 污视频在线观看免费网站| 西瓜成人精品人成网站| 欧美成人国产va精品日本一级| 五月婷婷视频在线| 国产精品一区免费在线观看| 欧美中日韩免费视频| 污视频在线看网站| 欧美日韩国产精品成人| 鲁大师私人影院在线观看| 亚洲91久久| 国产精品99导航| 国精品人妻无码一区二区三区喝尿 | 国产精品免费观看| 午夜欧美大尺度福利影院在线看| 99热这里只有精品在线播放| 天海翼精品一区二区三区| 九色精品美女在线| 91亚洲精品国偷拍自产在线观看 | 精品国产乱码久久久久久1区2区| 国产aaaaaaaaa| 天堂成人免费av电影一区| 国产亚洲一区在线播放| 在线欧美三级| 宅男噜噜噜66一区二区66| 日韩丰满少妇无码内射| 一区二区精品| 精品亚洲欧美日韩| 黄页在线观看免费| 日韩美女天天操| 老湿机69福利| 国产一区在线精品| 亚洲一区三区| 欧美午夜三级| 日韩在线国产精品| 一区二区视频在线免费观看| 国产视频一区在线播放| 免费大片在线观看| 国产一区二区三区四区五区传媒| 8090成年在线看片午夜| 五月天福利视频| 欧美日韩精品在线观看| 少妇毛片一区二区三区| 美女国产精品| 日韩精品一区二区三区色偷偷 | 国产呦小j女精品视频| 亚洲高清不卡| 精品欧美日韩在线| 性欧美18~19sex高清播放| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 国产aⅴ精品一区二区三区久久| 91av视频导航| 欧美777四色影视在线| 色爱区综合激月婷婷| 久久久久亚洲av成人无码电影| 久久九九99| 特级西西444www大精品视频| 国产情侣一区二区三区| 久久精品免费播放| 亚洲精品国产av| 天天爽夜夜爽夜夜爽精品视频| 黄色录像a级片| 丝袜诱惑制服诱惑色一区在线观看| 日韩国产美国| 亚洲欧洲二区| 久久久天堂国产精品女人| 亚洲色欧美另类| 欧美在线高清视频| 看片网站在线观看| gogogo免费视频观看亚洲一| 欧美在线观看成人| 不卡一区综合视频| 亚洲自拍欧美另类| 美女91在线看| 少妇高潮久久久久久潘金莲| av 一区二区三区| 五月天视频一区| 网爆门在线观看| 波多野结衣中文字幕一区| 日韩精品一区二区三区不卡| 夜间精品视频| 免费av在线一区二区| 成人午夜毛片| 欧美第一淫aaasss性| 欧美日韩影视| 在线不卡a资源高清| 国产精品变态另类虐交| 国产女人aaa级久久久级| 深夜福利网站在线观看| 久久性天堂网| av在线免费观看国产| 国产一区毛片| 国产精品视频一区二区三区经| 搜成人激情视频| 欧美—级高清免费播放| a√在线中文网新版址在线| 精品国产一区二区国模嫣然| 一本色道久久综合熟妇| 午夜免费久久看| 国产97免费视频| 国产欧美一区二区在线| 中国特级黄色片| 蜜臀av性久久久久蜜臀aⅴ| 无码粉嫩虎白一线天在线观看| 国产真实有声精品录音| 国产精品一区二区三区在线观| 成人在线观看免费视频| 69影院欧美专区视频| 2024最新电影免费在线观看| 伊人亚洲福利一区二区三区| 免费成人在线看| 欧美一区二区三区视频免费| 真实新婚偷拍xxxxx| 欧美日韩国产限制| 久久免费公开视频| 亚洲日本一区二区| 中文字幕第24页| 久久综合色之久久综合| 国内自拍偷拍视频| 韩国av一区二区三区在线观看| 国产97色在线 | 日韩| 99热精品在线观看| 黄色成人在线免费观看| 欧美韩日一区| 手机看片福利永久国产日韩| 亚洲伊人春色| 久久久综合香蕉尹人综合网| 国产一区二区三区不卡av| 亚洲影院在线看| 国产精品视频一区二区三区| 国产精品免费在线免费| 日韩电影网站| 国产成人亚洲综合青青| 欧美人与性动交xxⅹxx| 欧美在线观看一区二区三区| 鲁鲁在线中文| 欧美一级在线播放| 日韩深夜视频| 欧美亚洲另类制服自拍| 欧美性xxx| 日韩免费在线视频| 免费福利视频一区二区三区| 国产不卡在线观看| 国产另类xxxxhd高清| 国产精品777| 成人做爰视频www| 国产欧美 在线欧美| 先锋影音网一区二区| 91在线播放国产| 日韩有吗在线观看| 国产精品久久一区二区三区| 国产+成+人+亚洲欧洲在线 | 精品久久久久久久久久久下田 | 亚洲特级毛片| 日本丰满少妇xxxx| 性伦欧美刺激片在线观看| www.欧美日本| 久久精品国产亚洲aⅴ | 香蕉免费一区二区三区在线观看| 成人黄色片视频网站| 成人看片爽爽爽| 欧美aaaaa喷水| jvid福利在线一区二区| www亚洲国产| 狠狠综合久久| av免费中文字幕| 久久国产婷婷国产香蕉| 丰满人妻一区二区三区大胸| www.欧美亚洲| 青娱乐国产视频| 亚洲综合清纯丝袜自拍| www.国产高清| 欧美日韩精品一区二区| www.成人免费视频| 亚洲欧美日本精品| 日本在线看片免费人成视1000| 九九视频直播综合网| 亚洲女色av| 92国产精品视频| 欧美大胆a级| 在线看视频不卡| 国产欧美日韩综合一区在线播放 | 国产精品国模大尺度视频| 校园春色 亚洲| 色偷偷一区二区三区| 国产男女猛烈无遮挡| 日韩高清免费在线| 黄在线免费看| 日韩免费在线免费观看| 欧洲一区在线| 水蜜桃一区二区三区| 亚洲成人中文| av中文字幕网址| 久久无码av三级| 永久免费看黄网站| 在线亚洲一区二区| 免费观看a视频| 久久综合免费视频| 日韩高清在线| 久久青青草综合| 国产综合欧美| 日本美女视频一区| 久久久国产精品午夜一区ai换脸| www.av视频| 欧美日韩国产乱码电影| 免费在线毛片| 高清欧美性猛交xxxx黑人猛交| 日韩综合久久| 日韩精品久久久毛片一区二区| 亚洲免费二区| 手机视频在线观看| 久久久五月婷婷| 亚洲一区 视频| 欧美一二三区精品| 日本在线播放| 国产精品久久一| 亚州av日韩av| 日本丰满少妇xxxx| 成人午夜在线视频| 18岁成人毛片| 欧美精品在线观看一区二区| 成年人视频在线看| 青青久久av北条麻妃海外网| 欧美毛片免费观看| 妞干网在线观看视频| 国产精品一区在线观看乱码| 欧美日韩黄色网| 欧美军同video69gay| 在线视频婷婷| 国产欧美一区二区三区久久| 成人vr资源| 五月天婷婷激情视频| 国产三区在线成人av| av一级在线观看| 亚洲女同精品视频| 成人欧美magnet| 欧美下载看逼逼| 丝瓜av网站精品一区二区| 熟女少妇一区二区三区| 欧美午夜影院在线视频| 日本精品专区| 国产成人福利视频| 欧美男gay| 粗暴91大变态调教| 国产精品视频你懂的| 在线免费看av的网站| 久久激情视频免费观看| 国产精品3区| 国产a级黄色大片| 成人av在线资源网| 五月天婷婷激情| jizzjizz欧美69巨大| 成人在线免费播放视频| 欧美激情自拍偷拍| 在线观看国产黄| 久久亚洲精品一区二区| 亚洲日本va| 日日橹狠狠爱欧美超碰| 国产性天天综合网| 一级特黄aa大片| 欧美成人免费va影院高清| 国产精品毛片视频| 成人黄色片视频| 亚洲欧美自拍偷拍| 亚洲精品国产suv一区| 26uuu亚洲伊人春色| 日韩电影在线视频| 日本人dh亚洲人ⅹxx| 婷婷成人综合网| 都市激情一区| 96国产粉嫩美女| 亚洲一区二区三区高清| 人妻熟人中文字幕一区二区| 日韩一区二区三| 美女视频在线免费| 亚洲综合视频一区| 成人午夜大片免费观看| 久久久精品视频网站| 久久久精品网站| 要久久电视剧全集免费| 国产色视频在线播放| 亚洲一本大道在线| 国产成人天天5g影院在线观看| 91亚洲午夜在线| 久久不射中文字幕| 国产成人自拍网站| 国产视频久久久| 欧美片网站免费| 好男人www社区| 亚洲成人动漫一区|