亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

雙緩沖隊(duì)列異步日志系統(tǒng):高并發(fā)場景下徹底解決同步日志阻塞問題

雙緩沖隊(duì)列異步日志系統(tǒng):高并發(fā)場景下徹底解決同步日志阻塞問題 1. 先別急著一股腦寫文件同步日志為什么扛不住生產(chǎn)環(huán)境先說結(jié)論再聊細(xì)節(jié)日志系統(tǒng)最容易被低估也最容易被埋雷。很多項(xiàng)目剛開始的時(shí)候日志就是到處printf或者更“規(guī)范”一點(diǎn)接個(gè)log4j、spdlog級(jí)別的庫線上跑一跑也沒覺得有什么問題。但等流量上來高并發(fā)場景一壓第一塊倒下的往往不是業(yè)務(wù)代碼而是看似人畜無害的日志鏈路。我們做雙緩沖隊(duì)列異步日志系統(tǒng)要解決的核心痛點(diǎn)很簡單日志寫入不再阻塞業(yè)務(wù)線程。同步日志為什么會(huì)阻塞因?yàn)閣rite()到磁盤并不便宜。一個(gè)日志條目看起來只是一行字符串但這條字符串從用戶態(tài)的日志緩沖區(qū)到內(nèi)核的文件系統(tǒng)緩存再到真正的磁盤設(shè)備中間隔著至少兩道拷貝還伴隨一次系統(tǒng)調(diào)用。生產(chǎn)環(huán)境里無論是機(jī)械硬盤還是 SSD單次寫入的小 IO 都遠(yuǎn)沒有想象中的快。日志一多、高頻一寫業(yè)務(wù)線程就被迫排隊(duì)等磁盤。我舉個(gè)真實(shí)場景某線上服務(wù)需要記錄每次請(qǐng)求的完整參數(shù)和響應(yīng)體單個(gè)請(qǐng)求撐死幾十行日志但 QPS 上了幾千之后同步日志的磁盤寫壓力瞬間拉滿接口平均耗時(shí)從 2ms 漲到了 40ms最夸張的時(shí)候業(yè)務(wù)線程被日志卡的連心跳包都發(fā)不出去。后來把策略改成“攢一批再寫”問題才算緩解。這就是異步日志的核心思路把日志寫入從業(yè)務(wù)線程上搬走交給專門的線程去處理。業(yè)務(wù)線程只負(fù)責(zé)把日志內(nèi)容往內(nèi)存里一放就返回磁盤寫入由后臺(tái)線程異步完成。聽起來簡單但實(shí)現(xiàn)上有很多講究尤其是“怎么把日志內(nèi)容安全高效地交到后臺(tái)線程”這一步選型不同效果天差地別。雙緩沖隊(duì)列就是這條鏈路里比較經(jīng)典、也比較容易理解的一種實(shí)現(xiàn)方案。如果你現(xiàn)在正被“日志寫入拖慢接口”“日志一多系統(tǒng)就卡頓”“日志模塊與業(yè)務(wù)模塊共用鎖導(dǎo)致死等”這些問題困擾這篇文章適合你。我會(huì)從設(shè)計(jì)思路講到接口封裝再到部署使用把雙緩沖日志系統(tǒng)的“上半場”講透。2. 雙緩沖隊(duì)列的工作機(jī)制把“寫日志”和“寫磁盤”拆開2.1 兩段式緩沖一個(gè)正寫一個(gè)在刷雙緩沖隊(duì)列這個(gè)名字關(guān)鍵在于“雙”和“隊(duì)列”?!熬彌_”比較好理解就是一塊預(yù)先分配好的內(nèi)存。日志內(nèi)容先落在這塊內(nèi)存里攢多了再一次性寫入磁盤。為什么要攢因?yàn)橐淮蝫rite()寫入 1MB 數(shù)據(jù)和分 1 萬次每次寫 100 字節(jié)兩者的 IO 效率完全是兩個(gè)量級(jí)。批量寫不僅能大大減少系統(tǒng)調(diào)用的次數(shù)還能讓磁盤的寫模式更規(guī)整性能提升非常明顯?!半p緩沖”指的是這塊預(yù)分配內(nèi)存有兩份。一份被業(yè)務(wù)線程用來寫入日志稱為“待寫緩沖區(qū)”或“當(dāng)前緩沖區(qū)”另一份被后臺(tái)線程用來讀取并刷入磁盤稱為“待刷緩沖區(qū)”。當(dāng)“當(dāng)前緩沖區(qū)”寫滿了或者到了固定時(shí)間系統(tǒng)會(huì)執(zhí)行一次緩沖區(qū)交換swap把業(yè)務(wù)線程寫滿的這塊換成后臺(tái)線程手里的那塊。交換之后業(yè)務(wù)線程繼續(xù)往新?lián)Q來的空緩沖區(qū)里寫后臺(tái)線程則拿著裝滿日志的緩沖區(qū)去刷磁盤。圖景大概是這樣業(yè)務(wù)線程 后臺(tái)線程 | | | 寫入Buffer A | |-------------| | Buffer A滿 | | 交換 | |-------------| | 寫入Buffer B | | | 刷Buffer A到磁盤 | |------------- Disk簡化成文字描述就是業(yè)務(wù)線程永遠(yuǎn)只面對(duì)一塊“可以寫”的內(nèi)存寫完一塊就換一塊完全不碰磁盤 IO。后臺(tái)線程永遠(yuǎn)只面對(duì)一塊“已經(jīng)寫滿”的內(nèi)存刷完一塊就換一塊完全不阻塞業(yè)務(wù)線程。兩者之間只有一次極短的交換操作需要同步。2.2 為什么是“雙”緩沖而不是單緩沖或多緩沖單緩沖的方案看起來也能用一塊緩沖區(qū)寫滿了就刷盤刷盤期間業(yè)務(wù)線程等著。但問題在于“寫滿后刷盤”這個(gè)動(dòng)作是阻塞的而且刷盤耗時(shí)不定。一旦磁盤繁忙業(yè)務(wù)線程就卡住了和同步日志沒有本質(zhì)區(qū)別只是把fprintf換成了memcpy仍然治標(biāo)不治本。多緩沖方案呢理論上可以準(zhǔn)備 N 塊緩沖區(qū)寫滿一塊就換下一塊后臺(tái)線程依次刷。這能進(jìn)一步降低交換頻率內(nèi)存占用也更高。但在大部分場景下兩塊緩沖區(qū)已經(jīng)足夠只要后臺(tái)線程刷盤的平均速度大于業(yè)務(wù)線程寫入的平均速度兩塊就能循環(huán)起來。如果后臺(tái)線程的消費(fèi)速度跟不上說明系統(tǒng)已經(jīng)到了日志量過載的狀態(tài)即使準(zhǔn)備更多緩沖區(qū)也只是延緩問題并不能消除問題。這里有個(gè)很多人會(huì)忽略的點(diǎn)雙緩沖系統(tǒng)里的交換是“一次性”完成的。生產(chǎn)線程與消費(fèi)線程之間只共享一個(gè)狀態(tài)指針一次 swap 操作只需要幾納秒到幾十納秒的臨界區(qū)保護(hù)。對(duì)比直接用std::queue存日志的逐條入隊(duì)方案雙緩沖避免了高頻的鎖競爭把鎖的粒度從“每條日志”降到了“每批日志”這是它能扛高吞吐的根本原因。另外雙緩沖天然支持延遲刷新。很多時(shí)候日志峰值只出現(xiàn)在一秒內(nèi)的某幾百毫秒中其他時(shí)間業(yè)務(wù)線程并不忙。如果每寫一條就通知后臺(tái)線程來取線程喚醒、上下文切換的成本反而會(huì)拖垮性能。雙緩沖方案可以設(shè)定“緩沖區(qū)未滿就定時(shí)刷”比如每 1 秒強(qiáng)制交換一次保證日志延遲可控且不會(huì)出現(xiàn)長時(shí)間無輸出。2.3 雙緩沖的兩個(gè)隱藏風(fēng)險(xiǎn)設(shè)計(jì)時(shí)繞不開第一個(gè)風(fēng)險(xiǎn)是日志丟失。異步意味著業(yè)務(wù)線程返回時(shí)日志還沒落盤如果此時(shí)進(jìn)程崩潰或者被kill -9最后一段還在內(nèi)存里的日志就沒了。這個(gè)問題沒法完全規(guī)避只能降低損失。常見做法是后臺(tái)線程定期刷盤并且支持外部顯式調(diào)用Flush()在需要保命的關(guān)鍵節(jié)點(diǎn)比如服務(wù)收到終止信號(hào)后強(qiáng)制把所有緩沖數(shù)據(jù)落盤。第二個(gè)風(fēng)險(xiǎn)是背壓問題。如果日志生產(chǎn)速度長期超過消費(fèi)速度緩沖區(qū)很快會(huì)處于“寫滿-交換-刷盤-再寫滿”的循環(huán)表現(xiàn)為磁盤持續(xù)高負(fù)載系統(tǒng)整體性能下降。此時(shí)不能無限等下去常見策略是當(dāng)兩緩沖都占滿且后臺(tái)線程來不及刷時(shí)要么直接丟棄未來日志并按計(jì)數(shù)報(bào)錯(cuò)要么將當(dāng)前緩沖區(qū)擴(kuò)容一擋臨時(shí)救急。我一般推薦前者因?yàn)槿罩玖窟^載時(shí)保留完整性的優(yōu)先級(jí)低于保證業(yè)務(wù)可用性而且丟失提示本身也是重要日志。3. 核心接口設(shè)計(jì)Buffer、隊(duì)列交換與 AsyncLogger設(shè)計(jì)雙緩沖日志系統(tǒng)時(shí)最重要的是把三個(gè)角色拆清楚Buffer負(fù)責(zé)存儲(chǔ)字節(jié)流BufferQueue負(fù)責(zé)管理兩個(gè) Buffer 的交換與調(diào)度AsyncLogger負(fù)責(zé)向上層業(yè)務(wù)提供日志寫入 API同時(shí)管理后臺(tái)線程的生命周期。3.1 Buffer 的核心字段與內(nèi)存使用Buffer本質(zhì)是一塊預(yù)分配內(nèi)存加上讀寫游標(biāo)。我常用的定義大概是class Buffer { public: explicit Buffer(size_t capacity) { data_.reserve(capacity); } void Append(const char* log, size_t len) { if (len WritableBytes()) { return; // 或觸發(fā)擴(kuò)容 / 丟棄策略 } data_.insert(data_.end(), log, log len); } void Reset() { data_.clear(); } bool Empty() { return data_.empty(); } size_t WritableBytes() { return data_.capacity() - data_.size(); } const char* Data() { return data_.data(); } size_t Size() { return data_.size(); } private: std::vectorchar data_; };注意這里我用的是std::vector而不是裸指針加char[]。生產(chǎn)級(jí)日志系統(tǒng)對(duì)性能苛刻通常會(huì)直接用預(yù)分配的char[]配合size_t游標(biāo)甚至用mmap映射文件。但std::vector足夠滿足絕大多數(shù)業(yè)務(wù)系統(tǒng)的日志壓力而且內(nèi)存管理更安全。真正要緊的是讓 Buffer 的容量在初始化時(shí)一次定好盡量避免運(yùn)行期擴(kuò)容——擴(kuò)容可能觸發(fā)內(nèi)存搬移而且擴(kuò)容期間的操作會(huì)引入額外的不確定性。Buffer 容量取多大這個(gè)沒有標(biāo)準(zhǔn)答案。我個(gè)人的經(jīng)驗(yàn)值是單條日志平均長度按 256 字節(jié)估如果 QPS 峰值為 1 萬每秒日志量約為 2.5MB那么每塊 Buffer 設(shè)為 8MB 左右比較合適兩塊就是 16MB。日志量小的服務(wù)4MB 也已經(jīng)足夠了。內(nèi)存是便宜的資源不必太摳但也不要拍腦袋選個(gè) 1GB —— 那會(huì)讓緩存的優(yōu)勢變成內(nèi)存的壓力。3.2 BufferQueue 的交換邏輯BufferQueue是雙緩沖結(jié)構(gòu)的中樞。它內(nèi)部維護(hù)兩個(gè) Buffer 指針并在合適的時(shí)機(jī)執(zhí)行交換。class BufferQueue { public: explicit BufferQueue(size_t buffer_capacity) : buffer_capacity_(buffer_capacity), current_(new Buffer(buffer_capacity)), next_(new Buffer(buffer_capacity)) {} void Append(const char* data, size_t len) { std::lock_guardstd::mutex lock(mutex_); if (current_-WritableBytes() len) { Swap(); } current_-Append(data, len); } std::shared_ptrBuffer TakeForFlush() { std::lock_guardstd::mutex lock(mutex_); if (current_-Empty() next_-Empty()) { return nullptr; } Swap(); return std::shared_ptrBuffer swap_result_; } private: void Swap() { std::swap(current_, next_); // 這里同時(shí)喚醒消費(fèi)線程 } size_t buffer_capacity_; std::unique_ptrBuffer current_; std::unique_ptrBuffer next_; std::mutex mutex_; std::condition_variable cond_; };這段邏輯里有幾個(gè)微妙的地方第一Append時(shí)發(fā)現(xiàn)當(dāng)前緩沖區(qū)寫不下一條日志立刻交換然后把日志寫到新緩沖區(qū)上。這意味著next_可能已經(jīng)在積累數(shù)據(jù)了交換前它會(huì)被重置。這里有一個(gè)取舍如果next_里還有沒來得及被后臺(tái)線程刷盤的數(shù)據(jù)交換會(huì)造成日志順序錯(cuò)亂或數(shù)據(jù)覆蓋。所以更嚴(yán)謹(jǐn)?shù)膶懛ㄊ钱?dāng)Append時(shí)current_寫不下且next_非空即后臺(tái)線程還沒取走過要介入“等待消費(fèi)線程完成一次 flush”的流程。我在實(shí)現(xiàn)時(shí)通過條件變量控制保證交換發(fā)生時(shí)next_一定是已經(jīng)刷完的空 Buffer。第二條件變量的喚醒時(shí)機(jī)。最直接的邏輯是Swap()之后立刻喚醒后臺(tái)線程。但如果每次Append都喚醒日志量一高線程頻繁被喚醒上下文切換成本就上去了。我的做法是只有滿足“當(dāng)前緩沖區(qū)由空變?yōu)榉强铡被颉敖粨Q發(fā)生時(shí)next_中有數(shù)據(jù)”這兩個(gè)條件才喚醒。這能把線程喚醒次數(shù)與日志寫入頻率解耦后臺(tái)線程還可以配合定時(shí)策略每 100ms 檢查一次。3.3 AsyncLogger 的對(duì)外接口設(shè)計(jì)對(duì)外接口是我的原則是極簡。業(yè)務(wù)方不需要理解雙緩沖內(nèi)部機(jī)制他們只需要“初始化、寫日志、關(guān)閉”這三個(gè)動(dòng)作。class AsyncLogger { public: static AsyncLogger* Instance(); bool Init(const LogConfig config); void Write(LogLevel level, const char* fmt, ...); void Flush(); void Shutdown(); private: AsyncLogger(); ~AsyncLogger(); void WriteToBuffer(const char* line, size_t len); void FlushThread(); std::unique_ptrBufferQueue queue_; std::thread background_thread_; std::atomicbool running_{false}; LogLevel level_{LOG_INFO}; };Init()初始化配置啟動(dòng)后臺(tái)線程Write()格式化日志寫入 BufferQueue返回即代表日志“已受理”Flush()強(qiáng)制刷新緩沖區(qū)用于關(guān)鍵節(jié)點(diǎn)Shutdown()停止后臺(tái)線程刷完所有遺留數(shù)據(jù)安全退出Write()為什么設(shè)計(jì)成可變參數(shù)因?yàn)槲蚁M罩菊{(diào)用點(diǎn)在形式上盡可能接近原生的printf。業(yè)務(wù)側(cè)配合宏定義使用體驗(yàn)上就像寫printf一樣自然#define LOG_DEBUG(...) AsyncLogger::Instance()-Write(LOG_DEBUG, __VA_ARGS__) #define LOG_INFO(...) AsyncLogger::Instance()-Write(LOG_INFO, __VA_ARGS__) #define LOG_ERROR(...) AsyncLogger::Instance()-Write(LOG_ERROR, __VA_ARGS__)在Write()內(nèi)部格式化日志用vsnprintf完成這是一個(gè)常見的性能熱區(qū)。vsnprintf本身不慢但如果每條日志都調(diào)用在超高并發(fā)場景下仍會(huì)占用大量 CPU。優(yōu)化的思路是把格式化拆成兩步先在生產(chǎn)線程上完成字符串拼接雙緩沖只負(fù)責(zé)搬運(yùn)已經(jīng)成型的字節(jié)流。后臺(tái)線程不能再做格式化否則格式化開銷就從業(yè)務(wù)線轉(zhuǎn)移到了后臺(tái)很快會(huì)成為新的瓶頸。4. 部署與使用指南從配置到線上切換的完整流程4.1 配置項(xiàng)的選擇與建議初始化日志系統(tǒng)時(shí)我給LogConfig設(shè)計(jì)了四個(gè)最關(guān)鍵的配置項(xiàng)日志文件路徑前綴、單塊緩沖區(qū)大小、日志級(jí)別、刷新間隔。配置項(xiàng)推薦值說明base_filename日志目錄 文件名前綴例如/var/log/app/server_buffer_capacity4MB ~ 16MB根據(jù) QPS 估算內(nèi)存緊張可降到 1MBlog_levelLOG_INFO或LOG_WARN生產(chǎn)環(huán)境不建議開 DEBUGflush_interval100ms ~ 1000ms越小日志越實(shí)時(shí)但刷盤越頻繁這里的核心原則是緩沖容量不是越大越好刷新間隔也不是越小越好。容量太大內(nèi)存里堆積的日志變多一旦崩潰丟的就多刷新間隔太小疊加的批量寫效果被削弱。線上我常用的組合是8MB 緩沖區(qū)、200ms 刷新間隔、LOG_INFO級(jí)別。這個(gè)組合在各種服務(wù)上表現(xiàn)都比較均衡。文件切分也建議在設(shè)計(jì)時(shí)就考慮進(jìn)去。日志系統(tǒng)跑久了單個(gè)日志文件無限增長是災(zāi)難。我通常會(huì)再提供兩個(gè)參數(shù)max_file_size和max_file_count。當(dāng)單文件超過max_file_size寫入切換到下一個(gè)文件當(dāng)文件數(shù)量超過max_file_count刪除最老的文件。這樣磁盤占用能被嚴(yán)格限制在可控范圍內(nèi)。4.2 初始化到寫日志的代碼示例以一個(gè)典型服務(wù)的主程序?yàn)槔齣nt main() { LogConfig cfg; cfg.base_filename /var/log/app/order_; cfg.buffer_capacity 8 * 1024 * 1024; // 8MB cfg.log_level LogLevel::LOG_INFO; cfg.flush_interval_ms 200; cfg.max_file_size 512 * 1024 * 1024; // 512MB滾動(dòng) cfg.max_file_count 10; if (!AsyncLogger::Instance()-Init(cfg)) { std::cerr init logger failed std::endl; return 1; } LOG_INFO(server started, enabled modules: %s, core,order,pay); // 業(yè)務(wù)邏輯... LOG_DEBUG(request%s, response%s, req_str, resp_str); // 程序退出前 AsyncLogger::Instance()-Shutdown(); return 0; }注意Shutdown()之間的業(yè)務(wù)邏輯如果存在長期運(yùn)行的線程日志系統(tǒng)必須是線程安全的。我在Write()內(nèi)部用了BufferQueue::Append()上的鎖所以多線程寫日志不會(huì)互相干擾。對(duì)于日志順序要求很高的場景順序僅由鎖獲取的順序決定——大多數(shù)業(yè)務(wù)場景不需要關(guān)心這一點(diǎn)。有個(gè)體驗(yàn)上的細(xì)節(jié)日志文件里的時(shí)間戳格式。建議輸出格式帶上精確到毫秒的時(shí)間戳、線程 ID 和日志級(jí)別。后臺(tái)服務(wù)排查問題特別是偶發(fā)問題缺少線程 ID 會(huì)讓上下文追蹤變得非常痛苦。格式類似2025-01-18 14:23:45.678 [12345] INFO request accepted, traceabc1234.3 進(jìn)程優(yōu)雅退出時(shí)的日志處理進(jìn)程退出時(shí)的日志處理是最容易被忽略的坑。如果直接調(diào)用exit()后臺(tái)線程可能才格式化完一半日志進(jìn)程就沒了。正確順序是通知所有業(yè)務(wù)線程不再寫日志或至少保證寫日志操作已經(jīng)返回調(diào)用Shutdown()在Shutdown()內(nèi)部停止后臺(tái)刷新線程并把隊(duì)列里剩余的所有 Buffer 全部刷盤最后進(jìn)程退出為什么必須在Shutdown()里“清空所有 Buffer”因?yàn)槊r(shí)可能有兩個(gè)非空 Buffer一個(gè)是正在寫入還沒滿的一個(gè)是交換后還沒被后臺(tái)線程取走的。如果只刷了當(dāng)前移交的那個(gè) Buffer另一個(gè)殘留的數(shù)據(jù)就丟了。測試中就很容易出現(xiàn)一種情況平時(shí)日志正常但進(jìn)程退出瞬間最后幾十條日志神秘失蹤根源就在這里。4.4 信號(hào)處理與崩潰保底線上服務(wù)被kill是常事。比如SIGTERM時(shí)一般會(huì)希望優(yōu)雅退出。我的做法是注冊(cè)了信號(hào)處理器在捕捉到SIGTERM和SIGINT后調(diào)用Shutdown()再退出。但對(duì)于SIGKILL和段錯(cuò)誤SIGSEGV進(jìn)程瞬間死亡任何代碼都來不及執(zhí)行此時(shí)只能依賴“日志文件最近一次 flush 之后的內(nèi)容未丟失”這一保證。有個(gè)小技巧可以降低崩潰恢復(fù)的代價(jià)日志系統(tǒng)的后臺(tái)線程每次寫完一個(gè) Buffer就執(zhí)行一次fdatasync()或者至少是flush()而不是等到文件關(guān)閉時(shí)再刷。這樣崩潰后最多丟失的就是上一次 flush 之后的數(shù)據(jù)。代價(jià)是磁盤 IO 頻率上升但換來的是日志可靠性。5. 高頻日志場景下最容易踩的坑和調(diào)優(yōu)路徑5.1 問題一日志大量丟失而且丟得沒有規(guī)律很多第一次用異步日志的團(tuán)隊(duì)上線后發(fā)現(xiàn)日志有缺口第一個(gè)懷疑是磁盤 IO 不夠但實(shí)際上經(jīng)常是Buffer 容量太小 生產(chǎn)速度大于消費(fèi)速度的組合。排查思路在Append()里加一個(gè)丟棄計(jì)數(shù)當(dāng)出現(xiàn)“當(dāng)前緩沖區(qū)寫不下且next_也沒法交換”的情況時(shí)直接丟棄該條日志并累計(jì)計(jì)數(shù)。日志系統(tǒng)可以每秒打印一次這個(gè)計(jì)數(shù)到標(biāo)準(zhǔn)輸出或單獨(dú)的文件。如果丟包率持續(xù)增長說明日志量與 Buffer 容量不匹配。調(diào)優(yōu)手段有兩個(gè)方向增大單塊 Buffer 容量讓攢批的窗口更長增加后臺(tái)刷新線程數(shù)量或提高刷新頻率注意方向 2 有一個(gè)副作用線程數(shù)量增加意味著刷新更頻繁可能削弱批量寫效果。我個(gè)人的經(jīng)驗(yàn)是先嘗試把刷新間隔從 200ms 調(diào)整到 100ms如果還不夠再考慮擴(kuò)容 Buffer一般不推薦加第二個(gè)后臺(tái)線程除非數(shù)據(jù)量真的到了單線程刷盤上限。5.2 問題二雙緩沖交換時(shí)鎖競爭激烈日志線程本身成為瓶頸業(yè)務(wù)線程在調(diào)用Write()時(shí)最終都會(huì)進(jìn)入BufferQueue::Append()。當(dāng)日志量大時(shí)這把鎖就成了高頻熱點(diǎn)。雖然我的設(shè)計(jì)里鎖只保護(hù)了一次 append 加一次可能的 swap但 QPS 極高的服務(wù)依然能把這把鎖的競爭壓力拉滿。應(yīng)對(duì)辦法有幾個(gè)按性價(jià)比排序用更精細(xì)的鎖替代std::mutex比如std::shared_mutex在日志量極高時(shí)寫鎖其實(shí)不多只在交換的時(shí)候大部分是讀鎖。每個(gè)業(yè)務(wù)線程獨(dú)立的小 Buffer先寫入線程本地緩沖積攢到一定閾值再合并到主雙緩沖隊(duì)列。這個(gè)方案稍微復(fù)雜但能大幅降低鎖競爭。接受現(xiàn)狀只把日志級(jí)別開關(guān)在生產(chǎn)環(huán)境關(guān)掉80% 的日志量來自 DEBUG生產(chǎn)環(huán)境把級(jí)別調(diào)到 INFO 以上絕大部分性能問題自然消失我推薦從第 3 步開始。很多團(tuán)隊(duì)上線時(shí)忘了關(guān) DEBUG日志量爆炸式增長最后怪異步日志系統(tǒng)不行。實(shí)際上把 DEBUG 一關(guān)系統(tǒng)壓力立減 80%。5.3 問題三日志內(nèi)容里包含二進(jìn)制、亂碼或超長行日志系統(tǒng)最常見的使用誤區(qū)是把任意二進(jìn)制數(shù)據(jù)塞進(jìn)日志文本。比如記錄網(wǎng)絡(luò)上報(bào)文的原始字節(jié)或者記錄一個(gè)包含\n的字符串。這些數(shù)據(jù)會(huì)導(dǎo)致日志文件結(jié)構(gòu)被破壞后續(xù)按行解析時(shí)自然錯(cuò)亂。我的做法是在Write()時(shí)對(duì)非打印字符做轉(zhuǎn)義處理。尤其注意\n、\r、\0這幾個(gè)字符轉(zhuǎn)成\\n、\\r之類的可見文本。如果業(yè)務(wù)確實(shí)需要記錄完整的二進(jìn)制 dump建議單獨(dú)設(shè)計(jì)一個(gè)WriteBinary()接口走十六進(jìn)制編碼再寫文本日志而不是硬塞。另外設(shè)置單條日志的最大長度。通常一條日志超過 4KB 就已經(jīng)很夸張了遇到超長內(nèi)容寧可截?cái)嘁膊荒苋嗡鼡伪?Buffer。vsnprintf本身就支持傳入長度上限超出部分返回的長度大于實(shí)際寫入長度你可以據(jù)此判斷是否發(fā)生截?cái)嗖⒀a(bǔ)一個(gè)“日志超長截?cái)唷钡臉?biāo)記。5.4 問題四日志線程退出時(shí)隊(duì)列里還有數(shù)據(jù)沒來得及寫這個(gè)問題在“4.3 進(jìn)程優(yōu)雅退出”里提過。但還有一種特殊情況后臺(tái)線程在刷最后一個(gè) Buffer 時(shí)業(yè)務(wù)線程仍然在搶鎖寫日志兩者互相等待甚至死鎖。我處理的辦法是Shutdown()先把running_原子變量置為false這樣業(yè)務(wù)線程再調(diào)用Write()時(shí)直接放棄寫入并返回。接著后臺(tái)線程拿到隊(duì)列鎖把剩下的 Buffer 全部刷盤。這樣保證了退出路徑上沒有新的數(shù)據(jù)生成也不會(huì)卡住主程序。5.5 性能數(shù)據(jù)參考與容量估算在常見的高配服務(wù)器上普通 SSD 磁盤雙緩沖異步日志能實(shí)現(xiàn)百萬級(jí)日志行每秒的寫入能力。更保守地講和同步日志相比任何一條fprintf直接落盤的方案切換到雙緩沖異步方案后日志側(cè)性能都能提升一到兩個(gè)數(shù)量級(jí)。給一個(gè)我實(shí)際線上服務(wù)的配置參考業(yè)務(wù)HTTP 網(wǎng)關(guān)高峰期 QPS 1.2 萬每請(qǐng)求約產(chǎn)生 8 條日志日志寫入峰值約 10 萬條/秒文本量約 30~40 MB/s配置雙緩沖各 16MB刷新間隔 100ms日志等級(jí) INFO實(shí)測結(jié)果業(yè)務(wù)接口 P99 耗時(shí)波動(dòng)小于 1ms日志線程 CPU 占用約 12%這組數(shù)據(jù)可以當(dāng)作一個(gè)估算基線如果你們的日志量是這個(gè)規(guī)模的 5 到 10 倍就該考慮引入多級(jí)緩沖或者直接上專業(yè)的日志采集框架了。5.6 快速故障排查表現(xiàn)象可能原因排查手段日志文件出現(xiàn)缺口Buffer 容量不足 / 刷新線程未跟上檢查丟棄計(jì)數(shù)擴(kuò)容 Buffer 或調(diào)短刷新間隔日志線程 CPU 過高格式化在后臺(tái)線程執(zhí)行 / 鎖競爭嚴(yán)重確保格式化在生產(chǎn)線程完成關(guān) DEBUG 日志日志亂碼或錯(cuò)行二進(jìn)制數(shù)據(jù)未轉(zhuǎn)義在 Write() 中加入轉(zhuǎn)義邏輯限制單條長度退出時(shí)最后日志丟失Shutdown 未清空剩余 Buffer檢查 Shutdown 實(shí)現(xiàn)確保刷完所有 Buffer日志按小時(shí)延遲刷新間隔過大 / 文件緩存未刷調(diào)小 flush_interval 或加入定時(shí) flush6. 用了一段時(shí)間之后的幾點(diǎn)體會(huì)雙緩沖日志系統(tǒng)已經(jīng)在我們這邊服務(wù)里平穩(wěn)跑了挺長時(shí)間最大的感受是“日志”和“業(yè)務(wù)”終于不再互相牽扯。以前同步日志時(shí)代每次線上問題排查都要祈禱日志別把系統(tǒng)拖慢切到異步之后日志只是安靜地把該記的記下來業(yè)務(wù)線程完全不用關(guān)心磁盤的脾氣。如果只看設(shè)計(jì)雙緩沖方案的代碼量并不大核心邏輯可能兩三百行就能寫完。但真正值錢的不是代碼而是對(duì)邊角情況的處理。比如交換時(shí) Buffer 的狀態(tài)判斷、Shutdown 時(shí)清理隊(duì)列的邏輯、超長日志的截?cái)嗯c轉(zhuǎn)義這些細(xì)節(jié)決定了系統(tǒng)在線上是否可靠。文檔里不會(huì)告訴你這些坑只有實(shí)際踩過才知道。還有一點(diǎn)個(gè)人建議日志系統(tǒng)的代碼最好保持簡單、可讀、少依賴。它不像業(yè)務(wù)模塊那樣圍繞架構(gòu)演進(jìn)穩(wěn)定和可靠永遠(yuǎn)排在第一位。就算將來要升級(jí)也盡量在現(xiàn)有接口上做增量改動(dòng)而不是推倒重來。下一篇文章我會(huì)把雙緩沖隊(duì)列日志系統(tǒng)的完整實(shí)現(xiàn)代碼展開講包括后臺(tái)線程的調(diào)度細(xì)節(jié)、文件滾動(dòng)策略的具體寫法以及如何把日志量級(jí)擴(kuò)展到更高。如果你現(xiàn)在遇到日志性能上的問題建議先按這篇文章的設(shè)計(jì)思路把手里的同步日志替換成異步雙緩沖版親身體會(huì)一下“日志不再拖后腿”的差別。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美黄色大香蕉一区二区| 一区二区你上我| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 91 综合网| 综合 亚洲 欧美| 尤物一级在线免费观看| 有码人妻系列| 婷婷丁香五月激情啪啪| 东京热视频网| 日本熟女中文字幕一区| 97欧美色综合| 日韩一级二级三级| 久草精品国产蜜臀| 日韩久草| 欧美黄色片在线播放| 啊啊啊操一区| 嗯……啊…嗯嗯…啊…好舒服| 大香蕉综合网| AV天天在线观看| 国产精品香蕉热久久新品| 亚洲图片欧美91N| 自拍欧美| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 五月天大香蕉| 国产馆极品诱惑| 密臀成人视频久久久| 青娱乐淫乱1314| 精品伊人久久久大香线蕉小说| 99丝袜福利在线播放| 大香蕉92| 亚洲少妇中文字幕网址| 亚洲91网。| 日产操逼| 久久久久久久久久久97| 中文字幕丝袜| 黄色av一区二区在线| www.acm成人黄色毛片| 老熟女乱伦一区| 色香阁在线| 黑人在线91| 91精品91久久久中77777| 亚洲人综合| www.久久最新地址| 熟女露脸激情自拍视频| 91三级理论片播放器| 99日免费视频中文字幕| 狠狠做深爱婷婷久久二区| 亚洲女人毛茸茸91| 日韩国产十八禁| AV污污污污| 风月影院男女十八禁| 97精品在线视频| 美女诱惑久久| 偷看洗澡一二三区美女| 久久久久9999妇女| 亚洲毛片基地专区| 干美女人妻| 欧美精品成人在线播放| 久久九九网| 啪啪91| 999狠狠综合| 97色涩| 人人干黄色| 可以免费观看的AV| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 亚洲区限制级| 免费亚洲国产精品久久一区| 欧美性爱一区二区三区四区| 天天日天天舔东京热 | 三级片大波波| 熟女AV一区| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 狠狠干2020| 欧美精品双插| 九九九成人| 91九色丰满高潮| 亚州精品人妻一二三区| 精品人妻丰满熟妇一区二区三| 久久久555| 欧美姓爱综合网| 亚洲无无码αⅴ每日更新| 亚洲 欧美 偷拍 唯美| 欧美区亚洲区偷拍区| 国产性爱乱伦AV| 五月丁香网站| 超碰人妻久久人妻中文97| 偷拍亚洲视频一区二区三区四区| 久久天堂| 首页中文字幕中文字幕免费| 国产后入精品| 日本精品性生活久久久| 久久久涩| 免费啪啪啪网站18岁| 九九久久久九九| 欧美春色| 夜夜嗨一区二区| 嫩草 人人网精品| 中文久久久| 国产懂色精品国产av| 国产AV天美| 国产激情在线| 五月天婷婷色色| 三级网站超变态精品| 九九热三级片| 国产无套粉嫩白浆在| 三上制服丝AV| 日韩精品人妻一区二区| 两性色网| 国产精品熟妇一区二区三| 欧美在线啊啊| 国产自偷自拍一区| 亚州精品人妻一二三区| 91校园春色长篇| 风韵犹存大大大大香蕉| 日本一本道A级黄色毛片试看60分钟| 亚洲熟女综合| 欧美性爱日韩高清| 天色综合网| 第四色奇米影视777| 日韩操呦呦影院在线观看| 另类亚洲一区二区三区| 99999久久久久9国产精品| 妇女性内射冈站HDWWWCOM| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 青青草色情网站视频| 日韩在线性爱免费视频| 少妇色欲综合网2| 狠狠五月天| 欧美亚洲国产91在线| 99蜜桃臀久久久欧美精品网站| 亚洲性爱电影| 美女黄色91| 综合久久欧美| 草草影院最新网址| 999熟女精品| 国产性感骚丝袜在线| 九九九九热| 91五月天| 91chinese在线| 97操97干| 亚洲aw毛茸茸在线| 久久婷五月天| 精品女同一区| 26uuu久久| 嫩草 人人网精品| 久久色人体| 亚洲欧美国产中文视频| 97 国产精品| 区一在线观看| 女色视频社区| 日本福利社| 欧美黄片欧美黄片xxx| 亚洲av噜噜噜噜噜噜| 99久在线精品99re8| 乱欲性色| 性色avv| 日本www操操操| 91丝袜视频在线观看| 欧亚日本情色| 亚洲精品国产精品乱码不卡| 天天综合香 ld视频| 看日韩美女二区三区免费操逼视频| 综合网欧美| 精品欧美乱码久| 久久久久921| 午夜福利在线合集| 超碰偷拍| 国产乱码久久久久久| 综合97久久| 亚洲中文字幕av | 日韩电影在线观看网址| 欧美性第1页| 国产精品午夜福利视频| 成人情色综合网| 四虎在线观看网站| 99热线麻豆| 欧美在线第五页| www.人人cao| 色色色欧美| 综合久草| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 五月天伊人网| 一区二区三区不卡视频| 免费观看网黄| 国产自产自拍| 成人资源中文字幕在线观看天天| 天天干天天日天天射黄色片| 精品无码一二三四区| 一区二区播放| 中国AAAAAA黄色片| 在线观看综合精品亚洲| 色色综合网站| 玖玖97综合| 性欧美| 天天干天天操天天操夜夜操天天操| 免费视频a级毛片免费视频| 激情专区综合| 一区二区影视| 蜜桃无码AV一区二区| 大香交| 精品69网| 伊人五月天| 美女诱惑爱爱| 天天舔日美女视频| 色五月激情综合网| 亚洲精品久久一区二区三区蜜桃臀| 天天做天天爱天天高潮| 2017天天插| 亚洲av青草久久一区二区| 久久久国产三级黄色片| 欧美精品成人亚洲| 久久久久久九九九九九| 精品无人区麻豆乱码久久久| 日韩精品一二三| 多乙久久久久久| 懂色AV一区二区三区| 黑人操一区二区| 亚洲中文字幕在线视频一区二区| 欧美日综合| 日韩中文字幕国产| 欧美少妇性乱| 五月天人妻综合| 国语av狠狠色丁香婷婷综合激情| 国产一级αv免费看片| 91超级碰碰| 永久免费观看的毛片的网站| 青青草原成人| yw尤物av无码点击进入麻豆| 神马久久久久久久久久久久| 国产三区免费在线观看| 亚洲一区亚洲天堂| 激情综合网激情综合| 久草大| 双插在线| 国产毛片毛片4p懂色| 床戏久久久av一区二区麻豆| 国产黄a三级三级三级av在线看| 精品亚洲俞拍视频一区| 欧美激情欧美精品| 婷婷国产精品九区| 欧美色网| 男人天堂久久精品不卡| 情色五月天网| 97久久网| 中文字日本乱码| 日韩99999| 99re98| 中文字幕,人妻,日韩| 大二网站亚洲| 久久久国产三级黄色片| 无码人妻一区二区三区色欲aⅴ| 亚洲男人的天堂一区二区| 亚洲熟妇图片| 久久亚州精品成人Av无| 东北女人性交| 极品少妇久久久| 深夜操逼网| 啪啪91| 蜜臀无码视频在线观看| 日韩操人| 日韩性爱再线视频| 高潮毛片无遮挡高清免费| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 亚洲乱色视频一区、二区在线| 国产v亚洲v日韩v欧美v片另类| 开心五月激情网| 97国产精选| 狠狠综合网| 日韩在线地址一| 97看操| 操逼啊啊啊91| 亚洲欧美国产其他二区| 中文字幕精品一区二| 亚洲色91C| 国产极品一区二区三区三州| 凸凹视频在线观看| 黄色av一区二区在线| 高清不卡视频| 3p国产欧美99热| 亚洲二区精品在线观看| 蜜桃久久一区二区三区| 男人的天堂网免费| 婷婷色导航| 天美麻豆精品视频99| 国产成人bd在线观看| 亚洲 欧美 91| 俄罗斯一区二区视频在线观看| 自拍偷拍 日韩欧美| 黄片aaaaa一区| 亚洲永久永久永久永久一级一级一级精品 | 久久69| 特色a在线上| 欧美日本不卡| 久久精品一区二区三区蜜桃臀| 四虎精品一区| 国产最新小视频在线播放下载| 四虎影院成年人片| 熟女熟妇伦久久影院毛片一区二区| 日韩女模中文造逼| 日本孕妇一区二区视频操逼免费看| 日韩精彩视频| 成人精品无码| 亚洲色欲天天天堂色欲网女| 久久午夜色播影院免费高清| 国产精品麻豆成人av| 性videos欧美熟妇hdx| 高清国产精品无码| 中文字幕一区 二 区 三 四 五 区日 日 骚| 激情五月天丁香社区| 性色A∨91| 超碰碰碰碰| 天天摸夜夜摸| 日日干日日| 亚洲一区二区性爱电影| 淫荡少妇免费| 激情综合网五月婷婷五月天| 免费1级a做爰片观看| 激情综合97| 人妻久热在线| 啊啊啊啊二区好大| 在线观看午夜婷婷久久久久清性观看| 天天夜夜久久| 国产精品永久免费10000| 日韩欧美福利视频看看| 日韩人妻一区二区| 久久亚洲中文字幕视频| 黄片免费久久久久久久| 人人扣人人操| 久久精彩视频9| 亚洲色入欧美| 亚洲自拍97| 免费人成在线观看网站品爱网| 亚洲欧美日韩免费电影| 免费一级视频特黄色大片| 狠狠操狠狠爱| 97超碰免费人人性爱| 精品国产a∨一区天美传媒| 亚洲中文字幕熟女| 国产乱码精品一区二区三区四川| 99性爱视频| 91无摭挡| 久久精品国产亚洲AV清纯| 一区二区三区 日韩欧美| 九九九九久久久| 九七毛片九九毛片| 激情婷婷综合久久| 综合色99| 偷拍新久久| 欧美18禁91| 中国一级操逼视频| 婷婷在线精品| 91蜜臀在线久久久久| 色av中文字| 久久久久日本视| 91久久99久久91熟女精品| 日韩欧洲操屄视频| 俞拍久久国应视频| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 亚洲一欧洲中文字幕在线| 九九精品99| 青青11操操操操操操操操| 国产精品无套内谢| 18禁止看精品中文字幕| 久草精品一区| 91亚洲人| 亚洲情欲| 久热69九色熟妇97| av网站国产主播在线| 欧美熟女丝袜| 精品蜜乳AV免费观看| 久久久新亚洲AV| 好看的91视频| 亚洲国产91精品一区二区久久| 最新亚洲风情电影| 狠狠色综合网| 亚洲激情在线| 色色99| 秋霞免费AV| 亚州男人天堂| 日本大香蕉综合网红本杳社区| 精品国产三级av韩国在线| 日韩精品大香蕉伊人在线| 精爱久久| 熟妇熟女一区二三区| 色情婷婷| 婷婷五月天影院| 色婷婷av在线观看| 免费夜夜爱黄色视频毛片| 户外裸露刺激视频第一区| 嗯啊抽插大香蕉网页| 午夜国产综合视频在线观看| 天天激清| 日韩 国产 欧美自拍| 国产午夜精品在线观看| 亚洲91在线| 国产一级内射高清视频| 国内亚洲高清无码| 看免费一级在线播放毛片| 午夜福利国产欧美日韩夜夜| 一区二区三区在线美女| 超97在线精品视频| 日韩性爱播放| 色97| 日韩国产十八禁| www.av在线观看| 1人人看人人摸人人操| 69精品| 日本大香蕉综合网| 成人羞羞视频国产| 看全色黄大色大片免费视频| 欧美高清91| 精品黄色电影| 久草免费福利在线播放| 欧美99热| 亚洲美女色图| 欧亚 另类 久| 青娱乐欧美激情一区二区| 亚洲最新中文字幕免费| 色五月首页| 国产suv精品一区二区四| 精品人妻视频一区二区三区蜜桃视频| 日韩 女同 综合| 日本欧美不卡| 亚洲国产ⅴ高清在线观看| 强奸乱伦日韩AV| 五月天激情婷婷| 性欧美天天| 欧美肥臀在线| 日本色色视频网站| 任你草| 欧美日韩精品国产91| 欧美久久人体| 欧美性爱日韩性爱| 久久久草成人网站久久久草成人久久久草久久久 | 可能人人看人人摸| 天天爽夜夜欢视| 激情婷婷丁香| 亚洲熟久久| 超碰色97| 一本大道不卡一二三区| 狠狠久久亚洲欧美专区| 99色在线| 国产自产自拍| 97亚洲资源| 91情色在线| 草草影院最新网址| 国产久久视频| 无码78| 香蕉人人操tv| 97超碰免费生活| 精品美女久久久久| 色性综合| 久艹日日日| 青娱乐日韩无码| 花花AV导航| 天天爽夜夜爽夜夜爽精| 麻豆亚洲Av成人无码一区精品| 国产欧美成人精品| 欧美A片中文字幕| 少妇超碰在线| 91 综合网| 国产 v乱码一区二| 91n免费处女| 亚洲国产成人精品999| 99精品网| www.91视频网| 97在线精品| 久久精品高清无码一区| 乱伦1色页| 96AV久久久| 超碰97久久| 九九内射在线| 欧美在线电影| 91丨九色丨东北熟女| 东京热大香焦| 天天综合色| 美女爽到高潮91| 天天日B夜夜干B时时操B| 欧美日韩婷婷中文| 亚洲精美粉嫩嫩泬在线观看 | 淫妻综合网| 九九热re99re6在线精品| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 蜜臀久久99精品久久久久电影| 成人免费不卡在线视频| 日本高清一本二本免费不卡| 欧美肥臀在线| 无码一区二区精品视频久久久春药| 久久久久成人蜜桃精品| 国产又粗又长又大的视频| 久久这里只精品99re66图| 成人热久久精品| 日韩中文字墓| 亚洲色资源| 国产中文字幕曰本毛片| 性欧美999| 婷婷三区| 亚洲人妻中文高清| 97这里有精品| 91撸色网 玖玖网 欧美| 亚洲女毛多水多21P| 欧美精品庄| 欧美性,色九九| 一区二区三区 日韩欧美| 97K超碰在线| 国产天天骚| 亚洲一欧洲中文字幕在线| 日韩天天综合| 激情亚洲天堂| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 大香蕉手机在线| 校园春色之综合网| 97人人操人人摸人人爱| 秋霞 色色| 青春草莓视频在线观看网址| 后入式视频国产自| 青娱乐 成人娱乐在线| 一线黄色免费性爱片| 黄色工厂这里只有精品| 一区二区蜜臀| 91色艳| 日本高清有码网址视频| 网站A V在线| 色婷婷A V一二三四区麻豆综合| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 97天天弄| 亚洲欧洲小说图片视频 | 欧美日不卡| 熟女精品va中文字幕| 免费岛国一级片| 综合少妇网| 91天天爱| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 97超碰色色| 91痴汉| 亚洲综合射| 国产99999久久精品| 开心五月婷婷| 337p大胆噜噜噜噜噜91Av| 欧美日韩日产免费网站看| 97在线免费| 九九热国产| 久久婷婷苹果| 亚洲做性| www.acm成人黄色毛片| 91撸色网 玖玖网 欧美| 97人妻色| 久久久久久久 九九九九九九九| 五月丁香激情综合| 国产精品青草综合久久| 日韩精品在线观看网站| 玖玖玖玖精品国产剧情| 91快色色色色色| 国产一区在线观看无码AV| 亚洲电影中字一区二区| 操b在线观看| 一区二区三区免费视频入口| 久久久新亚洲AV| 无码人妻精品酒店| 丁香婷婷五月| heyZO天然素人无码AⅤ专区| 超清福利精品视频在线| 久久日韩精品一区二区| 中文字幕久热视频在线| 一区二区三区黄片免费观看| 韩国黄片aaaa| 欧美精品1区2区3区| 成人女人国产| 六六久久日韩不卡| 综合色图,成人综合网| 美女超碰978| 精品中文字幕第一页| J?P?NESEHD熟女熟妇伦| 美女裸体无遮挡永久免费观看网站 | 超碰色老头| 精品免费一区| 久久伊人亚洲AV无码网站| 国产亚洲精品无码三区| 久久人人舔人人爽舔人人av片| 国产人妖视频一区在线观看| 欧美日韩岛国大片在线观看| 午夜免费视频1000| 丝袜性亚洲| 亚洲日韩东京热一区| 东京热AV男人的天堂| 91殴美| 国内精品久久人妻性色av| 免费在线黄片视频| 五月婷丁香| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 麻豆美女丝袜人妻中文| 国产第12页| 最近的最新的中文字幕视频| 国产欧美精品日韩区二区麻豆天美| 97干色天堂| 麻豆精品三区视频| 欧美性色欧美| 日韩激情毛片一级久久久| 爱av免费| 久久综合精品一区二区三区| 久久精品女同亚洲女同13| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 亚洲视频中文一区| 国产色呦呦| 日韩美女久久一区二区三区| 操淫穴亚洲五月丁香 | 116美女午夜| 亚洲丰满很很操| 偷拍精品一区二区三区| 精品亚洲国产成人AV制服丝袜| 91在线视频免费中出| 久久后入制服| 在线观看成人性爱免费小视频| 国产激情久久| 偷拍片久久| 麻豆综合一区av| 婷婷五月影院| 青青草一本道福利视频| 又大又长又粗又爽又黄| 精爱久久| 丁香九月婷婷| 色婷婷久久| 啊啊啊啊啊好舒服视频| 国产精品不卡一区二区电影| 五月婷婷色| 亚洲中字慕不卡| 精品中文字幕第一页| 亚欧操逼片在线观看 | 欧美91精品国产自产| 婷婷五月天久久久| 人妻无码视频一区二区三区久久| 无码高清少妇久久| 亭亭丁香激情| 91美女视频| 啊啊啊操一区| 99re99| 国产欧美一区激情交| 98超碰日本| 国产丝袜欧美在线视频| 熟妇人妻一区二区三区| 久久久96| 青娱乐亚洲热| 一起草三级AV电影在线观看| 日韩偷拍色图| 天天看天天日| 欧美亚洲影视| 激情五月综合开心五月| 青青操少妇| 久久中文字幕一区不卡| 在线观看A啊啊啊| 日日操免费视频| 一区| 国产精品极品美女视频| 亚洲精品蜜桃久久久久久久| 手机在线中文字幕国产| 91男人天堂网| 黑人黄片在线免费观看| 9美女超碰在线免费观看| 91chinese在线| 五月天综合在线| 粉嫩av一区二区三区四季| 久久av一级av少妇av高潮| 五月开心久久AV官网| 视频在线观看免费一区二区三区| 91性| 激情综合婷婷| 免费国产视频| 97香蕉人人乳| 国产色呦呦| 中文字幕一区二区无码成人| 中文字幕黑人大片| 99亚洲国产精品色一区二区三区| 丁香婷婷激情五月天无毒不卡| 国产精品视频在线观看| 国产成人综合网| 清纯唯美亚洲综合| 天天综合麻豆视频| 亚洲中文国际强奸字幕| 941超碰| 亚洲综合五月天| 午夜啪| 国产热av| 尤物视频视频官网| 久热久一区二区三区| 黄色电影在线播放综合网站| 超碰综合97在线| 天美国产三级传媒| 色在线亚洲视频www| 精品十八在线观看| 中文字幕片| 在线观看黄色电话| 国产欧美在线观看免费观看| 亚洲欧美综合网站| 五月天色图| 看日韩操逼| 午夜舔阴达高潮视频免费看| 九九九精品一区二区无码| 五月丁香六月婷| 在线观看亚洲专区| 亚洲精品久久久久久久蜜桃臀| 蜜臀久久久国产| 97国产|免费| 78久久久| 久久久999日本大片| 人人妻人射| 少妇久久久久久久| 在线天堂999| 搡老女人老91二区| 久久九操在线观看| 亚洲熟妇乱女区二区三区| 国产一区二区三区导航| 欧美性爱综合,免费| 欧美综合综合| 后入式视频国产自| 亚洲欧洲无码97久久精品| 丁香五月天视频| 永久免费发布性爱网| 无码一区免费在线不卡| 大香蕉中文201| 九九人妻| 97网址97| 午夜后入| 久久蜜色情在线视频xxx免费观看| 免费观看的av| 中文字幕一区二区三区视频播放| 久久久亚洲高清不打码| 午夜男女爽爽大片免费观看| 久久97精品久久久久久久不卡| 亚洲AV在线资源| 都市激情人妻一区二区青青操视频| 视频在线观看一二三区| 亚州宗合另类| 成人五月香网在线| 日本超碰在线国产一区| 色婷婷久久| 欧美 青青草| 亚洲中文字幕97久久精品少妇| 成人性爱电影网| 无码抄逼网| 操我无码| 国产精品亚洲免费| 在线播放中文字幕| 中文字幕一区av| 校园春色宗合网| 国产AV人人 夜夜人人澡| 无码99| 日本曲间由美性生活片| 丰满人妻-区二区三区免费| 亚洲天堂久久| 999在线电影香蕉| 婷婷成人久久久精品| 麻豆60秒| 嗯嗯啊啊啊好舒服| 亚洲视频一二区| 91少妇香蕉久久精品| 蜜臀无码一区二区| 欧洲一区二区| 国产精品久久久久久夜夜夜| 国产视频97| 人妻激情视频| 综合欧美亚洲| 2021国产成人精品久久| 欧美国产精品久久九九| 欧美日韩午夜精品一区二区三区 | 亚洲黑人在线| 又粗又长又大国产不卡| 中文字幕精品免费一区二区| 中文精品一区二去| 中文字幕亚韩| 久久乐| 蜜臀AV一区二区三区激情综合| 天天看人人操屄犊摸阴| 视频在线中文字幕| 欧美性性性| 欧美片第一页| 日韩99神马视频片| 大香蕉免| 亚州色图片在线色| 97超碰9| 免费看片黄| www.亚洲黄色| 国产精品女生av| 亚洲欧美中文日韩视频中国语| 亚洲综合网电影91| 女人的天堂大香蕉网| 青青草原香蕉日本Ap| 欧美在线91| 太久视频| 天天操女人| 久久精品日韩专区免费观看| 国产又黄又爽| 日韩免费看黄片| 亚洲熟女乱色| 四虎免费在线播放| 91伊人久| 中文字幕啊啊啊在线观看视频| 成人在线视频一区| 人人妻人人澡人人爽久久av| 亚洲成人日韩小说| www.狠狠干.coom| 日日干夜夜骑| AV在线性爱| 色婷五月天| 午夜精品人妻二区三区| 国产亚洲日韩欧| 9 9精品一区二区三区| 亚洲图片 激情小说| 亚洲中文字幕在现观看| 无套内射性感少妇视频| 久久久久9999妇女| dy888午夜老子影视达达兔| 亚洲中文一区二区三区视频| 小骚逼被操的爽不爽| 日韩欧美性吧婷婷乱伦大香蕉| 激情久久av一区av二区av| 裸体1区| Sekablack无码一区| 亚洲成人av色网| 久久香蕉国产线看观看亚洲女人 | 岛国AV一区二区电影| 男同专区一区二区三区在线| 精品在线观看视频在线| av线电影| 少妇人妻好深太紧了vr91| 色哟哟-国产专区| 国产9区| 色97| 亚洲九九九| 丁香五月天啪啪| 亚州欧美在线| 婷婷色色网| 九九九999久久久网站| 日韩精品资源专区二区| 精品国产乱码久久久久久久久久毛片| 久久成年片色大黄全免费网站| 激情五月综合| 婷婷性网| 久久婷五月| 国产精品伦理| 色五月婷婷久久| 久久9久久| 激情五月婷婷| 欧美色青| 超碰国产情侣自拍网| 日韩兔费看黄片| 伊人大香蕉在线| 国产精品国产亚洲区艳妇糸列| 午夜情侣自拍网站| 久久国产在线一区二区| 日韩超碰精品综合| 91香蕉视频在线观看免费| 偷拍超碰| 久久九九视频九九视频| 日夜尻逼网| 日韩精品一区二区三区色欲 | A 在线网址| 亚洲日韩东京热一区| 自拍偷拍 日韩无码| 97国产精选| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 97热视频在线观看| 91狼人| 蜜桃久久一区二区| 99999精品成人| 女人被男人桶爽视频网站| 怡红院亚洲怡春院av| 97干在线| 国产高清午夜成人在线观看| 熟妇人妻一区二区三在线| 欧美激情中文字幕另类小说| 亚洲区 欧美区| 麻豆AV一区二区| 日本免费专区| 欧美色图电影| 色色综合97| 三男一女不戴套的A片| 亚洲国产成人福利在线观看| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 日韩卡一卡二卡三在线| 少妇色欲综合网2| 国产夜夜艹| 性爱乱伦网址| 无码精品久久久久久亚洲| 欧洲自拍色图gif在线| 天天做天天爱天天爽| 99性视频| 神马影院午夜福利久久久| 妺妺跟我一起洗澡没忍住| 免费观看一区| 婷婷五月天伊人| 亚州一区二区| 欧美精品久久| 99热这里| 国产综合网站在线播放| 亚洲精品人体| 天欧美在线| 国产乱婷婷精品二区三区| 人人操人人摸人| 欧美视频一| 久久9久久| 中文字幕日韩人妻视频一区二区三区交换夫妻| 国产大学生高潮在线播放| 免费福利视频中文字幕| 国产白丝AV| 日韩高清一二三| 国产肏屁眼视频| 日韩在线观看三级电影| 久久综合女优| www.狠狠| 中日韩久久久| 亚洲欧美一区二区网址| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 国产亚洲综合欧美一区| 少妇一区二区三区高速| 91综合色噜噜| 久久精品熟妇丰满人妻99| 人伦四五区| 欧美在线色| 国产成自自拍在线观看| 久久久久日本视| 丁香色婷婷| 加勒比海成人视频网| 伊人五月天青青草婷婷| 大香蕉久久| 青草av在线| 另类一区| 国产精品香蕉热久久新品| 国内毛片婷婷六月色| 亚洲无码太久| 爱妃国产亚洲视频中文字幕| 日韩欧美日韩| 狠狠操使劲操| 国产一级舔足在线观看| 日韩大香蕉| 网友自拍第一页| 啊啊啊啊啊啊在线观看| 亚洲欧美黄| 97色碰| 大香蕉欧美| 张柏芝国产一区在线观看| 97超碰色| 伊人国产av| Julia在线播放亚洲久久| 五月丁香婷婷啪啪| 色婷婷电影网| 天美AV片| AV天堂电影网| 亚洲第一色页夜| 男人的亚洲天堂| 超碰这里有精品| 天天日天天干天天摸天天操| 欧美丰满少妇交换91欧美精品| 自拍第一页| 夫妻日逼| 日产操逼| 国产精品久久久久久照片| 国产AV精久久| 久久久国产成人一区二区三区在线| 97香蕉碰碰人妻国产欧美| 99九九精品| 热久久精品| 欧美色一二三| 中文字幕免费看| 国产精品丝袜在线| 1769一区| 亚洲日韩美女中文字幕乱| 无码国产精品午夜不卡(| 日韩三级视频一区二区三区| 人人喜人人妻| 久久久18禁| 欧美人妻一区二区| 91狠狠综| 无码操逼网| 99这里都是精品| 人妻精品一区二区全免费| 99日免费视频中文字幕| 男人的天堂com| 69av一区二区三区| 日本在线视频导航| 亚洲九九爱| 欧美片第一页| 中文字幕视频二区| 亚洲综合嫩| 欧美性爱日韩高清| 97色色网| 欧洲亚洲天堂精品| 九九毛片这里只有精品| 欧美日韩222| 天天干天天干天天| 伊人久久大香大香线蕉中文| 成人热久久精品| 亚洲最新av无码成人精品区| 日本99一区二区| 青青草视频爽一爽| 人妻人久久精品中文字幕| 97超碰欧美| 成人午夜视频免费播放| 色综和网| 免费一级精品啪啪视频| 亚洲人成色9999精品久久| www男人天堂| 亚洲 中文字幕 精品| 中文字幕免费看大片| 在线看污网站| 久久男人网| 蜜臀av在线播放一区二区三区| 日韩av不卡在线看| 激情综合网激情综合| 97欧美色| 9久精品视频在线观看| 亚洲图片 91| 18禁网站在线播放| 91男人综合| 中文字幕啊啊啊在线观看视频| 亚洲综合九九| 亚洲综合九| 亚洲人成网www| 色波多| 久久久免费懂色| 蜜臀操逼黄色视频操的好爽| 亚洲熟女一区二区| 亚洲欧美色综合| 97WW精品| 亚洲男人的天堂亚洲| 狠狠操官网| 91爱看| 92人人操人人| 久热网| 亚洲1区| 午夜黄色免费在线观看| 人妻少妇久久中文字幕一区二区 麻豆 | 97久久精品亚洲中六字幕| 久热伊人| 国产女主播视频在线观看| 亚欧性爱在线无码| 欧美日韩在线视频网站| 99re在线视频国产| 看看小穴| 亚洲第一精品在线视频| 淫淫总合网| 97视频在线播放| 蜜桃久久久久久久| av午夜影院在线播放| 伊人麻豆传媒| 蜜臀久久99精品| Av色五月| 亚洲宅男天堂| 大香蕉五月天婷婷| 久久成人午夜精品影院| 日本色色视频网站| 久久久天美| 伊人伊人LD| 伊人久久88国产女| 淮穴色AV| 天天躁日日躁AAAXX| 白嫩少妇| 亚洲成人AB| 欧美成人精品一区二区三区| 亚洲欧美日韩制服另类| 91欧美美女日韩国产婷婷| 亚洲精品人妻吞精av| 男女无套 免费网站| A男人的天堂| 欧洲精品一区二区三区| 亚洲欧美国产中文字幕| 嗯……啊…嗯嗯…啊…好舒服| 亚洲 图片 综合91| 天天日天天射天天干| 91视频国品一二三区| 久草福利在线资源站| 伊人久久综合精品欧美| 强奸乱伦AV一天堂网| 蜜乳中文字幕a在线| 91综合站| 亚洲欧美色图片| 91第一页| 粉嫩AV一区二区夜夜| 麻豆精品三区视频| 91精品国产综合久久久蜜臀| 黄色一区二区秘书性感| 亚洲精品天堂久久A∨51成人漫| 精品欧美А∨无码黑人大荫蒂| 亚洲中文一区二区三区| 亚卅熟女乱色| 亚洲 中文 女同| 亚洲精品一卡二卡三卡福利视频网站| 内射黑丝袜| 亚洲欧美小说| 在线无码网站| 操婷婷逼| 国产乱码精品久久久久久| 美女丝袜激情小说| 婷婷激情一区二区三区俺也去| 婷婷伊人綜合中文字幕| 伊人五月天青青草婷婷| 久久久久96| 亚洲图片小说欧洲| 日韩青久久| 欧美日韩在线视频网站| 精品性爱一二三区| 性爱动态120秒| 亚洲男人综合网| 日韩15p| 综合久久中文字幕综合日韩精品| 神马久久69| 亚洲 欧美 制服 另类 自拍| 男人天堂站| 日韩在线观看三级电影| 啊…啊…操我用力操我| 欧美美女视频| 男人的天堂2018.| 日韩精品在线放| 国产第二页| wwwcaobibi| 在线97视频| 成人老鸭窝人人在线视频| 久久日韩精品一区二区| 亚洲一区日韩精品| 一区e区三| 婷婷伊人綜合中文字幕| 94色色电影网| 九九英色视频| 亚洲国产高清福利视频| 97鸡把在线视频| 女同性恋一区二区三区精品视频| 国产精品久久久久无码Av网曝门| 18岁禁 茉莉成人久久| 欧美日韩国产高清在线一二三区 | 妇人噜噜| 91久久久久久久久18| 午夜小电影在线插入淫高潮| 欧洲自拍色图gif在线| 色999亚洲人成色| 国产亚洲精品农村妇女| 久久综合97| 97草草| 嗯嗯啊啊亚欧精品| 成人av动漫在线观看| 亚洲第一免费视频| 亚洲国产精品成人久久蜜臀| 乱久久久| 午夜精品久久久久久久99热影院| www九九热| 亚洲一区二区中文字幕| 91色人妻| 综合网欧美| 97超碰香蕉| 麻豆av一区二区| 免看60秒涩涩视频| ai欧美亚洲小说| 性爱欧美五月| 国产综合久久久鬼色| 99re这里只有精品中心播放| 人人看人人摸人人色| 亚洲二区精品在线观看| 天天插夜夜操| 激情抓乳插进去啪啪啪日韩| 日韩免费在线观看不卡| 日本αv| 欧美一区二区三区四区综合|