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

幾個Go系統可能遇到的鎖問題

開發 前端
之前統一特征系統在 QA 同學的幫助下進行了一些壓測,發現了一些問題,這些問題是較為通用的問題,發出來給其他同學參考一下,避免踩同樣的坑。

之前統一特征系統在 QA 同學的幫助下進行了一些壓測,發現了一些問題,這些問題是較為通用的問題,發出來給其他同學參考一下,避免踩同樣的坑。

[[254911]]

底層依賴 sync.Pool 的場景

有一些開源庫,為了優化性能,使用了官方提供的 sync.Pool,比如我們使用的 https://github.com/valyala/fasttemplate 這個庫,每當你執行下面這樣的代碼的時候:

 

  1. template := "http://{{host}}/?q={{query}}&foo={{bar}}{{bar}}" 
  2.     t := fasttemplate.New(template, "{{""}}"
  3.     s := t.ExecuteString(map[string]interface{}{ 
  4.         "host":  "google.com"
  5.         "query": url.QueryEscape("hello=world"), 
  6.         "bar":   "foobar"
  7.     }) 
  8.     fmt.Printf("%s", s) 

內部都會生成一個 fasttemplate.Template 對象,并帶有一個 byteBufferPool 字段:

 

  1. type Template struct { 
  2.     template string 
  3.     startTag string 
  4.     endTag   string 
  5.  
  6.     texts          [][]byte 
  7.     tags           []string 
  8.     byteBufferPool bytebufferpool.Pool   ==== 就是這個字段 

byteBufferPool 底層就是經過封裝的 sync.Pool:

 

  1. type Pool struct { 
  2.     calls       [steps]uint64 
  3.     calibrating uint64 
  4.  
  5.     defaultSize uint64 
  6.     maxSize     uint64 
  7.  
  8.     pool sync.Pool 

這種設計會帶來一個問題,如果使用方每次請求都 New 一個 Template 對象。并進行求值,比如我們最初的用法,在每次拿到了用戶的請求之后,都會用參數填入到模板:

 

  1. func fromTplToStr(tpl string, params map[string]interface{}) string { 
  2.   tplVar := fasttemplate.New(tpl, `{{`, `}}`) 
  3.   res := tplVar.ExecuteString(params) 
  4.   return res 

在模板求值的時候:

 

  1. func (t *Template) ExecuteFuncString(f TagFunc) string { 
  2.     bb := t.byteBufferPool.Get() 
  3.     if _, err := t.ExecuteFunc(bb, f); err != nil { 
  4.         panic(fmt.Sprintf("unexpected error: %s", err)) 
  5.     } 
  6.     s := string(bb.Bytes()) 
  7.     bb.Reset() 
  8.     t.byteBufferPool.Put(bb) 
  9.     return s 

會對該 Template 對象的 byteBufferPool 進行 Get,在使用完之后,把 ByteBuffer Reset 再放回到對象池中。但問題在于,我們的 Template 對象本身并沒有進行復用,所以這里的 byteBufferPool 本身的作用其實并沒有發揮出來。

相反的,因為每一個請求都需要新生成一個 sync.Pool,在高并發場景下,執行時會卡在 bb := t.byteBufferPool.Get() 這一句上,通過壓測可以比較快地發現問題,達到一定 QPS 壓力時,會有大量的 Goroutine 堆積,比如下面有 18910 個 G 堆積在搶鎖代碼上:

 

  1. goroutine profile: total 18910 
  2. 18903 @ 0x102f20b 0x102f2b3 0x103fa4c 0x103f77d 0x10714df 0x1071d8f 0x1071d26 0x1071a5f 0x12feeb8 0x13005f0 0x13007c3 0x130107b 0x105c931 
  3. #   0x103f77c   sync.runtime_SemacquireMutex+0x3c                               /usr/local/go/src/runtime/sema.go:71 
  4. #   0x10714de   sync.(*Mutex).Lock+0xfe                                     /usr/local/go/src/sync/mutex.go:134 
  5. #   0x1071d8e   sync.(*Pool).pinSlow+0x3e                                   /usr/local/go/src/sync/pool.go:198 
  6. #   0x1071d25   sync.(*Pool).pin+0x55                                       /usr/local/go/src/sync/pool.go:191 
  7. #   0x1071a5e   sync.(*Pool).Get+0x2e                                       /usr/local/go/src/sync/pool.go:128 
  8. #   0x12feeb7   github.com/valyala/fasttemplate/vendor/github.com/valyala/bytebufferpool.(*Pool).Get+0x37   /Users/xargin/go/src/github.com/valyala/fasttemplate/vendor/github.com/valyala/bytebufferpool/pool.go:49 
  9. #   0x13005ef   github.com/valyala/fasttemplate.(*Template).ExecuteFuncString+0x3f              /Users/xargin/go/src/github.com/valyala/fasttemplate/template.go:278 
  10. #   0x13007c2   github.com/valyala/fasttemplate.(*Template).ExecuteString+0x52                  /Users/xargin/go/src/github.com/valyala/fasttemplate/template.go:299 
  11. #   0x130107a   main.loop.func1+0x3a                                        /Users/xargin/test/go/http/httptest.go:22 

有大量的 Goroutine 會阻塞在獲取鎖上,為什么呢?繼續看看 sync.Pool 的 Get 流程:

 

  1. func (p *Pool) Get() interface{} { 
  2.     if race.Enabled { 
  3.         race.Disable() 
  4.     } 
  5.     l := p.pin() 
  6.     x := l.private 
  7.     l.private = nil 
  8.     runtime_procUnpin() 

然后是 pin:

 

  1. func (p *Pool) pin() *poolLocal { 
  2.     pid := runtime_procPin() 
  3.      
  4.     s := atomic.LoadUintptr(&p.localSize) // load-acquire 
  5.     l := p.local                          // load-consume 
  6.     if uintptr(pid) < s { 
  7.         return indexLocal(l, pid) 
  8.     } 
  9.     return p.pinSlow() 

因為每一個對象的 sync.Pool 都是空的,所以 pin 的流程一定會走到 p.pinSlow:

 

  1. func (p *Pool) pinSlow() *poolLocal { 
  2.     runtime_procUnpin() 
  3.     allPoolsMu.Lock() 
  4.     defer allPoolsMu.Unlock() 
  5.     pid := runtime_procPin() 

而 pinSlow 中會用 allPoolsMu 來加鎖,這個 allPoolsMu 主要是為了保護 allPools 變量:

 

  1. var ( 
  2.     allPoolsMu Mutex 
  3.     allPools   []*Pool 

在加了鎖的情況下,會把用戶新生成的 sync.Pool 對象 append 到 allPools 中:

 

  1. if p.local == nil { 
  2.         allPools = append(allPools, p) 
  3.     } 

標準庫的 sync.Pool 之所以要維護這么一個 allPools 意圖也比較容易推測,主要是為了 GC 的時候對 pool 進行清理,這也就是為什么說使用 sync.Pool 做對象池時,其中的對象活不過一個 GC 周期的原因。sync.Pool 本身也是為了解決大量生成臨時對象對 GC 造成的壓力問題。

說完了流程,問題也就比較明顯了,每一個用戶請求最終都需要去搶一把全局鎖,高并發場景下全局鎖是大忌。但是這個全局鎖是因為開源庫間接帶來的全局鎖問題,通過看自己的代碼并不是那么容易發現。

知道了問題,改進方案其實也還好實現,***是可以修改開源庫,將 template 的 sync.Pool 作為全局對象來引用,這樣大部分 pool.Get 不會走到 pinSlow 流程。第二是對 fasttemplate.Template 對象進行復用,道理也是一樣的,就不會有那么多的 sync.Pool 對象生成了。但前面也提到了,這個是個間接問題,如果開發工作繁忙,不太可能所有的依賴庫把代碼全看完之后再使用,這種情況下怎么避免線上的故障呢?

壓測盡量早做唄。

metrics 上報和 log 鎖

這兩個本質都是一樣的問題,就放在一起了。

公司之前 metrics 上報 client 都是基于 udp 的,大多數做的簡單粗暴,就是一個 client,用戶傳什么就寫什么,最終一定會走到:

 

  1. func (c *UDPConn) WriteToUDP(b []byte, addr *UDPAddr) (int, error) { 
  2.     ---------- 刨去無用細節 
  3.     n, err := c.writeTo(b, addr) 
  4.     ---------- 刨去無用細節 
  5.     return n, err 

或者是:

 

  1. func (c *UDPConn) WriteTo(b []byte, addr Addr) (int, error) { 
  2.  
  3.     ---------- 刨去無用細節 
  4.     n, err := c.writeTo(b, a) 
  5.     ---------- 刨去無用細節 
  6.     return n, err 

調用的是:

 

  1. func (c *UDPConn) writeTo(b []byte, addr *UDPAddr) (int, error) { 
  2.     ---------- 刨去無用細節 
  3.     return c.fd.writeTo(b, sa) 

然后:

 

  1. func (fd *netFD) writeTo(p []byte, sa syscall.Sockaddr) (n int, err error) { 
  2.     n, err = fd.pfd.WriteTo(p, sa) 
  3.     runtime.KeepAlive(fd) 
  4.     return n, wrapSyscallError("sendto", err) 

然后是:

 

  1. func (fd *FD) WriteTo(p []byte, sa syscall.Sockaddr) (int, error) { 
  2.     if err := fd.writeLock(); err != nil {  =========> 重點在這里 
  3.         return 0, err 
  4.     } 
  5.     defer fd.writeUnlock() 
  6.  
  7.     for { 
  8.         err := syscall.Sendto(fd.Sysfd, p, 0, sa) 
  9.         if err == syscall.EAGAIN && fd.pd.pollable() { 
  10.             if err = fd.pd.waitWrite(fd.isFile); err == nil { 
  11.                 continue 
  12.             } 
  13.         } 
  14.         if err != nil { 
  15.             return 0, err 
  16.         } 
  17.         return len(p), nil 
  18.     } 

本質上,就是在高成本的網絡操作上套了一把大的寫鎖,同樣在高并發場景下會導致大量的鎖沖突,進而導致大量的 Goroutine 堆積和接口延遲。

同樣的,知道了問題,解決辦法也很簡單。再看看日志相關的。因為公司目前大部分日志都是直接向文件系統寫,本質上同一個時刻操作的是同一個文件,最終都會走到:

 

  1. func (f *File) Write(b []byte) (n int, err error) { 
  2.     n, e := f.write(b) 
  3.     return n, err 
  4.  
  5. func (f *File) write(b []byte) (n int, err error) { 
  6.     n, err = f.pfd.Write(b) 
  7.     runtime.KeepAlive(f) 
  8.     return n, err 

然后:

 

  1. func (fd *FD) Write(p []byte) (int, error) { 
  2.     if err := fd.writeLock(); err != nil { =========> 又是 writeLock 
  3.         return 0, err 
  4.     } 
  5.     defer fd.writeUnlock() 
  6.     if err := fd.pd.prepareWrite(fd.isFile); err != nil { 
  7.         return 0, err 
  8.     } 
  9.     var nn int 
  10.     for { 
  11.         ----- 略去不相關內容 
  12.         n, err := syscall.Write(fd.Sysfd, p[nn:max]) 
  13.         ----- 略去無用內容 
  14.     } 

和 UDP 網絡 FD 一樣有 writeLock,在系統打日志打得很多的情況下,這個 writeLock 會導致和 metrics 上報一樣的問題。

總結

上面說的幾個問題實際上本質都是并發場景下的 lock contention 問題,全局寫鎖是高并發場景下的性能殺手,一旦大量的 Goroutine 阻塞在寫鎖上,會導致系統的延遲飚升,直至接口超時。在開發系統時,涉及到 sync.Pool、單個 FD 的信息上報、以及寫日志的場景時,應該多加注意。早做壓測保平安。

責任編輯:未麗燕 來源: No Headback
相關推薦

2021-10-12 00:04:24

腳本備份MariDB

2017-09-27 15:20:23

PHPerLaravelMysql

2009-06-30 16:08:19

性能問題代碼寫法

2016-03-23 11:03:40

2010-04-22 14:26:00

Oracle創建同義詞

2021-03-24 08:41:38

Redis 分布式鎖序列化

2021-08-31 07:57:21

輪詢鎖多線編程Java

2013-05-13 10:03:04

git

2024-01-09 15:37:46

2019-10-30 16:03:48

JavaJava虛擬機數據庫

2015-07-30 10:31:21

微軟Windows 10升級

2013-04-24 11:33:31

Android開發Android有用習慣

2022-05-24 16:09:38

前端腳本

2014-11-14 15:34:11

2018-08-14 14:28:34

VMware虛擬機備份

2017-03-30 14:42:08

服務器系統linux

2022-08-12 18:40:00

分布式

2021-09-02 07:04:44

Go 開發利器

2023-08-17 14:42:54

Redis分布式鎖

2022-07-18 08:08:16

Go?語言技巧
點贊
收藏

51CTO技術棧公眾號

日韩中文字幕免费在线| 黄色网页在线看| 成人影音在线| 久久青草久久| 亚洲欧美视频一区| 国产成人综合精品| 成人免费视频91| 91丨porny丨在线中文 | 亚洲欧美精品在线观看| 国产精品a成v人在线播放| 日韩一区中文| 中日韩av电影| 国产91色在线播放| 在线xxxxx| 日本不卡影院| 国产成人av福利| 久久久久99精品久久久久| 熟妇人妻va精品中文字幕| 搡老岳熟女国产熟妇| 红桃视频国产精品| 欧美岛国在线观看| 日韩精品一区二区在线视频 | 久久电影网站| 国产精品久久久久久亚洲毛片| 国产极品精品在线观看| 欧美日韩精品亚洲精品| 网站一区二区| 一区二区三区精品视频| 97视频中文字幕| 欧美黑人猛猛猛| 色无极亚洲影院| 3751色影院一区二区三区| 日本一区二区免费高清视频| 99久久一区二区| 欧美日韩在线大尺度| 精品日韩成人av| 日本福利视频在线| 免费理论片在线观看播放老| 日韩在线一二三区| 日韩亚洲综合在线| 五月六月丁香婷婷| av资源在线看片| 久久夜色精品国产噜噜av| 日本精品中文字幕| 中文字幕一区二区三区手机版| 风间由美性色一区二区三区四区 | 久久亚洲综合国产精品99麻豆精品福利| 一级片视频免费观看| 秋霞午夜理伦电影在线观看| 久久99精品久久只有精品| 欧美成人精品在线观看| 亚洲激情 欧美| 日韩精品专区| 亚洲人成7777| av动漫免费观看| 免费黄色网址在线观看| 中文字幕五月欧美| 国产一区喷水| 中日韩av在线| 狠狠入ady亚洲精品经典电影| 久久久国产一区| 亚洲欧美小视频| 猛男gaygay欧美视频| 欧美军同video69gay| 国产精品一线二线三线| av一区在线观看| 国产不卡在线一区| yy111111少妇影院日韩夜片| 欧美日韩综合一区二区三区| 亚洲乱码免费伦视频| 国产丝袜一区二区三区免费视频| 日韩在线一区视频| 亚洲精品**中文毛片| 日韩美女视频19| 裸体裸乳免费看| 日韩精品不卡| 少妇光屁股影院| 四虎在线精品| 日韩一区二区不卡| 91视频免费版污| 国产后进白嫩翘臀在线观看视频| 亚洲在线观看免费| ww国产内射精品后入国产| 97se综合| 亚洲一区二区在线免费看| 日本黑人久久| 天天干视频在线| 国产亚洲成年网址在线观看| 5566av亚洲| 人妻91麻豆一区二区三区| 久久成人精品无人区| 91网站在线免费观看| 95视频在线观看| 精品国产欧美| 欧美日韩国产精品成人| 国模杨依粉嫩蝴蝶150p| 亚洲欧洲二区| 欧美日韩三级一区| 乱子伦视频在线看| 综合久久av| 亚洲精品美女久久久| 中文字幕99页| 少妇精品久久久一区二区| 久久视频这里只有精品| 日韩成人高清视频| 激情综合色丁香一区二区| 国产精品亚洲一区二区三区| 精品国产一区二区三区四| 老司机精品视频一区二区三区| 国产精品96久久久久久| av网站在线免费看| 国产色婷婷亚洲99精品小说| 国产在线视频综合| 国产精品传媒麻豆hd| 欧美专区日韩专区| 九九九在线观看视频| 一区二区三区亚洲变态调教大结局 | 日日夜夜精品视频免费| 91免费国产视频| 黄色在线免费观看大全| 91麻豆福利精品推荐| 久久综合给合久久狠狠色| 神马午夜电影一区二区三区在线观看| 国产欧美日韩激情| 欧美精品123| 中文字幕av片| 懂色av中文字幕一区二区三区 | 外国精品视频在线观看 | 亚洲精品免费一区二区三区| 亚洲一区二区三区高清视频| 久久精品99国产精品日本| 精品日韩电影| 日韩国产福利| 国产三级精品三级在线专区| 男人添女荫道口女人有什么感觉| 亚洲伦理网站| 日韩中文字幕av| www.超碰在线观看| 奇米精品一区二区三区在线观看| 国产精品色婷婷视频| 国产三级精品在线观看| 懂色av一区二区三区蜜臀| 激情小说综合网| 色婷婷在线播放| 精品久久中文字幕久久av| 欧美亚洲国产成人| 精品久久福利| 精品国产91乱码一区二区三区 | 日本伊人精品一区二区三区介绍| 无码国产色欲xxxx视频| 久久综合久久鬼色| 亚洲中文字幕无码专区| 日韩aaa久久蜜桃av| 中文字幕日韩欧美在线视频| 欧产日产国产v| 国产精品系列在线播放| 欧美精品七区| 中文在线аv在线| 亚洲美女黄色片| av激情在线观看| 国产福利91精品| 日韩理论片在线观看| 亚洲va中文在线播放免费| 亚洲香蕉成视频在线观看| 极品盗摄国产盗摄合集| 韩国成人精品a∨在线观看| 黄色网络在线观看| 哺乳挤奶一区二区三区免费看| 亚洲色图25p| 麻豆亚洲av熟女国产一区二| 日韩电影在线观看一区| 日韩中文字幕一区二区| 欧美视频第一| 欧美日韩国产成人高清视频| 欧美 亚洲 视频| 69久久精品无码一区二区| 日韩免费一级| 国内精品在线一区| 国产精品伦一区二区三区| 久久久激情视频| 男人添女荫道口图片| 麻豆一区二区| 欧美成年人在线观看| 亚洲男人第一天堂| 欧美高清在线精品一区| 日韩av在线中文| 欧美日韩一区二区三区四区在线观看 | 久久视频免费在线| 嫩草伊人久久精品少妇av杨幂| 亚洲第一黄色网| 女~淫辱の触手3d动漫| 免费观看在线色综合| 久久综合九色综合久99| 91综合国产| 欧美国产亚洲精品久久久8v| 在线观看日韩一区二区| 一区二区三区在线视频观看58| 三上悠亚在线一区| 三级电影一区| 国产欧美一区二区三区不卡高清| 吞精囗交69激情欧美| 久久在线免费观看视频| 免费在线黄色影片| 日韩三区在线观看| 久久久久精彩视频| 中文字幕乱码日本亚洲一区二区| 青青草原播放器| 中文字幕一区二区三区久久网站| 久久久一本精品99久久精品66| 国产v日韩v欧美v| 亚洲国产精品女人久久久| 久久久精品一区二区涩爱| 国产精品一品二品| 老司机午夜av| 亚洲视频www| 欧美极品视频一区二区三区| 国产精品一级在线观看| 欧美精品一区三区| 国产一级片在线播放| 欧美精品一区二区蜜臀亚洲| 国产乱码久久久久| 欧美色综合影院| 日本网站在线播放| 成人不卡免费av| 国产又黄又大又粗视频| 亚洲二区三区不卡| 97超级碰碰| 日本一区二区中文字幕| 国产经典一区二区| 中文字幕 在线观看| 久久久久久久久国产| 五月婷婷六月色| 日韩一区二区三区精品视频| 中文字幕观看在线| 日本高清不卡aⅴ免费网站| 欧日韩不卡视频| 国产激情视频一区二区三区欧美 | 亚洲色婷婷久久精品av蜜桃| 天天综合网网欲色| 高清国产在线一区| 夜鲁夜鲁夜鲁视频在线播放| 欧美国产日产韩国视频| 四虎av在线| 欧美成人午夜免费视在线看片| 欧美jizzhd欧美| 社区色欧美激情 | 1769在线观看| 久久九九免费视频| 99自拍视频在线观看| 日韩精品欧美国产精品忘忧草 | 国产精品21p| 国产精品毛片高清在线完整版| 中文字幕成人动漫| 国产一区二区0| 黄色a级片免费| 国产精品久久久久久久久久10秀| 亚洲一区二区在线观| 精品欧美午夜寂寞影院| 国产一级二级三级精品| 久久中文字幕导航| 欧美精品一区二区三区四区五区| 国产欧美亚洲精品a| 99久久自偷自偷国产精品不卡| 国产一区二区三区| 国产成人精品免费视频大全最热 | 欧美日韩亚洲在线 | 最近中文字幕日韩精品| 麻豆网站在线| 欧美黑人巨大精品一区二区| av手机免费在线观看| 2021国产精品视频| 二区在线播放| 一本一道久久a久久精品逆3p| 丰满少妇被猛烈进入| 亚洲精品电影久久久| 黄视频在线观看免费| www.日韩欧美| caoprom在线| 国产精品久久一区| 国产在线不卡一区二区三区| 国产精品一区视频| 久久伊人影院| 久久精品国产美女| 欧美影院三区| 欧美一区二区视频17c| 国产欧美日韩免费观看| 国产高清不卡无码视频| 亚洲中字在线| 欧美亚洲另类色图| 琪琪一区二区三区| 亚洲一区二区在线免费| 中文字幕不卡在线观看| 国产91av视频| 欧美福利一区二区| 欧美一区二区少妇| 欧美成人小视频| 激情亚洲影院在线观看| 欧美最顶级的aⅴ艳星| a级片免费在线观看| 国产精品狼人色视频一区| 综合成人在线| 婷婷精品国产一区二区三区日韩| 竹菊久久久久久久| 欧美xxxx黑人又粗又长密月| 最新国产精品| 国产视频在线观看网站| 天堂成人免费av电影一区| 中文字幕乱码在线人视频| 久久精品夜夜夜夜久久| 久久午夜鲁丝片午夜精品| 欧美午夜精品一区二区蜜桃 | 69堂成人精品免费视频| 美州a亚洲一视本频v色道| 欧美夫妻性生活视频| 日本久久久久| 日韩欧美一区二区三区四区五区| 亚洲大片在线| 欧美日本视频在线观看| 国内精品久久久久影院色| 免费观看av网站| 亚洲成人激情自拍| 日本三级一区二区| 一本色道亚洲精品aⅴ| 国产精品成人久久久| 亚洲二区中文字幕| dj大片免费在线观看| 国产精品欧美日韩久久| 国产欧美一区二区精品久久久| 一女被多男玩喷潮视频| 成人黄色a**站在线观看| 国产极品国产极品| 5566中文字幕一区二区电影| 人人干在线视频| 国产精品视频999| 精品不卡一区| 糖心vlog在线免费观看| 奇米精品一区二区三区在线观看| 欧洲女同同性吃奶| 国产精品视频看| 国产精品无码一区| 亚洲欧美国产精品久久久久久久| 国产美女高潮在线| 激情久久av| 麻豆精品网站| 欧美精品色视频| 中文字幕日韩av资源站| 亚洲天堂一二三| 日韩中文理论片| 成人污版视频| 视色,视色影院,视色影库,视色网| 国产一区二区三区国产| 五月天丁香激情| 精品久久人人做人人爰| xxxx另类黑人| 欧美高清性xxxxhd| 美女视频黄频大全不卡视频在线播放| 亚洲午夜久久久久久久国产| 亚洲久草在线视频| 亚洲国产成人无码av在线| 亚洲国产精品高清久久久| а√天堂中文资源在线bt| 久久精品国产一区二区三区日韩| 亚洲中字黄色| 亚洲综合图片一区| 懂色aⅴ精品一区二区三区蜜月| 一级aaaa毛片| 久久躁狠狠躁夜夜爽| 999久久久精品一区二区| 99在线免费视频观看| 91美女福利视频| 中文区中文字幕免费看| 久热精品视频在线观看一区| 91亚洲无吗| 免费av网址在线| 中文字幕一区av| 日本黄色一级视频| 亚洲精品一区二区三区蜜桃下载 | 麻豆传媒在线免费| 成人9ⅰ免费影视网站| 亚洲综合电影一区二区三区| 国产成人免费观看网站| 五月天精品一区二区三区| 免费资源在线观看| 91午夜在线播放| 一区二区三区精品视频在线观看| 日本r级电影在线观看| 亚洲成人一区在线| a√在线中文网新版址在线| 91久久精品一区二区别| 久久精品123| 91国产在线精品| 免费观看的毛片| 国产999在线| 欧美国产91| 韩国三级hd中文字幕| 日韩欧美国产综合一区| 国产综合色在线观看| 欧美精品自拍视频| 中文字幕中文乱码欧美一区二区| 色欲av永久无码精品无码蜜桃|