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

必須要學的 Go 進程診斷工具 gops

開發 開發工具
在類 Unix 系統中,我們常常會使用 ps 命令來查看系統當前所運行的進程信息,該命令為我們提供了較大的幫助,能夠快速的定位到某些進程的運行情況和狀態。

[[355432]]

本文轉載自微信公眾號「 腦子進煎魚了」,作者陳煎魚。轉載本文請聯系腦子進煎魚了公眾號。

在類 Unix 系統中,我們常常會使用 ps 命令來查看系統當前所運行的進程信息,該命令為我們提供了較大的幫助,能夠快速的定位到某些進程的運行情況和狀態。

而在 Go 語言中,也有類似的命令工具,那就是 gops[1](Go Process Status)。

gops 是由 Google 官方出品的一個命令行工具,與 ps 命令的功能類似,能夠查看并診斷當前系統中 Go 程序的運行狀態及內部情況,在一些使用場景中具有較大的存在意義,屬于常用工具。

在本文中我們將對 gops 進行全面的使用和介紹。

基本使用

我們先創建一個示例項目,然后在項目根目錄執行下述模塊安裝命令:

  1. $ go get -u github.com/google/gops 

寫入如下啟動代碼:

  1. import ( 
  2.  ... 
  3.  "github.com/google/gops/agent" 
  4.  
  5. func main() { 
  6.  // 創建并監聽 gops agent,gops 命令會通過連接 agent 來讀取進程信息 
  7.  // 若需要遠程訪問,可配置 agent.Options{Addr: "0.0.0.0:6060"},否則默認僅允許本地訪問 
  8.  if err := agent.Listen(agent.Options{}); err != nil { 
  9.   log.Fatalf("agent.Listen err: %v", err) 
  10.  } 
  11.   
  12.  http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) { 
  13.   _, _ = w.Write([]byte(`Go語言編程之旅`)) 
  14.  }) 
  15.  _ := http.ListenAndServe(":6060", http.DefaultServeMux) 

在完成示例啟動代碼的寫入后,我們啟動該程序,并在命令行執行 gops 命令進行查看:

  1. 3739  3725  main  * go1.14   /private/var/folders/jm/.../b001/exe/main 
  2. 3725  71093 go      go1.14   /usr/local/Cellar/go/1.14/libexec/bin/go 
  3. 62357 46131 go      go1.14   /usr/local/Cellar/go/1.14/libexec/bin/go 
  4. 3872  3742  gops    go1.14   /Users/eddycjy/go/bin/gops 
  5. 62379 62357 main    go1.14   /private/var/folders/jm/.../b001/exe/main 
  6. ... 

在上述輸出中,你很快就發現有一點不一樣,那就是為什么某一行的輸出結果中會包含一個 * 符號,如下:

  1. 3739  3725  main  * go1.14   /private/var/folders/jm/.../b001/exe/main 

這實際上代表著該 Go 進程,包含了 agent,因此它可以啟用更強大的診斷功能,包括當前堆棧跟蹤,Go版本,內存統計信息等等。

在最后也有一個 main 的 Go 進程,它不包含 * 符號,這意味著它是一個普通的 Go 程序,也就是沒有植入 agent,只能使用最基本的功能。

常規命令

gops 工具包含了大量的分析命令,我們可以通過 gops help 進行查看:

  1. $ gops help 
  2. gops is a tool to list and diagnose Go processes. 
  3.  
  4. Usage: 
  5.   gops <cmd> <pid|addr> ... 
  6.   gops <pid> # displays process info 
  7.   gops help  # displays this help message 
  8.  
  9. Commands: 
  10.   stack      Prints the stack trace. 
  11.   gc         Runs the garbage collector and blocks until successful. 
  12.   setgc      Sets the garbage collection target percentage. 
  13.   memstats   Prints the allocation and garbage collection stats. 
  14.   version    Prints the Go version used to build the program. 
  15.   stats      Prints runtime stats. 
  16.   trace      Runs the runtime tracer for 5 secs and launches "go tool trace"
  17.   pprof-heap Reads the heap profile and launches "go tool pprof"
  18.   pprof-cpu  Reads the CPU profile and launches "go tool pprof"

在接下來的小節中,我們將針對幾個常用的分析功能進行概要分析。

查看指定進程信息

  1. $ gops <pid> 
  2. parent PID: 3725 
  3. threads: 7 
  4. memory usage: 0.042% 
  5. cpu usage: 0.003% 
  6. username: eddycjy 
  7. cmd+args: /var/folders/jm/pk20jr_s74x49kqmyt87n2800000gn/T/go-build943691423/b001/exe/main 
  8. elapsed time: 10:56 
  9. local/remote: 127.0.0.1:59369 <-> :0 (LISTEN) 
  10. local/remote: *:6060 <-> :0 (LISTEN) 

獲取 Go 進程的概要信息,包括父級PID、線程數、內存/CPU使用率、運行者的賬戶名、進程的啟動命令行參數、啟動后所經過的時間以及 gops 的 agent 監聽信息(若無植入 agent,則沒有這項信息)。

查看調用棧信息

  1. $ gops stack 3739 
  2. goroutine 19 [running]: 
  3. runtime/pprof.writeGoroutineStacks(0x1385aa0, 0xc000132038, 0x30, 0xd0) 
  4.  ... 
  5.  /Users/eddycjy/go/src/github.com/google/gops/agent/agent.go:185 +0x1af 
  6. github.com/google/gops/agent.listen() 
  7.  /Users/eddycjy/go/src/github.com/google/gops/agent/agent.go:133 +0x2bf 
  8. created by github.com/google/gops/agent.Listen 
  9.  /Users/eddycjy/go/src/github.com/google/gops/agent/agent.go:111 +0x36b 
  10.  
  11. goroutine 1 [IO wait]: 
  12. internal/poll.runtime_pollWait(0x2f55e38, 0x72, 0x0) 
  13.  /usr/local/Cellar/go/1.14/libexec/src/runtime/netpoll.go:203 +0x55 
  14.  ... 

獲取對應進程的代碼調用堆棧信息,可用于分析調用鏈路。

查看內存使用情況

  1. $ gops memstats 3739 
  2. alloc: 1.15MB (1205272 bytes) 
  3. total-alloc: 1.15MB (1205272 bytes) 
  4. sys: 69.45MB (72827136 bytes) 
  5. lookups: 0 
  6. mallocs: 644 
  7. frees: 12 
  8. heap-alloc: 1.15MB (1205272 bytes) 
  9. heap-sys: 63.66MB (66748416 bytes) 
  10. heap-idle: 62.05MB (65060864 bytes) 
  11. heap-in-use: 1.61MB (1687552 bytes) 
  12. heap-released: 62.02MB (65028096 bytes) 
  13. heap-objects: 632 
  14. ... 

獲取 Go 在運行時的當前內存使用情況,主要是 runtime.MemStats[2] 的相關字段信息。

查看運行時信息

  1. $ gops stats 3739 
  2. goroutines: 2 
  3. OS threads: 8 
  4. GOMAXPROCS: 4 
  5. num CPU: 4 

獲取 Go 運行時的基本信息,包括當前的 Goroutine 數量、系統線程、GOMAXPROCS 數值以及當前系統的 CPU 核數。

查看 trace 信息

  1. $ gops trace 3739 
  2. Tracing now, will take 5 secs... 
  3. Trace dump saved to: /var/folders/jm/pk20jr_s74x49kqmyt87n2800000gn/T/trace092133110 
  4. Parsing trace... 
  5. Splitting trace... 
  6. Opening browser. Trace viewer is listening on http://127.0.0.1:53811 

與 go tool trace 作用基本一致。

查看 profile 信息

  1. $ gops pprof-cpu 3739 
  2. Profiling CPU now, will take 30 secs... 
  3. Profile dump saved to: /var/folders/jm/pk20jr_s74x49kqmyt87n2800000gn/T/profile563685966 
  4. Binary file saved to: /var/folders/jm/pk20jr_s74x49kqmyt87n2800000gn/T/binary265411413 
  5. File: binary265411413 
  6. Type: cpu 
  7. ... 
  8. (pprof)  
  9.  
  10. $ gops pprof-heap 3739 
  11. Profile dump saved to: /var/folders/jm/pk20jr_s74x49kqmyt87n2800000gn/T/profile967076057 
  12. Binary file saved to: /var/folders/jm/pk20jr_s74x49kqmyt87n2800000gn/T/binary904879716 
  13. File: binary904879716 
  14. Type: inuse_space 
  15. ... 
  16. (pprof)  

與 go tool pprof 作用基本一致。

你怎么知道我是誰

在學習了 gops 的使用后,我們突然發現一個問題,那就是 gops 是怎么知道哪些進程是與 Go 相關的進程?

如果是植入了 agent 的應用程序還好說,可以理解為埋入了識別點。但實際情況是,沒有植入 agent 的 Go 程序也被識別到了,說明 gops 本身并不是這么實現的,考慮植入agent 應當只是用于診斷信息的拓展使用,并不是一個識別點,那么 gops 到底是怎么發現哪些進程是 Go 相關的呢?

我們回歸問題的前置需求,假設我們想知道哪些進程與 Go 相關,那么第一步我們要先知道我們當前系統中都運行了哪些進程,這些記錄在哪里有?

認真思考一下,答案也就呼之欲出了,假設是 Linux 相關的系統下,其會將進程所有的相關信息都按照約定的數據結構寫入 /proc 目錄下,因此我們有充分的懷疑認為 gops 就是從 /proc 目錄下讀取到相關信息的,源代碼如下:

  1. func PidsWithContext(ctx context.Context) ([]int32, error) { 
  2.  var ret []int32 
  3.  
  4.  d, err := os.Open(common.HostProc()) 
  5.  if err != nil { 
  6.   return nil, err 
  7.  } 
  8.  defer d.Close() 
  9.  
  10.  fnames, err := d.Readdirnames(-1) 
  11.  if err != nil { 
  12.   return nil, err 
  13.  } 
  14.  for _, fname := range fnames { 
  15.   pid, err := strconv.ParseInt(fname, 10, 32) 
  16.   if err != nil { 
  17.    continue 
  18.   } 
  19.   ret = append(ret, int32(pid)) 
  20.  } 
  21.  
  22.  return ret, nil 
  23.  
  24. // common.HostProc 
  25. func HostProc(combineWith ...string) string { 
  26.  return GetEnv("HOST_PROC""/proc", combineWith...) 

在上述代碼中,該方法通過調用 os.Open 方法打開了 proc 目錄,并利用 Readdirnames 方法對該目錄進行了掃描,最終獲取到了所有需要 pid,最終完成其使命,返回了所有 pid。

在確定了 gops 是通過掃描 /proc 目錄得到的進程信息后,我們又遇到了一個新的疑問點,那就是 gops 是怎么確定這個進程是 Go 進程,又怎么知道它的具體版本信息的呢,源代碼如下:

  1. func isGo(pr ps.Process) (path, version string, agent, ok bool, err error) { 
  2.  ... 
  3.  path, _ = pr.Path() 
  4.  if err != nil { 
  5.   return 
  6.  } 
  7.  var versionInfo goversion.Version 
  8.  versionInfo, err = goversion.ReadExe(path) 
  9.  if err != nil { 
  10.   return 
  11.  } 
  12.  ok = true 
  13.  version = versionInfo.Release 
  14.  pidfile, err := internal.PIDFile(pr.Pid()) 
  15.  if err == nil { 
  16.   _, err := os.Stat(pidfile) 
  17.   agent = err == nil 
  18.  } 
  19.  return path, version, agent, ok, nil 

我們可以看到該方法的主要作用是根據掃描 /proc 目錄所得到的二進制文件地址中查找相關的標識,用于判斷其是否 Go 程序,如果是 Go 程序,那么它將會返回該進程的 pid、二進制文件的名稱以及二進制文件的完整存儲路徑,判斷的標識如下:

  1. if name == "runtime.main" || name == "main.main" { 
  2.         isGo = true 
  3.     } 
  4.     if name == "runtime.buildVersion" { 
  5.         isGo = true 
  6.     } 

而關于所編譯的 Go 語言的版本,Go 編譯器會在二進制文件中打入 runtime.buildVersion標識,這個標識能夠快速我們快速識別它的編譯信息,而 gops 也正正是利用了這一點。

我們可以利用 gdb 來進行查看 Go 所編譯的二進制文件的版本信息,如下:

  1. $ export GOFLAGS="-ldflags=-compressdwarf=false" && go build . 
  2.  
  3. $ gdb awesomeProject  
  4. ... 
  5. (gdb) p 'runtime.buildVersion' 
  6. $1 = 0x131bbb0 "go1.14" 

在上述輸出中,我們先對示例項目進行了編譯,然后利用 gdb 中查看了 runtime.buildVersion 變量,最終可得知編譯這個 Go 程序的版本是 Go1.14。

但在編譯時,有一點需要注意,就是我們在編譯時指定了 export GOFLAGS="-ldflags=-compressdwarf=false" 參數。

如果不進行指定的話,就會出現 Reading symbols from awesomeProject...(no debugging symbols found)...done. 的相關報錯,會將會影響部分功能使用。

這是因為在 Go1.11 版本開始,進行了調試信息的壓縮,目的是為了減小所編譯的二進制文件大小,但 Mac 上的 gdb 無法理解壓縮的 DWARF,因此會產生問題。

需要進行指定在調試時不進行 DWARF 的壓縮,便于 Mac 上的 gdb 使用。

需要注意的一點

假設我們在一些特殊場景下希望對 Go 所編譯的二進制文件進行壓縮,那么在最后我們常常會使用到 upx 工具來減少其整體大小,命令如下:

  1. $ upx awesomeProject 

這時候我們再重新運行所編譯的 awesomeProject 文件,這時候需要思考的是,gops 能不能識別到它是一個 Go 程序呢?

答案是不行的,經過 upx 壓縮后的二進制文件將無法被識別為 Go 程序,并且在我所使用的 gops v0.3.7版本中,由于這類加殼進程的存在,執行 gops 命令直接出現了空指針調用的恐慌(panic),顯然,這是一個 BUG,大家在實際環境中需要多加留意,如果要使用 gops 則盡量不要使用 upx 進行壓縮。

總結

在本文中我們針對 Google 官方出品的 gops 進行了基本使用和原理性的部分剖析。

如果你仔細研讀了,就會發現其實 gops 幾乎包含了大部分 Go 剖析工具的功能,是名副其實的進程診斷工具。

gops 集成了大量 Go 業界中常用的分析鏈,在排查問題上也會非常的方便,不需要一個個單獨找特定工具在哪里,只需要使用 gops 即可,而更深層次的使用可以根據實際情況進行更一步的了解。

參考資料

[1]gops: https://github.com/google/gops

[2]runtime.MemStats: https://golang.org/pkg/runtime/#MemStats

 

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2019-08-06 14:54:22

Hadoop數據集海量數據

2011-03-11 17:00:08

SQL

2017-01-18 09:42:11

Go

2021-12-03 18:04:06

命令 RabbitMQ Web

2022-09-30 08:16:38

令牌客戶端隱藏式

2019-04-09 08:15:27

SEO優化工具網站

2018-06-12 15:55:07

編程語言Java加密方式

2019-08-07 15:20:08

Git開源命令

2018-09-21 11:11:34

備份離線自動

2019-02-18 13:36:03

Redis數據庫面試

2012-04-09 13:16:20

DIVCSS

2018-11-08 12:07:38

備份手動磁盤

2018-11-28 10:00:42

React組件前端

2019-06-20 17:39:12

Android啟動優化

2017-09-28 12:03:40

前端

2019-12-27 15:05:11

LinuxWindowsDNS

2015-05-07 15:13:22

JS實現JQueryJQuery

2011-07-13 11:03:17

ASP

2009-03-19 09:47:47

職場能力必備

2021-06-07 11:33:24

服務器優化TIME-WAIT
點贊
收藏

51CTO技術棧公眾號

精品国产免费视频| 韩国av免费在线观看| www免费网站在线观看| 亚洲91网站| 亚洲欧美日韩国产| 欧美一区二区日韩一区二区| 欧美日韩亚洲综合一区二区三区激情在线| 国产极品美女在线| 亚洲精品在线影院| 不卡在线观看av| 久久99精品久久久久久噜噜| 色婷婷激情视频| 国产爆初菊在线观看免费视频网站| 欧美日韩国产高清| 在线播放日韩导航| 亚洲精品9999| 国产成人a v| 竹菊久久久久久久| 欧美日韩中文字幕在线视频| 激情久久av| 久草视频在线资源站| 日本亚洲视频| 欧美亚洲愉拍一区二区| 日本10禁啪啪无遮挡免费一区二区| 特级西西444www大精品视频免费看| aiss精品大尺度系列| 亚洲精品日韩专区silk| 亚洲一区二区三区xxx视频| 青青青手机在线视频| 国产精品亚洲成在人线| 亚洲激情午夜| 亚洲激情中文字幕| 欧美在线一区视频| 四虎免费在线观看| 亚洲美女黄色| 日韩你懂的在线观看| 9l视频自拍9l视频自拍| 97国产精品久久久| 色综合色综合| 欧美一区二区三区在线观看| www黄色在线| 98在线视频| 国产乱码一区二区三区| 欧美精品videossex88| 99久久免费看精品国产一区| 免费观看亚洲| 久久影音资源网| 国产精品专区第二| 永久久久久久久| 国产精品玖玖玖在线资源| 福利一区视频在线观看| 午夜老司机精品| 精品国产伦一区二区三区| 伊人狠狠色j香婷婷综合| 亚洲国产欧美在线成人app| 日韩av福利在线观看| av免费在线视| 国产午夜亚洲精品不卡| 91视频国产高清| 日本午夜小视频| 欧美呦呦网站| 精品少妇一区二区三区免费观看| 国产a级一级片| 麻豆视频网站在线观看| av色综合久久天堂av综合| 国产精品国内视频| 国产亚洲精品码| 日韩欧美1区| www.99久久热国产日韩欧美.com| 日本一级大毛片a一| avav成人| 精品国产1区2区| 中文字幕一区二区三区精彩视频| 免费a视频在线观看| 久久精品久久综合| 欧美一区二区色| 极品盗摄国产盗摄合集| 国产一区三区在线播放| 亚洲精品一区二区三区蜜桃下载| 天天躁日日躁狠狠躁av| 在线视频成人| 色妹子一区二区| 久久久亚洲国产精品| 国产夫妻在线| 亚洲一二三四区| 亚洲精品视频一二三| 国产人成在线观看| 亚洲视频一区在线| 日本免费高清不卡| 日韩欧美小视频| 久久蜜臀中文字幕| 亚洲国产日韩综合一区| 99热国产在线中文| 国产精品第四页| 日本成人黄色| 99视频免费在线观看| 欧美日韩另类视频| 黄色一级二级三级| 免费精品一区二区三区在线观看| 欧美日韩在线免费视频| 一本大道熟女人妻中文字幕在线| 日韩漫画puputoon| 精品久久一区二区三区| 日韩在线免费观看av| 久久久免费毛片| 日韩精品一区二区三区蜜臀| aaaaaav| 欧美一区二区三区红桃小说| 亚洲成人久久电影| 人妻 丝袜美腿 中文字幕| 禁果av一区二区三区| 久久97精品久久久久久久不卡| 天干夜夜爽爽日日日日| 午夜在线视频观看日韩17c| 国产精品一区二区三区在线播放| 亚洲精品免费在线观看视频| 国产成人精品免费在线| 2014国产精品| 国产激情久久久久久熟女老人av| 国产一区999| 亚洲精品日韩av| 日韩在线无毛| 国产亚洲精品7777| 欧美在线观看黄| 国产精品186在线观看在线播放| 一区二区三区中文免费| 日本一级黄视频| 成人涩涩视频| 亚洲电影第1页| 麻豆精品一区二区三区视频| 日本少妇一区二区| 国产拍精品一二三| 国产熟女一区二区丰满| 成人性生交大片免费看视频在线| 国产综合 伊人色| 国产原创av在线| 国产精品国产三级国产aⅴ入口| 欧美日韩一道本| 日本一区免费网站| 日韩精品中文字幕在线观看| 免费看裸体网站| 91超碰成人| 久久免费少妇高潮久久精品99| 日本少妇bbwbbw精品| 国产乱理伦片在线观看夜一区| 日韩亚洲不卡在线| 最新日本在线观看| 欧美夫妻性生活| 99精品一区二区三区无码吞精| 午夜精品毛片| 成人网在线视频| 四虎精品成人免费网站| 国产精品日产欧美久久久久| 狠狠噜天天噜日日噜| 亚洲精品成人一区| 亚洲精品97久久| 亚洲精品77777| 久久av老司机精品网站导航| 国产精品免费一区二区三区观看| 你懂的免费在线观看| 亚洲另类中文字| 992kp免费看片| 欧美va天堂在线| 国产精品99导航| 精品人妻一区二区三区四区不卡| 亚洲人一二三区| 麻豆免费在线观看视频| 欧美伦理影院| 97高清免费视频| 91麻豆国产视频| 亚洲毛片av在线| www.17c.com喷水少妇| 野花国产精品入口| 欧美日韩另类综合| 韩国精品视频在线观看| 久久国产精品偷| 中文字幕av网站| 国产精品成人久久久| 久久66热偷产精品| 法国空姐在线观看免费| 91精品久久久久久综合五月天| 一区二区三区美女xx视频| 精品97人妻无码中文永久在线| 国产一区二区三区观看| 久久手机在线视频| 四虎在线精品| 久久久久久久久爱| 男人天堂网在线观看| 欧美日韩在线综合| 国产精品30p| 韩国成人福利片在线播放| 日本不卡久久| 欧美影院精品| 国产69久久精品成人看| 欧美r级在线| 亚洲精品美女免费| 久草视频免费播放| 久久新电视剧免费观看| 日本中文字幕二区| av在线不卡顿| 91九色极品视频| 五月激情久久| 久久久久久久网站| 午夜免费福利在线观看| 亚洲缚视频在线观看| 国产精品高潮呻吟久久久| 国产三区在线成人av| 香蕉视频xxxx| 日韩国产精品大片| 日韩av影视| 北条麻妃一区二区三区在线观看| 国产精品成人一区二区| 国产99re66在线视频| 日韩视频中文字幕| 天堂av在线资源| 日韩精品一区二区三区中文精品 | 国产女无套免费视频| 日韩欧美精品在线观看| 久久久久亚洲av成人片| 亚洲欧洲另类国产综合| 国产乱码一区二区三区四区| 97精品在线| 666精品在线| 欧美国产日韩电影| 欧美一区二区三区精品电影| 欧美极品少妇videossex| 精品盗摄一区二区三区| 国产乱码精品一区二三区蜜臂 | 一区二区乱子伦在线播放| 性欧美大战久久久久久久久| 在线观看日韩精品视频| 国产剧情在线观看一区二区| 依人在线免费视频| 中文精品电影| 国产一区二区三区高清视频| 久久久久毛片免费观看| 成人福利视频网| 四虎影视国产精品| 成人午夜在线观看| 曰本一区二区| 亚洲va码欧洲m码| 精品国产一区二| 亚洲在线免费看| 国产午夜久久av| 97精品视频在线播放| 七七成人影院| 欧美韩国理论所午夜片917电影| 天天影院图片亚洲| 亚洲国产日韩欧美在线动漫| 免费观看a视频| 日韩电影第一页| 噜噜噜在线观看播放视频| 亚洲欧洲中文天堂| 国产99久久九九精品无码免费| 欧美日韩一区中文字幕| 一级片一区二区三区| 欧美精品一二三四| 国产又大又粗又长| 日韩一区二区精品| 久久久蜜桃一区二区| 黄网站色欧美视频| 91video| 欧美在线播放高清精品| 亚洲天堂手机在线| 午夜精品久久久久久久久久| 日韩伦人妻无码| 色一情一伦一子一伦一区| 91免费公开视频| 亚洲最色的网站| 99久久久无码国产精品不卡| 自拍偷拍亚洲综合| 久久久久亚洲av成人片| 欧美日韩中文字幕在线| 依依成人在线视频| 欧美一区二区黄| 手机看片福利永久| 国产亚洲欧美日韩精品| 蜜桃视频在线观看www| 精品视频在线播放色网色视频| 福利小视频在线观看| 久久久极品av| 午夜伦理在线| 久久理论片午夜琪琪电影网| free欧美| 99久久精品免费看国产一区二区三区| 日韩中文影院| 91高跟黑色丝袜呻吟在线观看| 伦理一区二区三区| 亚洲国产精品综合| 精品成人在线| 国产精品区在线| av午夜一区麻豆| 美女网站视频色| 精品久久久久久久久久ntr影视| 亚洲av人无码激艳猛片服务器| 日韩午夜三级在线| 大乳在线免费观看| 久久69精品久久久久久国产越南| 亚洲黄色免费av| 午夜精品久久久久久99热| 国产综合色区在线观看| 91精品婷婷国产综合久久蝌蚪| 国产一区国产二区国产三区| 日韩成人手机在线| 美腿丝袜亚洲色图| 亚洲美女性囗交| 91亚洲国产成人精品一区二三| 色呦色呦色精品| 91丨porny丨在线| 欧美另类视频在线观看| 欧美性猛交xxxxxx富婆| 无码国产伦一区二区三区视频 | 五月婷中文字幕| 久久久精品网站| 国产高清不卡| 国内精品视频免费| 中文一区一区三区免费在线观看| 成年人视频在线免费| 久久三级视频| 成年人免费在线播放| 天堂资源在线中文精品| 麻豆短视频在线观看| 亚洲人精品午夜| 在线免费看av片| 国产亚洲成av人片在线观看桃| yellow在线观看网址| 亚洲精品免费av| 天天做天天爱天天综合网| 日韩精品一区二区三区电影| 欧美精品97| 一级黄色在线播放| 国产精品国产三级国产专播品爱网 | 动漫av一区二区三区| 北条麻妃一区二区三区中文字幕 | 亚洲国产高清一区二区三区| 久久精品亚洲天堂| 成人欧美一区二区三区白人 | 韩国av一区二区三区四区| 蜜桃久久精品成人无码av| 日韩欧美在线一区| 日韩av成人| 国产成人高潮免费观看精品| 最新国产精品视频| 一区二区不卡在线| 欧美日韩亚洲一区三区 | 99久久精品国产观看| 久久国产一级片| 精品捆绑美女sm三区| 国内在线视频| 国语精品免费视频| 亚洲综合电影一区二区三区| 搡老熟女老女人一区二区| 富二代精品短视频| 欧美孕妇孕交xxⅹ孕妇交| 欧美综合国产精品久久丁香| 日韩伦理一区二区| 正在播放久久| 国产一区免费电影| 久久久99精品| 日韩成人激情视频| 欧美黑人粗大| 亚洲一区二区三区加勒比| 九九久久精品视频| 强乱中文字幕av一区乱码| 7777精品伊人久久久大香线蕉最新版| 黄色网址免费在线观看| 日韩免费不卡av| 亚洲大奶少妇| 国产欧美日韩小视频| 久久成人精品无人区| 尤物在线免费视频| 欧美xxxxxxxxx| 神马久久午夜| av一区和二区| 国产一级一区二区| 久久无码专区国产精品s| 亚洲国产wwwccc36天堂| 国产欧美久久久精品免费| 色综合视频一区中文字幕| 青青草久久爱| www.激情小说.com| 久久久午夜电影| 日韩乱码一区二区| 亚洲人在线观看| 久久爱www.| 男人揉女人奶房视频60分 | 久久99精品久久久久久国产越南 | 亚洲av成人片无码| 色999日韩国产欧美一区二区| 欧美日韩在线看片| 九九九九九九精品| 精品二区视频| 蜜桃av乱码一区二区三区| 日韩一区二区中文字幕| gay欧美网站| 91国在线高清视频| 国产丝袜美腿一区二区三区| 亚洲欧美激情国产综合久久久| 日韩美女视频免费在线观看| 亚洲人metart人体|