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

如何分析 Node.js 中的內存泄漏?

存儲 存儲軟件
內存泄漏(Memory Leak)指由于疏忽或錯誤造成程序未能釋放已經不再使用的內存的情況。如果內存泄漏的位置比較關鍵,那么隨著處理的進行可能持有越來越多的無用內存,這些無用的內存變多會引起服務器響應速度變慢,嚴重的情況下導致內存達到某個極限會使得應用程序崩潰。

[[311771]]

內存泄漏(Memory Leak)指由于疏忽或錯誤造成程序未能釋放已經不再使用的內存的情況。如果內存泄漏的位置比較關鍵,那么隨著處理的進行可能持有越來越多的無用內存,這些無用的內存變多會引起服務器響應速度變慢,嚴重的情況下導致內存達到某個極限(可能是進程的上限,如 v8 的上限;也可能是系統可提供的內存上限)會使得應用程序崩潰。

傳統的 C/C++ 中存在野指針,對象用完之后未釋放等情況導致的內存泄漏。而在使用虛擬機執行的語言中如 Java、JavaScript 由于使用了 GC (Garbage Collection,垃圾回收)機制自動釋放內存,使得程序員的精力得到的極大的解放,不用再像傳統語言那樣時刻對于內存的釋放而戰戰兢兢。

但是,即便有了 GC 機制可以自動釋放,但這并不意味這內存泄漏的問題不存在了。內存泄漏依舊是開發者們不能繞過的一個問題,今天讓我們來了解如何分析 Node.js 中的內存泄漏。

GC in Node.js

Node.js 使用 V8 作為 JavaScript 的執行引擎,所以討論 Node.js 的 GC 情況就等于在討論 V8 的 GC。在 V8 中一個對象的內存是否被釋放,是看程序中是否還有地方持有改對象的引用。

在 V8 中,每次 GC 時,是根據 root 對象 (瀏覽器環境下的 window,Node.js 環境下的 global ) 依次梳理對象的引用,如果能從 root 的引用鏈到達訪問,V8 就會將其標記為可到達對象,反之為不可到達對象。被標記為不可到達對象(即無引用的對象)后就會被 V8 回收。更多細節,可以參見 alinode 的 解讀 V8 GC。

了解上述的點之后,你就會知道,在 Node.js 中內存泄露的原因就是本該被清除的對象,被可到達對象引用以后,未被正確的清除而常駐內存。

內存泄漏的幾種情況

一、全局變量

  1. a = 10; 
  2. //未聲明對象。 
  3.  
  4. global.b = 11; 
  5. //全局變量引用 

這種比較簡單的原因,全局變量直接掛在 root 對象上,不會被清除掉。

二、閉包

  1. function out() { 
  2.   const bigData = new Buffer(100); 
  3.   inner = function () { 
  4.     void bigData; 
  5.   } 

閉包會引用到父級函數中的變量,如果閉包未釋放,就會導致內存泄漏。上面例子是 inner 直接掛在了 root 上,從而導致內存泄漏(bigData 不會釋放)。

需要注意的是,這里舉得例子只是簡單的將引用掛在全局對象上,實際的業務情況可能是掛在某個可以從 root 追溯到的對象上導致的。

三、事件監聽

Node.js 的事件監聽也可能出現的內存泄漏。例如對同一個事件重復監聽,忘記移除(removeListener),將造成內存泄漏。這種情況很容易在復用對象上添加事件時出現,所以事件重復監聽可能收到如下警告:

  1. (node:2752)Warning:PossibleEventEmitter memory leak detected。11 haha listeners added。Use emitter。setMaxListeners() to increase limit 

例如,Node.js 中 Agent 的 keepAlive 為 true 時,可能造成的內存泄漏。當 Agent keepAlive 為 true 的時候,將會復用之前使用過的 socket,如果在 socket 上添加事件監聽,忘記清除的話,因為 socket 的復用,將導致事件重復監聽從而產生內存泄漏。

原理上與前一個添加事件監聽的時候忘了清除是一樣的。在使用 Node.js 的 http 模塊時,不通過 keepAlive 復用是沒有問題的,復用了以后就會可能產生內存泄漏。所以,你需要了解添加事件監聽的對象的生命周期,并注意自行移除。

關于這個問題的實例,可以看 Github 上的 issues(node Agent keepAlive 內存泄漏)

四、其他原因

還有一些其他的情況可能會導致內存泄漏,比如緩存。在使用緩存的時候,得清楚緩存的對象的多少,如果緩存對象非常多,得做限制最大緩存數量處理。還有就是非常占用 CPU 的代碼也會導致內存泄漏,服務器在運行的時候,如果有高 CPU 的同步代碼,因為Node.js 是單線程的,所以不能處理處理請求,請求堆積導致內存占用過高。

定位內存泄漏

一、重現內存泄漏情況

想要定位內存泄漏,通常會有兩種情況:

  1. 對于只要正常使用就可以重現的內存泄漏,這是很簡單的情況只要在測試環境模擬就可以排查了。
  2. 對于偶然的內存泄漏,一般會與特殊的輸入有關系。想穩定重現這種輸入是很耗時的過程。如果不能通過代碼的日志定位到這個特殊的輸入,那么推薦去生產環境打印內存快照了。需要注意的是,打印內存快照是很耗 CPU 的操作,可能會對線上業務造成影響。

快照工具推薦使用 heapdump 用來保存內存快照,使用 devtool 來查看內存快照。使用 heapdump 保存內存快照時,只會有 Node.js 環境中的對象,不會受到干擾(如果使用 node-inspector 的話,快照中會有前端的變量干擾)。

PS:安裝 heapdump 在某些 Node.js 版本上可能出錯,建議使用 npm install heapdump -target=Node.js 版本來安裝。

二、打印內存快照

將 heapdump 引入代碼中,使用 heapdump.writeSnapshot 就可以打印內存快照了了。為了減少正常變量的干擾,可以在打印內存快照之前會調用主動釋放內存的 gc() 函數(啟動時加上 —expose-gc 參數即可開啟)。

  1. const heapdump = require('heapdump'); 
  2. ​ 
  3. const save = function () { 
  4.   gc(); 
  5.   heapdump.writeSnapshot('./' + Date.now() + '.heapsnapshot'); 

在打印線上的代碼的時候,建議按照內存增長情況來打印快照。heapdump 可以使用 kill 向程序發送信號來打印內存快照(只在 *nix 系統上提供)。

 

  1. kill -USR2 <pid> 

推薦打印 3 個內存快照,一個是內存泄漏之前的內存快照,一個是少量測試以后的內存快照,還有一個是多次測試以后的內存快照。

第一個內存快照作為對比,來查看在測試后有哪些對象增長。在內存泄漏不明顯的情況下,可以與大量測試以后的內存快照對比,這樣能更容易定位。

三、對比內存快照找出泄漏位置

通過內存快照找到數量不斷增加的對象,找到增加對象是被誰給引用,找到問題代碼,改正之后就行,具體問題具體分析,這里通過我們在工作中遇到的情況來講解。

  1. const {EventEmitter} = require('events'); 
  2. const heapdump = require('heapdump'); 
  3. ​ 
  4. global.test = new EventEmitter(); 
  5. heapdump.writeSnapshot('./' + Date.now() + '.heapsnapshot'); 
  6. ​ 
  7. function run3() { 
  8.   const innerData = new Buffer(100); 
  9.   const outClosure3 = function () { 
  10.     void innerData; 
  11.   }; 
  12.   test.on('error', () => { 
  13.     console.log('error'); 
  14.   }); 
  15.   outClosure3(); 
  16. ​ 
  17. for(let i = 0; i < 10; i++) { 
  18.   run3(); 
  19. gc(); 
  20. ​ 
  21. heapdump.writeSnapshot('./' + Date.now() + '.heapsnapshot'); 

這里是對錯誤代碼的最小重現代碼。

首先使用 node —expose-gc index.js 運行代碼,將會得到兩個內存快照,之后打開 devtool,點擊 profile,載入內存快照。打開對比,Delta 會顯示對象的變化情況,如果對象 Delta 一直增長,就很有可能是內存泄漏了。

 

如何分析 Node.js 中的內存泄漏?

 

可以看到有三處對象明顯增長的地方,閉包、上下文以及 Buffer 對象增長。點擊查看一下對象的引用情況:

 

如何分析 Node.js 中的內存泄漏?

 

其實這三處對象增長都是一個問題導致的。test 對象中的 error 監聽事件中閉包引用了 innerData 對象,導致 buffer 沒有被清除,從而導致內存泄漏。

其實這里的 error 監聽事件中沒有引用 innerData 為什么會閉包引用了 innerData 對象,這個問題很是疑惑,后來弄清是 V8 的優化問題,在文末會額外講解一下。對于對比快照找到問題,得看你對代碼的熟悉程度,還有眼力了。

如何避免內存泄漏

文中的例子基本都可以很清楚的看出內存泄漏,但是在工作中,代碼混合上業務以后就不一定能很清楚的看出內存泄漏了,還是得依靠工具來定位內存泄漏。另外下面是一些避免內存泄漏的方法。

ESLint 檢測代碼檢查非期望的全局變量。

使用閉包的時候,得知道閉包了什么對象,還有引用閉包的對象何時清除閉包。最好可以避免寫出復雜的閉包,因為復雜的閉包引起的內存泄漏,如果沒有打印內存快照的話,是很難看出來的。

綁定事件的時候,一定得在恰當的時候清除事件。在編寫一個類的時候,推薦使用 init 函數對類的事件監聽進行綁定和資源申請,然后 destroy 函數對事件和占用資源進行釋放。

額外說明

在做了很多測試以后得到下面關于閉包的總結。

  1. class Test{}; 
  2. global.test = new Test() 
  3. function run5(bigData) { 
  4.   const innerData = new Buffer(100); 
  5. ​ 
  6.   // 被閉包引用,創建一個 context: context1。 
  7.   // context1 引用 bigData,innerData。 
  8.   // closure 為 function run5() 
  9.   // run5函數沒有 context,所以 context1 沒有previous。 
  10.   // 在 run5中新建的函數將綁定上 context1。 
  11. ​ 
  12.   test.outClosure5 = function () { 
  13. ​ 
  14.     // 此函數閉包 context 指向 context1。 
  15. ​ 
  16.     void bigData; 
  17.     const closureData = new Buffer(100); 
  18. ​ 
  19.     // 被閉包使用,創建 context: context2。 
  20.     // outClosure5 函數有 context1,previous 指向 context1。 
  21.     // 在 outClosure5 中新建的函數將綁定上context2。 
  22. ​ 
  23.     test.innerClosure5 = function () { 
  24. ​ 
  25.       // 此函數閉包 context 指向 context2。 
  26. ​ 
  27.       void innerData; 
  28.     } 
  29.     test.innerClosure5_1 = function () { 
  30. ​ 
  31.       // 此函數閉包 context 指向 context2。 
  32. ​ 
  33.       void closureData; 
  34.     } 
  35.   }; 
  36.   test.outClosure5_1 = function () { 
  37. ​ 
  38.   } 
  39.   test.outClosure5(); 
  40. ​ 
  41. run5(new Buffer(1000)); 

V8 會生成一個 context 內部對象來實現閉包。下面是 V8 生成 context 的規則。

V8 會在被閉包引用變量聲明處創建一個 context2,如果被閉包的變量所在函數擁有 context1 ,則創建的 context2 的 previous指向函數 context1。在被閉包引用變量的函數內新建的函數將會綁定上 context2。

由于這個和 V8版本相關,這里只測試了 v6.2.2 和 v6.10.1 還有 v7.7.1,都是相同的情況。如果想實踐測試可以在這個 repo 上了解更多。

責任編輯:武曉燕 來源: 知乎
相關推薦

2017-03-20 13:43:51

Node.js內存泄漏

2017-03-19 16:40:28

漏洞Node.js內存泄漏

2011-09-09 14:23:13

Node.js

2021-08-09 09:54:37

內存泄漏JS 阿里云

2023-06-30 23:25:46

HTTP模塊內存

2025-01-08 08:47:44

Node.js內存泄露定時器

2025-10-15 00:26:20

2023-01-31 16:43:31

?Node.js事件循環

2021-05-27 09:00:00

Node.js開發線程

2022-09-04 15:54:10

Node.jsAPI技巧

2021-05-21 09:36:42

開發技能代碼

2024-01-05 08:49:15

Node.js異步編程

2020-04-15 15:48:03

Node.jsstream前端

2016-08-11 14:02:02

NodeJS前端

2013-11-01 09:34:56

Node.js技術

2015-03-10 10:59:18

Node.js開發指南基礎介紹

2018-10-19 07:37:07

2021-12-25 22:29:57

Node.js 微任務處理事件循環

2012-02-03 09:25:39

Node.js

2020-05-29 15:33:28

Node.js框架JavaScript
點贊
收藏

51CTO技術棧公眾號

成人av男人的天堂| 日韩漫画puputoon| 亚洲警察之高压线| 亚洲免费观看高清| 国产欧美在线观看| 国产1区2区在线观看| 四虎永久在线观看| 欧美激情偷拍| 精品久久久久久久久久久| 91传媒视频免费| 欧美丰满熟妇bbbbbb| 日韩成人一区| 国产精品毛片大码女人| 国产女人18毛片水18精品| 欧美18—19性高清hd4k| 日韩亚洲精品在线观看| 亚洲最大成人综合| 国产精品二区三区四区| 久久精品这里有| 久久综合另类图片小说| 午夜久久福利影院| 欧美精品成人一区二区在线观看 | 欧美熟妇交换久久久久久分类| 亚洲第一偷拍| 日韩三级高清在线| 777久久精品一区二区三区无码 | 亚洲深夜福利在线| 九九九在线观看视频| 成年在线观看免费人视频| 欧美人与拘性视交免费看| 一本一本大道香蕉久在线精品 | 日韩在线视频观看免费| 国内精品不卡在线| 久久久久久国产精品| 国产chinese中国hdxxxx| 1区2区在线| 久久这里只精品最新地址| 国产精品99免视看9| 91动漫免费网站| 国产精品久一| 午夜精品久久久久影视| 久久免费一级片| 天堂av资源在线| 国产aⅴ综合色| 国产99在线|中文| 免费国产羞羞网站美图| 红杏aⅴ成人免费视频| 欧美一级黄色片| www.亚洲自拍| 自拍偷拍亚洲视频| 综合自拍亚洲综合图不卡区| 国产伦精品一区二区三区免费视频| youjizz在线视频| 亚洲精品888| 久久久精品日本| 欧美一区二区三区成人精品| 亚洲一区导航| 岛国视频午夜一区免费在线观看| 日韩高清三级| 高清毛片aaaaaaaaa片| 国产精品日韩久久久| 自拍偷拍亚洲精品| 风韵丰满熟妇啪啪区老熟熟女| 成人免费直播| 伊人色综合久久天天| 免费av一区二区三区| 国产精品久久久久久久久毛片| 亚洲激情欧美| 日韩视频第一页| 精品夜夜澡人妻无码av| 免费精品一区| 欧美色老头old∨ideo| 国产在线播放观看| mm1313亚洲国产精品美女| 久久久久国产精品人| 成人高清在线观看| 婷婷综合激情网| 国产精品18久久久久久久网站| 国产精品69精品一区二区三区| 国产一级片免费在线观看| 欧美国产另类| 91精品国产乱码久久久久久蜜臀| 国产一区二区视频在线观看免费| 中文字幕一区二区精品区| 亚洲天堂av在线免费观看| 自拍偷拍你懂的| 午夜日韩视频| 日韩av免费在线看| 国产人妖在线播放| 精品无人码麻豆乱码1区2区| 97影院在线午夜| 欧美成人综合在线| 91麻豆成人久久精品二区三区| 国产成人免费电影| 国产在线自天天| 国产午夜精品一区二区三区嫩草| 精品免费日产一区一区三区免费| 隣の若妻さん波多野结衣| 久久蜜臀精品av| 国产成人免费高清视频| 成人欧美大片| 日韩免费性生活视频播放| 亚洲在线观看网站| 亚洲桃色综合影院| 欧美另类在线观看| 九九九免费视频| 欧美日韩亚洲一区二区三区在线| 日本欧美在线视频| 国产福利资源在线| 国产999精品久久久久久| 日本在线观看一区二区| aaa在线播放视频| 91麻豆精品国产91久久久久久久久| 一本色道久久亚洲综合精品蜜桃| jizz免费一区二区三区| 欧美日韩国产一二三| 亚洲免费黄色网| 国内精品视频| 在线看日韩欧美| 成人在线观看免费完整| 丝袜国产日韩另类美女| 国产精品久久久久福利| 亚洲在线精品视频| 国产精品伊人色| 国外成人免费视频| 理论视频在线| 欧美日韩国产一区二区三区| avtt中文字幕| 综合激情一区| 成人免费xxxxx在线观看| 99久久精品国产色欲| 国产日韩欧美高清| 精品久久久久久久免费人妻| 国产精品伦一区二区| 欧美一区二区视频观看视频| 日本精品一二三区| 精品一区毛片| 51久久精品夜色国产麻豆| 探花国产精品一区二区| 国产又黄又大久久| 精品免费国产| 手机av在线| 欧美日韩国产另类一区| 国产精品视频在| 日本aⅴ免费视频一区二区三区 | 日本成人手机在线| 久久视频在线直播| 日本一级黄色大片| 免费av网站大全久久| 97操在线视频| 七七成人影院| 在线看不卡av| 18深夜在线观看免费视频| 亚洲ab电影| 日av在线播放中文不卡| 国产精品视频第一页| 亚洲天堂免费在线观看视频| 欧美日韩亚洲第一| 美女精品视频在线| 欧美精品videossex性护士| 高h震动喷水双性1v1| 午夜久久久久久久久| 国产精品扒开腿做爽爽| 欧美激情五月| 国产区欧美区日韩区| 中文字幕人成乱码在线观看| 亚洲精选在线观看| 国产97免费视频| 国产成都精品91一区二区三| 福利视频一区二区三区四区| 日韩大片在线免费观看| 欧美另类极品videosbestfree| www.五月天激情| 最新成人av在线| 麻豆短视频在线观看| 国产精品久久久久久模特| 天天综合色天天综合色hd| 英国三级经典在线观看| 影音先锋欧美精品| 精品人妻午夜一区二区三区四区 | 日本熟妇人妻xxxxx| 我不卡伦不卡影院| 国产精品视频一区国模私拍| 人人妻人人玩人人澡人人爽| 日韩欧美在线一区| 欧美激情 亚洲| 欧美国产三区| 久久99久久99精品蜜柚传媒| 日本无删减在线| 欧美一区二区视频在线观看| 久久精品人妻一区二区三区| 国产日韩在线不卡| 国产av一区二区三区传媒| 三级久久三级久久久| 欧美日韩一区二区三区免费| 亚洲精品三区| 欧美在线视频播放| а√资源新版在线天堂| 亚洲人成免费电影| 国产高清在线免费| 欧美日韩在线三区| 日本少妇性高潮| 亚洲精品视频在线观看免费| 90岁老太婆乱淫| 成人晚上爱看视频| 奇米影视亚洲色图| 91欧美极品| 久久久欧美一区二区| 亚洲av无码一区二区乱子伦 | 亚洲片av在线| 亚洲精品97久久中文字幕| 欧美色窝79yyyycom| 97人人澡人人爽人人模亚洲| 91亚洲国产成人精品一区二区三| 一二三四视频社区在线| 久久精品影视| 视频一区二区在线| 欧美天堂影院| 国产精品高潮呻吟久久av无限| 男女羞羞视频在线观看| 精品国偷自产在线| 成年人在线视频| 国产视频亚洲精品| 天天干天天插天天射| 精品成人乱色一区二区| 久久精品www| 亚洲精品成人悠悠色影视| 午夜成人亚洲理伦片在线观看| 国产精品香蕉一区二区三区| 污版视频在线观看| 午夜精品网站| 综合网五月天| 欧美大胆a级| 国产精品区二区三区日本| 日本伊人久久| 3d精品h动漫啪啪一区二区| 99精品国产九九国产精品| 国产精品爽黄69天堂a| 国产经典一区| 国产久一一精品| 欧洲午夜精品| 成人av在线网址| 日韩三级一区| 91精品久久久久久久久久久久久| 成人在线免费电影网站| 国产精品视频久久久| 成人在线黄色| 国产情人节一区| 国产精品99久久免费| 亚洲一区二区三区sesese| 依依综合在线| 欧美综合一区第一页| 天天免费亚洲黑人免费| 欧美人成在线视频| 色老头在线观看| 久久久久中文字幕| 国产在线精彩视频| 麻豆国产精品va在线观看不卡| 国产在线激情| 国产亚洲一级高清| 人妻偷人精品一区二区三区| 亚洲第一中文字幕在线观看| 国产又大又黑又粗| 欧美一区二区精品| 欧美 日韩 国产 精品| 日韩精品视频观看| 亚洲av无码片一区二区三区| 亚洲成人在线网| 国内精品在线视频| 日韩专区在线观看| 久久青青色综合| 国产精品99久久99久久久二8| av在线精品| 精品欧美一区二区三区久久久| 国产精品自拍区| 国产午夜精品一区| 国产欧美久久一区二区三区| 中文字幕久精品免| 亚洲三级视频| 污视频网站观看| 成人一区二区三区中文字幕| 亚洲人成人无码网www国产| eeuss国产一区二区三区| 手机在线播放av| xnxx国产精品| 777777国产7777777| 亚洲a一区二区| 糖心vlog精品一区二区| 欧美成人激情免费网| 国产999久久久| 亚洲精品一区二区三区婷婷月 | 日韩av不卡一区| 咪咪色在线视频| www.综合| 国产欧美一区二区三区久久人妖| 亚洲va欧美va人人爽成人影院| 欧美日韩高清在线一区| 午夜天堂精品久久久久| 日本爱爱免费视频| 99久久国产综合色|国产精品| 天天躁夜夜躁狠狠是什么心态| 亚洲综合网站在线观看| 在线观看国产小视频| 日韩精品在线视频| 日本三级韩国三级欧美三级| 国产精品高精视频免费| 激情亚洲另类图片区小说区| 一区二区三区日韩视频| 天堂va蜜桃一区二区三区 | 97久久超碰国产精品| 亚洲色图27p| 日本一二三四高清不卡| 波多野结衣一二三四区| 国产精品丝袜在线| 国产精品视频123| 欧洲精品一区二区三区在线观看| 国产av一区二区三区| 国产亚洲欧洲黄色| 日韩av影片| 国产一区二区在线观看免费播放| 91精品推荐| 91福利国产成人精品播放| 久久先锋影音av| 日韩大片免费在线观看| 精品国内二区三区| 在线观看h网| 欧美激情视频三区| 在线亚洲人成| 精品国产综合久久| 亚洲精品系列| 午夜剧场免费看| 午夜电影一区二区三区| 亚洲精品一区二区三区区别| 欧美二区乱c黑人| 国产一区二区在线观| 手机看片日韩国产| 国产在线精品一区二区夜色| 污软件在线观看| 欧美一区二区成人| 日韩影视在线| 国产精品永久入口久久久| 韩国在线视频一区| 男人搞女人网站| 国产欧美日韩在线观看| 欧美黄片一区二区三区| 色婷婷av一区二区三区之一色屋| 国产精品一级二级| 草民午夜欧美限制a级福利片| 亚洲日本中文| 国产成人生活片| 成人免费视频caoporn| 日韩欧美大片在线观看| 国产丝袜精品第一页| av有声小说一区二区三区| 岛国视频一区免费观看| 亚洲国产导航| 免费观看一级一片| 在线观看亚洲专区| 日本www在线观看视频| 欧美亚洲国产精品| 一区二区三区四区在线看 | 国产一区二区三区日韩 | 亚洲激情另类| 性高潮久久久久久久| 欧美老年两性高潮| 青青免费在线视频| 欧美精品18videos性欧| 乱亲女h秽乱长久久久| 男人操女人免费| 国产精品毛片无遮挡高清| 性色av蜜臀av| 欧美一级大片在线观看| 日韩久久久久| 欧美精品成人网| 91网站最新网址| 波多野结衣视频在线看| 久久久999国产精品| 欧美偷窥清纯综合图区| 黄色手机在线视频| 亚洲国产精品视频| 性一交一乱一色一视频麻豆| 91精品国产成人www| 日韩精品欧美| 成人欧美精品一区二区| 色视频欧美一区二区三区| av在线官网| 青娱乐一区二区| 日韩在线一区二区| 欧洲第一无人区观看| 亚洲人成电影网| 成人三级av在线| 久热精品在线播放| 婷婷开心激情综合| 精品自拍一区| 蜜桃传媒视频麻豆第一区免费观看| 韩国视频一区二区| 中文人妻av久久人妻18| 国产亚洲精品一区二区| 中文字幕久久精品一区二区| 国产 欧美 日韩 一区|