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

一起 goroutine 泄漏問題的排查

開發 前端
在 golang 中創建 goroutine 是一件很容易的事情,但是不合理的使用可能會導致大量 goroutine 無法結束,資源也無法被釋放,隨著時間推移造成了內存的泄漏。

 在 golang 中創建 goroutine 是一件很容易的事情,但是不合理的使用可能會導致大量 goroutine 無法結束,資源也無法被釋放,隨著時間推移造成了內存的泄漏。避免 goroutine 泄漏的關鍵是要合理管理 goroutine 的生命周期,通過導出 runtime 指標和利用 pprof 可以發現和解決 goroutine 泄漏問題。

[[311742]]

筆者維護了一個通過 SSH 連接到目標機器并執行命令的服務,這是一個內部小服務,平時沒有問題的時候一般也不會關注。大約 4 個月前,最后一次更新的時候,增加了一個任務計數器并且導出到 prometheus 中監控起來。近期發現這個計數器在穩步增加。

 

第一反應是,好事!調用量穩步增長了!!但是一想不對啊,這內部小服務哪兒來這么多調用量。于是再看看 goroutine 的監控情況(這個數據從 runtime.NumGoroutine()獲取的)

 

goroutine 的數量也是穩步增加的,單位時間請求量增加,goroutine 數量也增進,沒毛病。但是又再轉念一想,內部小服務,不可能不可能。

于是再看一下所有請求在 mm 系統的視圖:

 

可以看出,每 5 分鐘請求量在 2000 左右,平均下來每分鐘 400 的請求量,上面 prometheus 監控圖中,每個曲線是一個實例,實際上部署了 4 個實例,因此 400 還要除以 4 得到單個實例(曲線)的請求量應該在 100/min 左右,在服務剛啟動的時候該計數器也確實在 100/min 左右,隨著時間推移慢慢泄漏了。

Goroutine 泄漏 (Goroutine leak)

雖然心里想著 99%是泄漏了,但是也要看點詳細的信息。之前在服務里已經啟用了 net/http/pprof,因此直接請求 pprof 暴露出來的 HTTP 接口。

# goroutines摘要curl http://service:port/debug/pprof/goroutine?debug=1# goroutines詳情curl http://service:port/debug/pprof/goroutine?debug=2

先看一下導出的 goroutine 摘要:

 

有 1000+個 goroutine 處于同一個狀態,簡單看是等待讀數據,再看下導出的 goroutine 詳情:

 

不看不知道,一看嚇一跳,詳情里有 goroutine 阻塞的時間超過了 20w 分鐘(4 個月)……

可以肯定是 goroutine 泄漏無疑了。為什么會泄漏?只有順著 pprof 導出的 goroutine 信息去排查了。處于 IO wait 狀態最多的這 1000 多 goroutine 的調用棧都打出來了,根據這段調用棧內容來看,找到對應代碼的位置,從 ssh.Dial 開始一直到某個地方進行 io.ReadFull 便阻塞住了。

這個服務進行 ssh 連接使用的是 golang.org/x/crypto/ssh 這個包。先看一下在這個服務里調用 ssh.Dial 的地方:

  1. clientConfig := &ssh.ClientConfig{ 
  2.     ... 
  3.     Timeout: 3 * time.Second
  4.     ... 
  5. // connet to ssh 
  6. client, err := ssh.Dial("tcp", fmt.Sprintf("%s:%d", s.Host, 36000), clientConfig) 

看起來是沒啥問題的,畢竟傳入了一個 Timeout 參數,不應該會阻塞。接著繼續看下去發現了一些問題。直接來到調用棧中阻塞的地方(先不看 library 和 runtime,這兩個一般沒問題),是在進行 SSH Handshake 的第一個步驟,交換 SSH 版本這步。

  1. // Sends and receives a version line.  The versionLine string should 
  2. // be US ASCII, start with "SSH-2.0-"and should not include a 
  3. // newline. exchangeVersions returns the other side's version line. 
  4. func exchangeVersions(rw io.ReadWriter, versionLine []byte) (them []byte, err error) { 
  5.     ... 
  6.     if _, err = rw.Write(append(versionLine, '\r''\n')); err != nil { 
  7.         return 
  8.     } 
  9.  
  10.     them, err = readVersion(rw) 
  11.     return them, err 
  12.  
  13. // maxVersionStringBytes is the maximum number of bytes that we'll 
  14. // accept as a version string. RFC 4253 section 4.2 limits this at 255 
  15. // chars 
  16. const maxVersionStringBytes = 255 
  17.  
  18. // Read version string as specified by RFC 4253, section 4.2. 
  19. func readVersion(r io.Reader) ([]byte, error) { 
  20.     versionString := make([]byte, 0, 64) 
  21.     var ok bool 
  22.     var buf [1]byte 
  23.  
  24.     for length := 0; length < maxVersionStringBytes; length++ { 
  25.         _, err := io.ReadFull(r, buf[:]) // 阻塞在這里 
  26.         if err != nil { 
  27.             return nil, err 
  28.         } 
  29.         ... 
  30.     } 
  31.  
  32.     ... 
  33.     return versionString, nil 

看邏輯是在給對端發送完自己的版本信息后,等待對端回復,但是一直沒有收到回復。但是為什么會沒回復,為什么沒有超時,剛開始看到這里的我是懵逼的。我只能想到既然這些都阻塞在等待對端回復上,那么一定有對應的連接存在,我先看看機器上的連接有什么問題。

TCP 連接的半打開狀態 (TCP half-open)

在機器上執行了一下 netstat 命令看了下連接數。

  1. # netstat -anp|grep :36000|awk '{print $6}'|sort|uniq -c 
  2.  2110 ESTABLISHED 
  3.       1 LISTEN 
  4.      41 TIME_WAIT 

有大量處于 ESTABLISHED 的進程,數量和 goroutine 數能大致對上。先把注意力放到這些連接上,選其中一兩個看看有什么問題吧。

接著便發現,有些連接,在本機有 6 個連接:

 

但是,對端一個也沒有(圖上那一個連接是我登錄到目標機器的 ssh 連接):

 

google 查了下,發現這種情況屬于 TCP 半打開狀態,出現這種情況應該是建立連接后對端掛掉了或者其他網絡無法連通的原因,而連接又沒有啟動 KeepAlive,導致一端無法發現這種情況,繼續顯示 ESTABLISHED 的連接,而另一端在機器掛掉重新啟動后便不存在這條鏈接了。現在要確認一下是否真的沒用啟用 KeepAlive:

  1. # ss -aeon|grep :36000|grep -v time|wc -l 
  2. 2110 

全部沒開……這里不帶 KeepAlive 的連接數和上面 netstat 顯示出來狀態為 ESTABLISHED 狀態的連接數一致,實際上在執行這兩條命令的間隙肯定有新請求進來,這兩個數字對上不能說完全匹配,只能說大多數是沒有開啟的。這里能 Get 到點就行。

再看一下 ssh.Dial 的邏輯,建立連接用的是 net.DialTimeout,而現網發生泄漏的版本是用 go1.9.2 編譯的,這個版本的 net.DialTimeout 返回的 net.Conn 結構體的 KeepAlive 是默認關閉的(go1.9.2/net/client.go )。

golang.org/x/crypto/ssh 包在調用 net.DialTimeout 時不會顯式啟用 KeepAlive,完全依賴于當前 go 版本的默認行為。在最新版的 go 里面已經把建立 TCP 連接時啟動 KeepAlive 作為默認行為了,于是這里我把代碼遷移到 go1.13.3 重新編譯了一次發到現網了,以為問題就塵埃落定了。

SSH 握手阻塞 (SSH Handshake hang)

實際上不是的。用 go1.13.3 編譯的版本,運行一段時間后,用 pprof 看 goroutine 情況,還是存在不少處于 IO wait 狀態的,并且看調用棧還是原來的味道(SSH handshake 時交換版本信息)。再看一下機器上的連接情況:

  1. # netstat -anp|grep :36000|awk '{print $6}'|sort|uniq -c 
  2.      81 ESTABLISHED 
  3.       1 LISTEN 
  4.       1 SYN_SENT 
  5.      23 TIME_WAIT 
  6. # ss -aeon|grep :36000|grep time|wc -l 
  7. 110 
  8. # ss -aeon|grep :36000|grep -v time|wc -l 
  9. # ss -aeon|grep :36000|grep -v time 
  10. LISTEN     0      128         100.107.1x.x6:36000                    *:*      ino:2508898466 s 

不帶 KeepAlive 那個連接是本機監聽 36000 端口的 sshd,其他都帶上了,那沒什么問題。說明這些阻塞住的應該不是因為 TCP 半打開導致阻塞的,選其中一個 IP 出來看看。

 

用 telnet 可以連上,但是無法斷開連接。說明 TCP 連接是可以建立的,對端卻因為一些不可知的原因不響應。再看看這個 IP 的連接存在多久了

  1. # netstat -atnp|grep 10.100.7x.x9 
  2. tcp        0      0 100.107.1x.x6:8851        10.100.7x.x9:36000         ESTABLISHED 33027/ssh_tunnel_se 
  3. # lsof -p 33027|grep 10.100.7x.x9 
  4. ssh_tunne 33027  mqq   16u  IPv4 3069826111      0t0        TCP 100-107-1x-x6:8504->10.100.7x.x9:36000 (ESTABLISHED) 
  5. # ls -l /proc/33027/fd/16 
  6. lrwx------ 1 mqq mqq 64 Dec 23 15:44 /proc/33027/fd/16 -> socket:[3069826111] 

執行這個命令的時間是 24 日 17 時 25 分,已經阻塞一天多了。那這里的問題就是應用層沒有超時控制導致的。再回過去看 ssh.Dial 的邏輯,Timeout 參數在 SSH handshake 的時候并沒有作為超時控制的參數使用。net.Conn 的 IO 等待在 Linux 下是用非阻塞 epoll_pwait 實現的,進入等待的 goroutine 會被掛起直到有事件進來,超時是通過設置 timer 喚醒 goroutine 進行處理的,暴露出來的接口便是 net.Conn 的 SetDeadline 方法,于是重寫了 ssh.Dial 的邏輯,給 SSH

handshake 階段添加超時:

  1. // DialTimeout starts a client connection to the given SSH server. Differ from 
  2. // ssh.Dial function, this function will be timeout when doing SSH handshake. 
  3. // total timeout = ( 1 + timeFactor ) * config.Timeout 
  4. // refs: https://github.com/cybozu-go/cke/pull/81/files 
  5. func DialTimeout(network, addr string, config *ssh.ClientConfig) (*ssh.Client, error) { 
  6.     conn, err := net.DialTimeout(network, addr, config.Timeout) 
  7.     if err != nil { 
  8.         return nil, err 
  9.     } 
  10.  
  11.     // set timeout for connection 
  12.     timeFactor := time.Duration(3) 
  13.     err = conn.SetDeadline(time.Now().Add(config.Timeout * timeFactor)) 
  14.     if err != nil { 
  15.         conn.Close() 
  16.         return nil, err 
  17.     } 
  18.  
  19.     // do SSH handshake 
  20.     c, chans, reqs, err := ssh.NewClientConn(conn, addr, config) 
  21.     if err != nil { 
  22.         return nil, err 
  23.     } 
  24.  
  25.     // cancel connection read/write timeout 
  26.     err = conn.SetDeadline(time.Time{}) 
  27.     if err != nil { 
  28.         conn.Close() 
  29.         return nil, err 
  30.     } 
  31.     return ssh.NewClient(c, chans, reqs), nil 

用這個函數替換了 ssh.Dial 后,編譯上線,看下連接情況,恢復正常了。(恢復到一個小服務應該有的樣子)

  1. # netstat -anp|grep :36000|awk '{print $6}'|sort|uniq -c 
  2.       3 ESTABLISHED 
  3.       1 LISTEN 
  4.      86 TIME_WAIT 

到這里會發現,其實本文解決的問題是對端如果出現各種異常了,如何及時關閉連接,而不是去解決對端的異常問題。畢竟 SSH 都異常了,誰還能上去查問題呢。現網服務器數量巨大,運行情況各不相同,因此出現異常也屬情理之中,一一解決不太現實。

結尾

剛開始發現泄漏的時候到機器上 top 看了下,當時被 50G 的 VIRT 占用給嚇著了,在咨詢了組內大佬(zorro)的后,實際上這個值大多數時候都不用關心,只需關心 RES 占用即可。因為 RES 是實際占用的物理內存。

 

只看這一個時間點的 VIRT 和 RES 也是看不出到底有多少是泄漏的。只能和不同的時間點的內存占用對比,比如解決問題以后的版本,運行了三四天的情況下,VIRT 占用是 3.9G,而 RES 只占用了 16M。這樣比下來看,還是釋放了不少內存。或者說可以見得泄漏的那些 goroutine 占據了多少內存。

在 golang 中創建 goroutine 是一件很容易的事情,但是不合理的使用可能會導致大量 goroutine 無法結束,資源也無法被釋放,隨著時間推移造成了內存的泄漏。

避免 goroutine 泄漏的關鍵是要合理管理 goroutine 的生命周期,通過 prometheus/client_golang 導出 runtime 指標和利用 net/http/pprof 可以發現和解決 goroutine 泄漏問題。

【本文為51CTO專欄作者“騰訊技術工程”原創稿件,轉載請聯系原作者(微信號:Tencent_TEG)】

 

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2022-07-29 08:17:46

Java對象內存

2023-05-29 09:07:10

SQLpageSize主鍵

2023-10-26 08:38:43

SQL排名平分分區

2025-01-13 00:00:00

配置Redis腦裂

2024-02-28 08:41:51

Maven沖突版本

2010-08-24 09:32:41

2021-10-11 10:25:33

排列nums數組

2022-05-10 08:17:03

goroutine泄漏

2022-11-29 16:35:02

Tetris鴻蒙

2022-12-02 14:20:09

Tetris鴻蒙

2024-06-27 08:54:22

Go模塊團隊

2022-02-08 17:17:27

內存泄漏排查

2014-10-21 15:07:04

2023-03-30 09:32:27

2022-11-14 17:01:34

游戲開發畫布功能

2019-12-17 10:01:40

開發技能代碼

2017-01-22 15:09:08

架構閉環演進

2023-04-26 07:30:00

promptUI非結構化

2023-04-26 07:42:16

WebGL圖元的類型

2022-10-08 00:00:05

SQL機制結構
點贊
收藏

51CTO技術棧公眾號

亚洲国产精品一区二区三区| 亚洲欧美日韩在线| 欧美亚洲日本网站| 成人性生交大片免费看无遮挡aⅴ| 97久久香蕉国产线看观看| 久久久国产精品不卡| 91精品久久久久久久久久久久久久 | 免费污网站在线观看| 99久久精品一区二区成人| 亚洲同性同志一二三专区| 国产二区不卡| 国产精品无码粉嫩小泬| 欧美在线网址| 亚洲丝袜在线视频| 亚洲国产综合av| 欧美gv在线观看| 日韩美女啊v在线免费观看| 狠狠色综合网站久久久久久久| 日韩中文字幕高清| 亚洲国产午夜| 久久精品国产久精国产思思| 影音先锋人妻啪啪av资源网站| 久久电影天堂| 欧美性猛交丰臀xxxxx网站| 400部精品国偷自产在线观看| 久久国产精品高清一区二区三区| 精品一区二区在线视频| 欧美在线播放视频| 久久婷婷一区二区| 欧美国产一级| 亚洲欧洲成视频免费观看| 一级全黄裸体片| 国产成人精品一区二区三区视频| 婷婷一区二区三区| 永久免费看av| 日本免费在线观看| 国产欧美综合在线观看第十页| 粉嫩精品一区二区三区在线观看 | 日韩精品久久久久久福利| 中文字幕一区二区三区四| 欧美日韩在线精品一区二区三区激情综合 | aa视频在线播放| 中文字幕免费高清电视剧网站在线观看 | 欧美专区18| 91chinesevideo永久地址| 男女做暖暖视频| 91青青国产在线观看精品| 精品亚洲一区二区| 亚洲少妇18p| 一本色道69色精品综合久久| 91麻豆精品国产91久久久久久| 国产性生交xxxxx免费| www.youjizz.com在线| 夜色激情一区二区| 永久免费网站视频在线观看| 黄网站免费在线观看| 国产精品天美传媒沈樵| 四虎永久国产精品| 毛片网站在线| 久久久久久久久久久电影| 久久精品一区二区三区不卡免费视频| 免费国产黄色片| 风间由美性色一区二区三区| 超碰国产精品久久国产精品99| 国产色视频在线| 国产精品一区二区x88av| 国产精品一区二区三区久久久| wwwwww在线观看| 日韩av中文在线观看| 国产精品嫩草影院一区二区| 在线观看国产黄| 国产专区综合网| 91成人免费看| 亚洲欧洲国产综合| 国产亚洲欧美一级| 神马影院我不卡午夜| 免费看a在线观看| 一区二区三区在线观看国产 | 在线免费看视频| 亚洲成av人电影| 欧美乱大交xxxxx| 国产又大又黑又粗免费视频| 久久福利一区| 国产欧美日韩丝袜精品一区| 精品免费久久久| av高清久久久| 亚洲成人在线视频网站| 51xtv成人影院| 精品久久久久人成| 可以看污的网站| 福利在线一区| 国产亚洲欧洲高清| 国产精品成人免费观看| 国产欧美精品久久| 成人h猎奇视频网站| 丰满人妻一区二区三区免费| 久久久电影一区二区三区| 日本午夜一区二区三区| 成年人黄视频在线观看| 欧美日韩国产一区中文午夜| 婷婷免费在线观看| 亚洲日本va| 伊人青青综合网站| 久久精品国产av一区二区三区| 久久九九免费| 99九九视频| av网页在线| 亚洲风情在线资源站| 在线观看免费成人av| 久久久久久久久成人| 亚洲毛茸茸少妇高潮呻吟| 杨钰莹一级淫片aaaaaa播放| 奶水喷射视频一区| 亚洲一区二区三区xxx视频| 欧美日本韩国一区二区| 亚洲欧美国产毛片在线| 男人天堂成人在线| 国产一区调教| 久久综合电影一区| 国产男人搡女人免费视频| 成人午夜视频免费看| youjizz.com亚洲| 日韩不卡在线| 亚洲开心激情网| 国产一级片播放| 国产久卡久卡久卡久卡视频精品| 日本一区二区三区视频在线观看| 草草在线观看| 日韩欧美第一区| 精品无码一区二区三区蜜臀| 三级成人在线视频| 蜜桃视频成人| 深夜在线视频| 亚洲激情视频网| 精品在线视频免费| 国产精品123区| 一级特黄妇女高潮| 国产麻豆一区二区三区| 久久精品视频导航| 中文字幕第31页| 中文字幕第一区| 午夜免费一区二区| 国产一区二区三区日韩精品 | 超碰10000| 91精品国产一区二区在线观看| 这里只有精品在线播放| 国产伦精品一区二区三区视频我| 不卡视频在线观看| 国产真人做爰毛片视频直播| 91精品丝袜国产高跟在线| 久久综合伊人77777| 国产毛片毛片毛片毛片| 亚洲欧洲av一区二区三区久久| 91色国产在线| 久久精品播放| 91深夜福利视频| 在线āv视频| 欧美成人一区二区三区| 国产一级一片免费播放放a| 国产**成人网毛片九色| av日韩一区二区三区| 欧美freesex8一10精品| 欧美性视频在线| 九色蝌蚪在线| 欧美日韩一区不卡| 精品国产视频在线观看| 国产一区二区日韩精品| 日韩欧美视频免费在线观看| 在线精品自拍| 91成人国产在线观看| 九一在线视频| 欧美精品日韩一本| 麻豆91精品91久久久| 成人精品视频网站| 国产黄页在线观看| 全球成人免费直播| 亚洲自拍小视频免费观看| 日皮视频在线观看| 日韩经典一区二区三区| 羞羞色院91蜜桃| 亚洲视频在线一区二区| 99免费观看视频| 久久综合狠狠| 国内外成人激情免费视频| 国产精品17p| 国产精品白嫩初高中害羞小美女 | 亚洲视频中文字幕| 国产草草浮力影院| 蜜臀av一区二区| 波多野结衣与黑人| 国产精品亚洲片在线播放| 成人在线免费观看视视频| 丁香花在线高清完整版视频| 亚洲午夜av久久乱码| 97成人免费视频| 精品成人乱色一区二区| 女性裸体视频网站| 99久久久无码国产精品| 日韩中文字幕a| 日韩午夜av在线| 四虎影院一区二区| 校花撩起jk露出白色内裤国产精品| 国产精品青草久久久久福利99| 色www永久免费视频首页在线 | 日本美女一区二区| 激情五月婷婷六月| 日韩精品欧美激情一区二区| 国产精品一区视频| 国产精品一区二区三区av| 热久久99这里有精品| 七七久久电影网| 最近2019年中文视频免费在线观看| 国产18精品乱码免费看| 欧美剧情片在线观看| 国产成人无码av| 亚洲综合999| 中国一级片在线观看| 国产亚洲自拍一区| 这里只有精品在线观看视频| 精品亚洲国内自在自线福利| 男人搞女人网站| av不卡在线| 国产成人亚洲综合无码| 希岛爱理一区二区三区| 日韩视频在线播放| 男男gay无套免费视频欧美 | 日本电影一区二区| 欧美精品一区二区三区久久| 成人另类视频| 99在线看视频| 韩国三级大全久久网站| 国产欧美日韩丝袜精品一区| 欧美va在线观看| 日韩免费av片在线观看| 小草在线视频免费播放| 欧美激情videoshd| 在线三级中文| 欧美老女人在线视频| 老司机精品影院| 日韩在线视频免费观看高清中文| 男人的天堂在线免费视频| 亚洲精品国产欧美| 日韩一级中文字幕| 亚洲第一福利视频| 好吊视频一二三区| 亚洲成人精品久久| 日本精品久久久久久| 精品国产乱码久久久久久老虎| 国产精品无码白浆高潮| 51久久夜色精品国产麻豆| 亚洲一级在线播放| 69精品人人人人| 国产精品伊人久久| 欧美一二三四区在线| 国内精品国产成人国产三级| 日韩三级电影网址| 亚洲国产精品成人久久蜜臀| 欧美成人一区二区三区在线观看| 亚洲成人精品女人久久久| 欧美本精品男人aⅴ天堂| 欧美视频在线观看一区二区三区| 亚洲第一中文字幕在线观看| 五月婷婷免费视频| 亚洲一区二区久久久| 色三级在线观看| 欧美放荡办公室videos4k| 白浆视频在线观看| 国产精品27p| 国产精品欧美一区二区三区不卡| 亚洲一区二区三区乱码aⅴ| 在线观看视频一区二区三区| 九9re精品视频在线观看re6| 国产欧美日韩影院| 一区二区三区日韩视频| 韩国亚洲精品| 女人另类性混交zo| 久久99精品国产.久久久久久| 国产成人精品综合久久久久99 | wwww亚洲| 国产精品精品一区二区三区午夜版 | 欧洲在线/亚洲| 国产成人久久精品77777综合| 日韩av在线网站| 青青青青在线| 久久人91精品久久久久久不卡 | 欧美四级电影在线观看| 国内精品久久久久久久久久久| 日韩电影免费在线观看中文字幕 | 污污网站免费观看| 国产不卡高清在线观看视频| 欧美性xxxx图片| 综合亚洲深深色噜噜狠狠网站| 日韩 欧美 亚洲| 欧美日韩国产影片| 欧美一级淫片aaaaaa| 宅男66日本亚洲欧美视频| 性欧美高清come| 国产精品久久久久久中文字| 超碰一区二区三区| 亚洲成人自拍视频| 日韩一级大片| 加勒比av中文字幕| 久久尤物电影视频在线观看| 日本中文字幕免费在线观看| 色网站国产精品| 亚洲国产精品一| 日韩中文字幕国产精品| 理论片午夜视频在线观看| 91免费看片网站| 国产中文精品久高清在线不| av动漫在线免费观看| 日本美女视频一区二区| 国产精品一区二区入口九绯色| 亚洲精品第一国产综合野| 波多野结衣在线观看视频| 精品国产乱码久久久久久图片| aaa在线观看| 国产成人一区二区在线| 美女主播精品视频一二三四| 一本二本三本亚洲码 | 69久久精品无码一区二区| 日本一区二区三区视频视频| 日产精品久久久| 亚洲成avwww人| 午夜影院免费在线| 成人a级免费视频| 日韩情爱电影在线观看| 日av中文字幕| 91视频.com| 西西44rtwww国产精品| 精品国产91洋老外米糕| 影院在线观看全集免费观看| 国产有码一区二区| 成人女性视频| 亚洲激情在线观看视频| 日本一区二区三区免费乱视频 | 狠狠躁少妇一区二区三区| 国产福利一区二区三区在线观看| 影音先锋成人在线电影| 国产永久免费网站| 国产精品国产三级国产aⅴ中文| 免费一级a毛片| 伊人青青综合网站| 久久久久伊人| 先锋影音亚洲资源| 欧美aaaaaa午夜精品| 欧美巨胸大乳hitomi| 欧美特级限制片免费在线观看| 99re在线视频| 成人在线视频福利| 自产国语精品视频| 91精品国产高清91久久久久久 | 人妻夜夜添夜夜无码av| 99九九99九九九视频精品| 天天操天天干视频| 亚洲欧洲xxxx| 91国内外精品自在线播放| 亚洲一区二区三区精品动漫| 麻豆传媒一区二区三区| 男女性高潮免费网站| 日韩精品专区在线影院重磅| 动漫一区二区| 日本欧洲国产一区二区| 免费观看久久久4p| 日韩福利小视频| 欧美精品一区二区三区在线| 在线人成日本视频| 视频在线99re| 国产精一区二区三区| 豆国产97在线 | 亚洲| 日韩电影中文字幕在线观看| 成人影院网站| 中文字幕99| 成人国产精品免费观看视频| 黄色片网站在线免费观看| 中文国产成人精品久久一| 日韩黄色av| 国产白丝袜美女久久久久| 中文成人av在线| www久久久com| 欧美在线观看网址综合| 色777狠狠狠综合伊人| 日本黄色大片在线观看| 午夜精品久久久久久不卡8050| 国产乱子伦三级在线播放| 亚洲一区二区在线| 国产婷婷精品| 亚洲精品久久久久久国| 亚洲高清久久久久久| 成人在线观看免费视频| 老子影院午夜伦不卡大全| 国产农村妇女毛片精品久久麻豆| 国产xxxx在线观看| 国产成人av网址| 欧美午夜不卡影院在线观看完整版免费| 亚洲一区二区乱码| 欧美精品视频www在线观看| 一区二区三区短视频| 永久免费网站视频在线观看| 国产拍揄自揄精品视频麻豆|