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

刺激,線程池的一個BUG直接把CPU干到100%了。

開發 前端
給大家分享一個關于 ScheduledExecutorService 線程池的 BUG 啊,這個 BUG 能直接把 CPU 給飚到 100%,希望大家永遠踩不到。

你好呀,我是歪歪。

給大家分享一個關于 ScheduledExecutorService 線程池的 BUG 啊,這個 BUG 能直接把 CPU 給飚到 100%,希望大家永遠踩不到。

但是,u1s1,一般來說也很難踩到。

到底咋回事呢,讓我給你細細嗦嗦。

Demo

老規矩,按照慣例,先搞個 Demo 出來玩玩:

圖片

項目里面使用到了 ScheduledThreadPoolExecutor 線程池,該線程池對應的核心線程數放在配置文件里面,通過 @Value 注解來讀取配置文件。

然后通過接口觸發這個線程池里面的任務。

具體來說就是在上面的示例代碼中,在調用 testScheduledPool 接口之后,程序會在 60 秒之后輸出“執行業務邏輯”。

這個代碼的邏輯還是非常簡單清晰的,但是上面的代碼有一個問題,不知道你看出來沒有?

沒看出來也沒關系,我這里都是鼓勵式教學的,不打擊同學的積極性。

所以,別著急,我先給你跑起來,你瞅一眼立馬就能看出問題是啥:

圖片

為什么 coreSize 是 0 呢,我們配置文件里面明明寫的是 2 啊?

因為 setCoreSize 方法是 static  的,導致 @Value 注解失效。

如果去掉 static 那么就能正確讀取到配置文件中的配置:

圖片

雖然這里面也大有學問,但是這并不是本文的重點,這只是一個引子,

為的是引出為什么會在項目里面出現下面這種 coreSize 等于 0 的奇怪的代碼:

ScheduledExecutorService executor = Executors.newScheduledThreadPool(0);

如果我直接給出上面的代碼,一點有人說只有小(大)可(傻)愛(逼)才會這樣寫。

但是鋪墊一個背景之后,就容易接受的多了。

你永遠可以相信我的行文結構,老司開車穩得很,你放心。

好,經過前面的鋪墊,其實我們的 Demo 能直接簡化到這個樣子:

public static void main(String[] args){
ScheduledExecutorService e = Executors.newScheduledThreadPool(0);
e.schedule(() -> {
System.out.println("業務邏輯");
}, 60, TimeUnit.SECONDS);
e.shutdown();
}

這個代碼是可以正常運行的,你粘過去直接就能跑,60 秒后是會正常輸出的。

如果你覺得 60 秒太長了,那么你可以改成 3 秒運行一下,看看程序是不是正常運行并結束了。

但是就這個看起來問題不大的代碼,會導致 CPU 飚到 100% 去。

真的,兒豁嘛。

咋回事呢

到底咋回事呢?

這個其實就是 JDK 的 BUG 導致的,我帶你瞅瞅:

https://bugs.openjdk.org/browse/JDK-8065320

圖片

首先,你看 Fix Version 那個地方是 9,也就是說明這個 BUG 是在 JDK 9 里面修復了。JDK 8 里面是可以復現的。

其次,這個標題其實就包含了非常多的信息了,它說對于 ScheduledExecutorService 來說 getTask 方法里面存在頻繁的循環。

那么問題就來了:頻繁的循環,比如 for(;;) ,while(true) 這樣的代碼,長時間從循環里面走不出來,會導致什么現象?

那不就是導致 CPU 飆高嗎。

注意,這里我說的是“長時間從循環里面走不出來”,而不是死循環,這兩者之間的差異還是很大的。

我代碼里面的示例就是使用的提出 BUG 的哥們給出的實例:

圖片

他說,在這個示例下,如果你在一個只有單核的服務器上跑,然后使用 TOP 命令,會看到持續 60 秒的 CPU 使用率為 100%。

為什么呢?

答案就藏在前面提到的 getTask 方法中:

java.util.concurrent.ThreadPoolExecutor#getTask

圖片

這個方法里面果然是有一個類似于無線循環的代碼,但是它為什么不停的執行呢?

現在趕緊想一想線程池的基本運行原理。當沒有任務處理的時候,核心線程在干啥?

是不是就阻塞在這個地方,等著任務過來進行處理的,這個能理解吧:

圖片

那我再問你一個問題,這行代碼的作用是干啥:

workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS)

是不是在指定時間內如果沒有從隊列里面拉取到任務,則拋出 InterruptedException。

那么它什么時候會被觸發呢?

圖片

在 timed 參數為 true 的時候。

timed 參數什么時候會為 true 呢?

圖片

當 allowCoreThreadTimeOut 為 true 或者當前工作的線程大于核心線程數的時候。

而 allowCoreThreadTimeOut 默認為 false:

圖片

那么也就是在這個案例下滿足了當前工作的線程大于核心線程數這個條件:

wc > corePoolSize

通過 Debug 知道,wc 是 1,corePoolSize 為 0:

圖片

所以 timed 變成了 true。

好,這里要注意了,朋友。

經過前面的分析,我們已經知道了在當前的案例下,會觸發 for(;;)這個邏輯:

workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS)

那么這個 keepAliveTime 到底是多少呢?

圖片

來,大聲的喊出這個數字:0,這是一個意想不到的、詭計多端的 0。

圖片

所以,這個地方每次都會拋出 InterruptedException(有誤,見評論區),再次開啟循環。

對于正常的線程池來說,觸發了這個邏輯,代表沒有任務要執行了,可以把對應線程進行回收了。

回收,對應的就是這部分代碼會返回一個 null:

圖片

然后在外面 runWorker 方法中的,由于 getTask 返回了 null,從而執行了 finally 代碼里面的邏輯,也就是從當前線程池移除線程的邏輯:

圖片

但是,朋友,我要說但是了。

在我們的案例下,你看 if 判斷的條件:

圖片

wc 參數前面我們知道了,值為 1。

那么 maximumPoolSize 是多少呢?

圖片

所以這個 if 條件不可能成立(描述有誤,見評論區),那么它又走到了 poll 這里:

workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS)

由于這里的 keepAliveTime 是 0,所以馬不停蹄的的開啟下一輪循環。

那么這個循環什么時候結束呢?

圖片

就是在從隊列里面獲取到任務的時候。

那么隊列里面什么時候才會有任務呢?

在我們的案例里面,是 60 秒之后。

所以,在這 60 秒內,這部分代碼相當于是一個“死循環”,導致 CPU 持續飆高到 100%。

這就是 BUG,這就是根本原因。

但是看到這里是不是覺得還差點意思?

我說 100% 就 100% 嗎?

得拿出石錘來才行啊。

所以,為了拿出實錘,眼見為實,我把核心流程拿出來,然后稍微改動一點點代碼:

public static void main(String[] args) {
ArrayBlockingQueue<Runnable> workQueue =
new ArrayBlockingQueue<>(100);
//綁定到 5 號 CPU 上執行
try (AffinityLock affinityLock = AffinityLock.acquireLock(5)) {
for (; ; ) {
try {
Runnable r = workQueue.poll(0, TimeUnit.NANOSECONDS);
if (r != null)
break;
} catch (InterruptedException retry) {
}
}
}
}

就是把線程綁定到指定 CPU 上去執行,減少 CPU 抖動帶來的損耗, 具體我就不介紹了,有興趣去看我之前的文章。

把這個程序跑起來之后,打開資源監視器,你可以看到 5 號 CPU 立馬就飚到 100% 了:

停止運行之后,立馬就下來了:

圖片


這就是眼見為實,這真是 JDK 的 BUG,我真沒騙你。

怎么修復

在 JDK 9 里面是怎么修復這個 BUG 的呢?

在前面提到的 BUG 的鏈接中,有這樣的一個鏈接,里面就是 JDK 9 版本里面針對上述的 BUG 進行的修復:

??http://hg.openjdk.java.net/jdk9/jdk9/jdk/rev/6dd59c01f011??

圖片

點開這個鏈接之后,你可以找到這個地方:

圖片

首先對比一下標號為 ① 和 ② 的地方,默認值從 0 納秒修改為了 DEFAULT_KEEPALIVE_MILLIS 毫秒。

而 DEFAULT_KEEPALIVE_MILLIS  的值為在標號為 ③ 的地方, 10L。

也就是默認從 0 納秒修改為了 10 毫秒。而這一處的改動,就是為了防止出現 coreSize 為 0 的情況。

我們重點關注一下 DEFAULT_KEEPALIVE_MILLIS 上面的那一坨注釋。

我給你翻譯一下,大概是這樣的:

這個值呢一般來說是用不上的,因為在 ScheduledThreadPoolExecutor 線程池里面的線程都是核心線程。

但是,如果用戶創建的線程池的時候,不聽勸,頭鐵,要把 corePoolSize 設置為 0 會發生什么呢?

因為 keepAlive 參數設置的為 0,那么就會導致線程在 getTask 方法里面非常頻繁的循環,從而導致 CPU 飆高。

那怎么辦呢?

很簡單,設置一個小而非零的值就可以,而這個小是相對于 JVM 的運行時間而言的。

所以這個 10 毫秒就是這樣來的。

再來一個

在研究前面提到的編號為 8065320 的 BUG 的時候,我還發現一個意外收獲,編號為 8051859 的 BUG,它們是挨著的,排排坐。

有點意思,也很簡單,所以分享一波:https://bugs.openjdk.org/browse/JDK-8051859

圖片

這個 BUG 又說的是啥事兒呢:

圖片

看截圖這個 BUG 也是在 JDK 9 版本之后修復的。

這個 BUG 的標題說的是 ScheduledExecutorService 線程池的 scheduleWithFixedDelay 方法,遇到大延遲時會執行失敗。

具體啥意思呢?

我們還是先拿著 Demo 說:

public class ScheduledTaskBug {
static public void main(String[] args) throws InterruptedException {
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
//第一個任務
executor.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
System.out.println("running scheduled task with delay: " + new Date());
}
}, 0, Long.MAX_VALUE, TimeUnit.MICROSECONDS);

//第二個任務
executor.submit(new Runnable() {
@Override
public void run() {
System.out.println("running immediate task: " + new Date());
}
});
Thread.sleep(5000);
executor.shutdownNow();
}
}

你把這個代碼粘過去之后,發現輸出是這樣的:

圖片

只有第一個任務執行了,第二個任務沒有輸出結果。

正常來說,第一個任務的延遲時間,也就是 initialDelay 參數是 0,所以第一次執行的時候是立即執行:

圖片

比如我改成這樣,把周期執行的時間單位,由微秒修改為納秒,就正常了:

圖片

神奇不神奇?你說這不是 BUG 這是啥?

提出 BUG 的這個哥們在描述里面介紹了 BUG 的原因,主要是提到了一個字段和兩個方法:

圖片

一個字段是指 period,兩個方法分別是 TimeUnit.toNanos(-delay) 和 ScheduledFutureTask.setNextRunTime()。

首先,在 ScheduledThreadPoolExecutor 里面 period 字段有三個取值范圍:

  • 正數,代表的是按照固定速率執行(scheduleAtFixedRate)。
  • 負數,代表的是按照固定延時執行(scheduleWithFixedDelay)。
  • 0,代表的是非重復性任務。

圖片

比如我們的示例代碼中調用的是 scheduleWithFixedDelay 方法,它里面就會在調用 TimeUnit.toNanos 方法的時候取反,讓 period 字段為負數:

圖片

好,此時我們開始 Debug 我們的 Demo,先來一個正常的。

比如我們來一個每 30ms 執行一次的周期任務,請仔細看:

圖片

在執行 TimeUnit.toNanos(-delay) 這一行代碼的時候,把 30 微秒轉化為了 -30000 納秒,也就是把 period 設置為 -30000。

然后來到 setNextRunTime 方法的時候,計算任務下一次觸發時間的時候,又把 period 轉為正數,沒有任何毛病:

圖片

但是,當我們把 30 修改為 Long.MAX_VALUE 的時候,有意思的事情就出現了:

圖片

delay=9223372036854775807
-delay=-9223372036854775807
unit.toNanos(-delay)=-9223372036854775808

直接給干溢出了,變成了 Long.MIN_VALUE:

圖片

當來到 setNextRunTime 方法的時候,你會發現由于我們的 p 已經是 Long.MIN_VALUE 了。

那么 -p 是多少呢?

給你跑一下:

圖片

Long.MIN_VALUE 的絕對值,還是 Long.MIN_VALUE。一個神奇的小知識點送給你,不客氣。

所以 -p 還是 Long.MIN_VALUE:

圖片

我們來算一下啊,一秒等于 10 億納秒:

圖片

那么下一次觸發時間就變成了這樣:

圖片

292 年之前。

這就是在 BUG 描述中提到的:

This results in triggerTime returning a time in the distant past.

圖片

the distant past,就是 long long ago,就是 292 年之前。就是 1731 年,雍正九年,那個時候的皇帝還是九子奪嫡中一頓亂殺,沖出重圍的胤禛大佬。

確實是很久很久以前了。

那么這個 BUG 怎么修復呢?

其實很簡單:

圖片

把 unit.toNanos(-delay) 修改為 -unit.toNanos(delay),搞定。

我給你盤一下:

圖片

這樣就不會溢出,時間就變成了 292 年之后。

那么問題就來了,誰特么會設置一個每 292 年執行一次的 Java 定時任務呢?

好,你看到這里了,本文就算結束了,我來問你一個問題:你知道了這兩個 BUG 之后,對你來說有什么收獲嗎?

沒有,是的,除了浪費了幾分鐘時間外,沒有任何收獲。

那么恭喜你,又在我這里學到了兩個沒有卵用的知識點。

匯總

這個小節為什么叫做匯總呢?

因為我發現這里出現的一串 BUG,除了本文提到的 2 個外,還有 3 個我都寫過了,所以在這里匯個總,充點字數,湊個篇幅:

圖片

8054446: Repeated offer and remove on ConcurrentLinkedQueue lead to an OutOfMemoryError

責任編輯:武曉燕 來源: why技術
相關推薦

2024-11-11 14:57:56

JWTSession微服務

2023-01-09 18:12:20

多線程故障組件

2020-08-06 11:25:29

數據庫鏈接池線程

2022-03-09 09:43:01

工具類線程項目

2022-05-16 08:42:26

Pandasbug

2022-12-30 08:29:07

Nacos動態化線程池

2020-10-27 13:24:35

線程池系統模型

2022-03-23 07:54:05

Java線程池系統

2021-07-14 15:06:50

SDK版本 jar

2021-09-13 08:41:52

職場互聯網自閉

2024-11-08 14:11:09

2024-02-04 09:19:00

Nacos動態化線程池

2022-05-27 07:03:04

JDK場景線程

2020-01-10 09:20:03

手機ISOJDK

2022-06-08 10:01:23

性能優化慢查詢

2025-03-05 10:34:56

2025-09-22 04:00:00

2025-02-13 07:00:00

Dubbo-goJava服務端

2009-09-14 17:08:02

WebFormView

2022-05-31 08:35:05

RocketMQACK客戶端
點贊
收藏

51CTO技術棧公眾號

中文字幕亚洲一区| 午夜精品久久久久久久久久久| 国产精品流白浆视频| 亚洲精品天堂网| 亚洲精品大全| 亚洲专区一二三| 日本福利一区二区三区| 国产精品玖玖玖| 亚洲第一毛片| 国产·精品毛片| 97在线观看免费高清| av网在线播放| 日韩在线观看中文字幕| 精品久久在线播放| 一区二区精品在线观看| 日韩 欧美 亚洲| 国产最新精品| 日韩一区二区高清| 超碰97人人射妻| 免费观看a视频| 久久最新视频| 久久99视频免费| 欧美福利第一页| 国产精品videossex| 欧美日韩精品一区视频| www.av毛片| 精品国产99久久久久久| 97久久精品人人爽人人爽蜜臀| 成人福利网站在线观看| 久久精品无码av| 一区在线观看| 久色乳综合思思在线视频| 偷拍夫妻性生活| 粉嫩av一区二区| 91精品国产欧美一区二区18| 国产精品乱码久久久久| 国产色播av在线| 亚洲免费在线视频一区 二区| 日韩精品久久一区二区三区| 色哟哟在线观看| 成人午夜视频福利| 亚洲自拍偷拍色片视频| 亚洲综合免费视频| 日精品一区二区三区| 91sao在线观看国产| 麻豆一区产品精品蜜桃的特点| 日韩免费特黄一二三区| 亚洲图片欧美午夜| 丰满圆润老女人hd| 欧美激情影院| 亚洲精品美女视频| 国产xxxxxxxxx| 狠狠一区二区三区| 日韩av在线免费| 中文字幕人妻一区二区三区| 国产劲爆久久| 精品日韩在线观看| 日韩av成人网| www.成人网| 亚洲国产精品一区二区三区 | 欧美午夜a级限制福利片| 久久久精品一区| 亚洲自拍偷拍色图| 日韩欧美一二三| 国产香蕉97碰碰久久人人| 性鲍视频在线观看| 96sao精品免费视频观看| 欧美人伦禁忌dvd放荡欲情| 艹b视频在线观看| 日韩欧美三区| 欧美日韩aaa| 国产大片一区二区三区| 午夜久久av| 精品国产伦理网| 亚洲精品乱码久久久久久久| 香蕉视频一区| 中文字幕亚洲图片| 成人在线观看免费完整| 一区二区影视| 午夜免费日韩视频| 免费无码国产精品| 青青草国产精品97视觉盛宴| 成人中文字幕+乱码+中文字幕| 99视频国产精品免费观看a| 国产91综合网| 欧美另类视频在线| 欧美黄色激情| 亚洲一区二区三区视频在线播放| 3d动漫一区二区三区| 第84页国产精品| 欧美剧在线免费观看网站| 国产成人精品一区二区三区在线观看 | 自拍偷拍亚洲区| 欧美成人手机视频| 国产一区二区三区成人欧美日韩在线观看| 欧美亚洲国产日韩2020| 中国a一片一级一片| 国产精品自拍三区| 黄色99视频| www.中文字幕久久久| 亚洲精品网站在线观看| 国产一级爱c视频| 99久久婷婷国产综合精品首页| 欧美一区二区大片| 国产熟妇搡bbbb搡bbbb| 水蜜桃精品av一区二区| 国外成人免费在线播放| 中文字幕观看在线| 成人精品国产福利| 视频一区免费观看| 丁香花高清在线观看完整版| 日本韩国一区二区三区视频| 四虎国产精品免费| 久久av影视| 久久99精品久久久久久噜噜| 午夜久久久久久久久久影院| 国产精品18久久久久久vr| 欧美高清视频一区| 污污网站在线观看| 欧美色涩在线第一页| 伦理片一区二区| 98精品视频| 庆余年2免费日韩剧观看大牛| 国产精品美女一区| 国产亚洲一本大道中文在线| 国产91在线亚洲| 国产一区二区色噜噜| 亚洲激情小视频| 麻豆一区产品精品蜜桃的特点 | 一区二区三区国产豹纹内裤在线| 天堂中文视频在线| 婷婷五月色综合香五月| 欧美激情在线观看| 99在线观看免费| 亚洲欧洲日韩一区二区三区| 国产噜噜噜噜噜久久久久久久久| 日韩一区二区三区不卡| 亚洲欧美另类久久久精品2019| 88av.com| 精品在线手机视频| 97精品国产97久久久久久春色 | 亚洲精品久久视频| 久久免费精彩视频| 国产一区二区日韩精品| 一区二区三区四区久久| 久久久精品一区二区毛片免费看| 亚洲欧美日韩精品久久亚洲区| 黄色一级片免费看| 成人午夜免费av| 无码人妻少妇伦在线电影| 日韩中文字幕一区二区高清99| 久久精品亚洲精品| 中文字幕一区二区人妻| 中文字幕欧美日韩一区| 九一精品在线观看| 欧美xxxx中国| 国产日韩欧美综合| 麻豆视频在线| 欧美一区二区成人6969| 超碰手机在线观看| 国产精品一二三四| 国产a级黄色大片| 91精品啪在线观看国产爱臀| 欧美激情精品久久久久久黑人| 99热这里只有精品在线| 亚洲制服丝袜在线| 中文字幕在线永久| 久久五月激情| 一个色的综合| 亚洲精品不卡在线观看| 欧美激情视频一区| 四虎精品在永久在线观看| 欧美日韩一区二区三区 | 国产福利电影在线播放| 亚洲精品二三区| 69亚洲精品久久久蜜桃小说| 国产精品天干天干在线综合| 天天干天天色天天干| 欧美精品色网| 久久影院理伦片| 久久麻豆视频| 欧美激情亚洲另类| 你懂的在线看| 欧美精品v国产精品v日韩精品| 日韩欧美国产成人精品免费| 高清在线不卡av| 波多野结衣50连登视频| 成人一二三区| 国产精品乱码视频| 日韩精品第一| 久久久久九九九九| 国产福利小视频在线| 欧美一区二区三区免费大片| 国产成人自拍视频在线| 国产精品麻豆欧美日韩ww| 台湾佬美性中文| 老司机亚洲精品| 激情图片qvod| 欧美裸体在线版观看完整版| 电影午夜精品一区二区三区| 台湾佬成人网| 久久久人成影片一区二区三区| 国产三级电影在线观看| 欧美xxx久久| 亚洲天堂2021av| 无码av中文一区二区三区桃花岛| 污污视频网站在线免费观看| 成人福利视频在线| 亚洲精品mv在线观看| 久久看片网站| 国产 日韩 欧美在线| 欧美激情理论| 欧美中日韩免费视频| 国产精品一区二区中文字幕| 国产在线观看精品| 伊伊综合在线| 欧美激情久久久久| 蜜桃视频网站在线| 国产午夜精品美女视频明星a级| 性猛交xxxx乱大交孕妇印度| 欧美日韩黄色影视| 亚洲熟女综合色一区二区三区| 一区二区在线看| 五月婷婷综合激情网| 久久免费国产精品| 一本加勒比波多野结衣| 国产精品一区三区| 成人性生交免费看| 日韩激情在线观看| 激情综合网婷婷| 国产日韩一区二区三区在线播放| 99国产精品白浆在线观看免费| 久久网站免费观看| 亚洲精品9999| 成人免费电影网址| 日韩av电影免费在线| 亚洲第一福利专区| 欧美1o一11sex性hdhd| 精品久久ai电影| 国产精品一区二区免费看| 日韩欧洲国产| 高清免费日韩| www.久久东京| 国产伦精品一区二区三区免| 91久久偷偷做嫩草影院电| 91中文字幕在线| 成人国产精品久久| 3d动漫精品啪啪一区二区三区免费 | 精品久久久久久久久久国产| 国语对白一区二区| 亚洲成人一二三| 人人干人人干人人干| 五月婷婷激情综合网| 国产精品久久久久久久妇| 天天做天天摸天天爽国产一区| 日本少妇吞精囗交| 精品日韩中文字幕| 亚洲欧美另类在线视频| 91久久奴性调教| 国产成人精品一区二区色戒| 精品污污网站免费看| 一级片视频网站| 777欧美精品| 久久久久亚洲av片无码下载蜜桃| 亚洲黄色av一区| 国产一二三四在线| 婷婷成人激情在线网| www.com亚洲| 欧美精品高清视频| 亚洲国产中文字幕在线| 日韩电影网在线| 国产中文字幕在线观看| zzjj国产精品一区二区| 欧美xxx黑人xxx水蜜桃| 欧美亚洲国产成人精品| 久久青草视频| 99国精产品一二二线| 香蕉人人精品| 曰韩不卡视频| 亚洲精选成人| 自拍偷拍21p| 懂色一区二区三区免费观看| 少妇真人直播免费视频| 国产精品传媒入口麻豆| 久艹视频在线观看| 色综合中文字幕国产| 91 中文字幕| 亚洲精品www| av在线免费观看网站| 九色精品美女在线| 大胆人体一区| 成人资源av| 人人狠狠综合久久亚洲婷| 最近免费观看高清韩国日本大全| 99伊人成综合| 天天综合天天添夜夜添狠狠添| 成人精品国产免费网站| 国内毛片毛片毛片毛片毛片| 亚洲国产欧美一区二区三区丁香婷| www.久久精品视频| 日韩一区二区三区三四区视频在线观看 | 色综合桃花网| 91精品在线国产| 国产99久久久国产精品成人免费 | а√天堂官网中文在线| 欧美一级片在线播放| 欧美国产亚洲精品| 日本在线观看一区二区三区| 激情91久久| av免费一区二区| 久久久久亚洲综合| 国产在线拍揄自揄拍无码视频| 欧美网站大全在线观看| 香蕉视频成人在线| 蜜臀久久99精品久久久久久宅男| 婷婷六月国产精品久久不卡| 国产伦精品一区二区三区| 亚洲自拍偷拍网| 四季av一区二区| 久久综合久久久久88| 久久久久久久久久一区二区三区 | 自拍偷拍21p| 久久久久国色av免费看影院| 精品一级少妇久久久久久久| 8x8x8国产精品| www.中文字幕久久久| 日本韩国欧美精品大片卡二| 精品三级av在线导航| 男同互操gay射视频在线看| 奇米精品一区二区三区在线观看一| 国产中文字幕一区二区| www国产精品av| 精品无码久久久久久久| 日韩午夜在线观看视频| 日韩子在线观看| 国产精品视频区| 成人av国产| 天堂在线资源视频| 国产日韩欧美一区二区三区综合| 男人日女人网站| 日韩精品中文字| 国产精品13p| 久久99久久99精品蜜柚传媒| 一本色道久久综合亚洲精品不卡| 污污免费在线观看| 亚洲国产一区二区a毛片| 亚洲精品国产片| 欧美高清在线观看| 国产精品调教| 黄www在线观看| 久久久五月婷婷| 男操女视频网站| 一区二区三区视频在线| 成人h在线观看| 亚洲一区二区三区加勒比 | 欧美日本网站| 情事1991在线| 精品无人区麻豆乱码久久久| 天堂av在线网站| 亚洲欧洲av色图| av网站在线免费看| 欧美极品少妇与黑人| 久久99精品久久久久久欧洲站| 久久国产精品视频在线观看| 久久欧美中文字幕| 中文字幕av影视| 超碰91人人草人人干| 成人h动漫精品一区二区器材| 日本午夜激情视频| 国产三级欧美三级| 亚洲综合免费视频| 久久久久国产视频| 国产亚洲电影| 国产精品999.| 欧美日韩国产精品一区二区三区四区 | www.中文字幕在线观看| 在线观看成人黄色| 精品国模一区二区三区欧美 | 精品国产精品网麻豆系列| 日韩在线伦理| 亚洲一区二区在线观| 国产成人免费视频网站高清观看视频| 日本在线小视频| 色偷偷噜噜噜亚洲男人| 91午夜精品| 一级特黄性色生活片| 亚洲乱码国产乱码精品精可以看 | 久久久久久9999| 国产精品视频在线观看免费| 午夜精品在线视频| 久久国产小视频| 美女黄色一级视频| 欧美三级在线视频| 99热99re6国产在线播放| 色姑娘综合网| 成人高清免费观看| 91在线你懂的| 青青久久aⅴ北条麻妃| 欧美在线观看天堂一区二区三区| 国精品无码人妻一区二区三区|