日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

Java線上排查利器Arthas實(shí)戰(zhàn):從CPU飆高到接口超時(shí)

Java線上排查利器Arthas實(shí)戰(zhàn):從CPU飆高到接口超時(shí) 在Java后端摸爬滾打久了你大概率經(jīng)歷過這樣的場景線上應(yīng)用突然CPU飆高、接口超時(shí)、用戶反饋某個(gè)功能時(shí)好時(shí)壞可日志里干干凈凈一點(diǎn)異常都沒打出來。重啟大法雖然能暫時(shí)緩解但根本問題還在而且重啟以后什么現(xiàn)場都沒了。這種時(shí)候我第一反應(yīng)就是開Arthas這個(gè)工具我第一次用就覺得“真香”甚至可以說它已經(jīng)成了我排查線上問題的默認(rèn)入口。所有要連著好幾臺機(jī)器、翻各種日志、反復(fù)猜測代碼邏輯的日子在Arthas面前基本可以畫上句號了。Arthas是Java生態(tài)里非常出名的在線診斷工具它最大的特點(diǎn)是不用改代碼、不用重啟應(yīng)用直接附著在運(yùn)行中的JVM上就能實(shí)時(shí)查看類加載信息、方法調(diào)用參數(shù)、返回值、異常甚至還能動(dòng)態(tài)修改內(nèi)存中已加載的類重新定義類邏輯。對于需要快速定位生產(chǎn)環(huán)境問題的開發(fā)、運(yùn)維和SRE同學(xué)來說這是一把不折不扣的瑞士軍刀。這篇內(nèi)容我會把日常用得最多、最順手的功能串起來講一遍從怎么快速附著到具體命令怎么用、遇到問題的排查思路是什么盡量按照實(shí)戰(zhàn)場景來寫方便你直接照葫蘆畫瓢。1. 為什么Arthas值得“真香”先搞清楚它解決的痛點(diǎn)1.1 傳統(tǒng)排查方式的困境我最早排查線上問題基本靠三板斧看日志、加臨時(shí)日志重新發(fā)版、重啟試試。日志如果沒有打印出關(guān)鍵堆棧就得靠猜加日志發(fā)版光是走流程就要很久而且改了代碼的行為可能就和問題現(xiàn)場不一致了有些偶發(fā)問題根本復(fù)現(xiàn)不出來重啟就更不用提了JVM里的現(xiàn)場被清得一干二凈線程狀態(tài)、堆內(nèi)存數(shù)據(jù)、正在執(zhí)行的調(diào)用鏈全都沒了。更難受的是定位性能問題。一個(gè)接口耗時(shí)忽高忽低你懷疑某個(gè)第三方調(diào)用超時(shí)但沒法確認(rèn)到底卡在哪一行。最原始的方案是到處打時(shí)間戳然后重新發(fā)版算下來一個(gè)下午就過去了。而且發(fā)版本身會引入變量問題可能就這次發(fā)完消失了下次出問題又不知道什么時(shí)候。Arthas這類工具的思路完全不同應(yīng)用不需要重啟它會在目標(biāo)JVM進(jìn)程上啟動(dòng)一個(gè)代理然后把診斷命令通過socket傳給這個(gè)代理代理用字節(jié)碼注入技術(shù)去攔截目標(biāo)類的方法把你想看的參數(shù)、返回值、異常、執(zhí)行耗時(shí)實(shí)時(shí)抓回來。相當(dāng)于給運(yùn)行中的應(yīng)用做了一次“無痛內(nèi)窺鏡”檢查隨時(shí)都能做做完拔掉恢復(fù)原樣。1.2 和BTrace、Greys等同類工具的取舍其實(shí)在Arthas之前已經(jīng)有BTrace這類早期工具我也試用過。BTrace有一個(gè)很大的問題是使用門檻比較高需要編寫專門的腳本而且對版本、對JVM參數(shù)比較敏感用得不好容易把自己搞掛。Arthas雖然也用了類似字節(jié)碼增強(qiáng)的原理但它在交互體驗(yàn)和命令設(shè)計(jì)上做了很多工程化的打磨像看板一樣實(shí)時(shí)刷新的dashboard、一鍵查看線程CPU占用的thread命令、跟蹤方法調(diào)用鏈的trace命令都是直接敲命令就能用非常符合后端開發(fā)的直覺。另外Arthas對Java版本和中間件環(huán)境的兼容性做得不錯(cuò)像Spring Boot這類框架的項(xiàng)目幾乎開箱即用不需要額外改啟動(dòng)參數(shù)。所以很多團(tuán)隊(duì)會把Arthas作為標(biāo)準(zhǔn)線上問題排查工具來推廣甚至要求每個(gè)服務(wù)鏡像里都預(yù)留Arthas的安裝路徑方便隨時(shí)附著排查。提示Arthas本身是一個(gè)診斷工具它不改變業(yè)務(wù)代碼的最終邏輯。但要注意在敏感環(huán)境使用時(shí)需要做好權(quán)限管理避免有人通過它執(zhí)行危險(xiǎn)操作比如動(dòng)態(tài)修改類邏輯。生產(chǎn)環(huán)境建議配合審計(jì)和權(quán)限體系來用。2. 五分鐘上手Arthas安裝、啟動(dòng)與附著2.1 用官方腳本快速安裝Arthas的安裝方式很靈活最省事的方法是直接下載官方提供的as.sh腳本然后執(zhí)行curl -L -O https://github.com/alibaba/arthas/releases/latest/download/arthas-boot.jar java -jar arthas-boot.jar這里我個(gè)人更推薦直接下載arthas-boot.jar來用因?yàn)楹罄m(xù)版本升級時(shí)用它來引導(dǎo)會更統(tǒng)一也方便自定義下載目錄。腳本方式適合快速體驗(yàn)它的本質(zhì)也是下載arthas-boot.jar再啟動(dòng)。啟動(dòng)之后命令行會列出當(dāng)前機(jī)器上所有的Java進(jìn)程就像這樣[INFO] arthas-boot version: 3.x.x [INFO] Found existing java process, please choose one and input the serial number: * [1] 12345 xxx-order-service [2] 23456 xxx-gateway輸入序號回車就能附著到對應(yīng)的進(jìn)程上。需要注意當(dāng)前登錄用戶必須和目標(biāo)進(jìn)程的啟動(dòng)用戶一致否則會附著失敗或者出現(xiàn)權(quán)限不足的問題。這個(gè)坑我踩過很多次后面會在排查章節(jié)單獨(dú)說。2.2 無交互式啟動(dòng)適合腳本和自動(dòng)化場景如果你需要在CI/CD流水線或者自動(dòng)化腳本里啟動(dòng)Arthas就不能用交互式選擇進(jìn)程的方式。這時(shí)候可以直接指定進(jìn)程ID啟動(dòng)java -jar arthas-boot.jar --attach-only --target-ip 127.0.0.1 -p 12345或者直接用as.sh帶參數(shù)./as.sh -p 12345還有一種場景是應(yīng)用本身就集成了Arthas的agent方式啟動(dòng)即在JVM參數(shù)里加上-javaagent:arthas-agent.jar這樣應(yīng)用一跑起來Arthas的attach通道就已經(jīng)準(zhǔn)備好了需要診斷的時(shí)候直接用客戶端連接即可。這種方式特別適合容器環(huán)境因?yàn)槿萜鞯腜ID 1進(jìn)程往往不是Java進(jìn)程動(dòng)態(tài)attach會受PID namespace影響提前掛agent反而更省心。2.3 理解Arthas的attach與Agent機(jī)制Arthas底層用的是Java的Attach API。它向目標(biāo)JVM發(fā)送attach請求并加載一個(gè)agent這個(gè)agent會和Arthas的服務(wù)端建立通信服務(wù)端再開一個(gè)telnet端口默認(rèn)8563以及一個(gè)HTTP端口默認(rèn)8562。你敲的每一條命令都會先經(jīng)過本地的Arthas客戶端再通過這個(gè)通道發(fā)送給目標(biāo)JVM里的agent去執(zhí)行。這條鏈路聽起來有點(diǎn)繞但只要理解了排錯(cuò)就快多了。比如你遇到attach成功但命令半天沒反應(yīng)那大概率是目標(biāo)進(jìn)程中agent初始化出了問題比如類加載器沖突、Arthas版本過舊等。再比如你發(fā)現(xiàn)本地能連上自己的測試環(huán)境但線上環(huán)境始終連接失敗就要檢查網(wǎng)絡(luò)策略是否開放了8563和8562這兩個(gè)端口。2.4 檢查Arthas是否工作正常附著成功后可以先執(zhí)行一個(gè)最簡單的命令試試[arthas12345]$ version如果返回版本號說明鏈路通暢。然后可以執(zhí)行[arthas12345]$ sysprop查看系統(tǒng)屬性。這些都正常了再進(jìn)入正式的診斷流程。3. 高頻命令實(shí)戰(zhàn)解析從看板到方法級追蹤3.1 dashboard實(shí)時(shí)全局看板dashboard是我每次進(jìn)入Arthas后幾乎必敲的第一條命令。它會以一個(gè)動(dòng)態(tài)面板的形式展示當(dāng)前JVM的概況包括線程、內(nèi)存、GC、類加載數(shù)量以及運(yùn)行時(shí)環(huán)境信息??窗鍟詣?dòng)刷新默認(rèn)每3秒刷新一次當(dāng)然你可以用-i參數(shù)指定刷新間隔比如[arthas12345]$ dashboard -i 1000這樣每秒刷新一次。下面給你看一眼典型輸出長什么樣ID NAME GROUP PRIORITY STATE %CPU TIME INTERRUPTED DAEMON 67 xx-rpc-thread-14 main 5 RUNNABLE 33 0:23 false true ... Memory used total max usage GC heap 1.2G 2.0G 4.0G 30.00% gc.ps_scavenge.count: 128 ...看板里最值得關(guān)注的是CPU占用排前幾的線程。如果某條業(yè)務(wù)線程長期處于RUNNABLE狀態(tài)而且CPU占比明顯偏高基本可以鎖定它就是CPU飆高問題的元兇。再用thread -n命令抓它的線程棧就能進(jìn)一步確認(rèn)卡點(diǎn)位置。3.2 thread線程排查利器thread命令有好幾個(gè)重要的用法按實(shí)用頻率排大概是這么個(gè)順序第一查看當(dāng)前最耗CPU的線程棧[arthas12345]$ thread -n 5這個(gè)命令會把CPU占用最高的5個(gè)線程的堆棧信息全部打印出來并且自動(dòng)帶上線程的ID、名稱、CPU使用率、狀態(tài)。有一次我遇到線上CPU突然打滿用這個(gè)命令一下就看到了某個(gè)線程卡在了一個(gè)JSON序列化工具的循環(huán)里棧頂清清楚楚寫著某行代碼的toString調(diào)用問題原因秒定位。第二查看指定線程的完整棧[arthas12345]$ thread 67其中67就是線程ID。這會打印該線程的完整堆棧適合排查線程阻塞在哪里、鎖等待在哪里。第三查找線程間是否有鎖等待和死鎖[arthas12345]$ thread --stateBLOCKED如果想要檢查死鎖Arthas沒有專門的一條命令但是可以結(jié)合thread --stateBLOCKED和線程棧中的“waiting for monitor”字樣來判斷。某次我處理過一個(gè)偶發(fā)死鎖問題兩個(gè)線程都在等對方的鎖通過這個(gè)命令一查堆棧里兩個(gè)線程互相等待的鎖對象非常直觀最后定位到是加鎖順序不一致導(dǎo)致的經(jīng)典死鎖。3.3 jad反編譯線上類確認(rèn)跑的是不是你以為的代碼線上最尷尬的情況之一就是代碼看著是新的實(shí)際發(fā)出去的包是舊的。與其問別人不如直接反編譯看字節(jié)碼。jad命令能反編譯任意已加載類打印出它的Java源碼結(jié)構(gòu)實(shí)際是反編譯結(jié)果可能和原始源碼有細(xì)微差別但邏輯基本可讀。用法非常簡單[arthas12345]$ jad com.example.OrderService輸出會帶類加載器信息、源碼位置、反編譯的Java代碼。這個(gè)命令在排查“為什么線上行為和本地不一致”時(shí)特別有用。有一次客戶端反饋某功能表現(xiàn)異常我用jad一查發(fā)現(xiàn)類里根本沒有最新加的判斷邏輯立刻確認(rèn)是發(fā)布流程出了問題省掉了無休止的討論。如果你的類被JIT優(yōu)化了反編譯出來可能有部分內(nèi)容顯示不出來但不影響判斷大致邏輯??梢杂胘ad --source-only只輸出源碼方便復(fù)制到本地做diff比較。3.4 watch觀察方法調(diào)用入?yún)ⅰ⒎祷刂岛彤惓atch是Arthas里我最喜歡的命令沒有之一。它用來觀察指定方法的每一次調(diào)用抓取入?yún)ⅰ⒎祷貙ο?、拋出的異常、耗時(shí)等。寫法如下[arthas12345]$ watch com.example.OrderService createOrder {params, returnObj, exception, cost} -x 3拆解一下這個(gè)命令第一個(gè)參數(shù)是類全限定名。第二個(gè)參數(shù)是方法名。第三個(gè)參數(shù)是OGNL表達(dá)式?jīng)Q定要輸出什么。{params, returnObj, exception, cost}分別代表入?yún)⒘斜?、返回對象、異常、耗時(shí)。這個(gè)大括號不是列表字面量而是輸出多個(gè)字段的組合。-x表示展開對象的層級數(shù)字越大展開細(xì)節(jié)越多。比如-x 3能看到入?yún)ο蟮娜龑忧短捉Y(jié)構(gòu)。這個(gè)命令在排查“參數(shù)對了卻得到奇怪結(jié)果”、“某個(gè)方法偶爾拋異常但日志沒記錄”的場景下幾乎是精準(zhǔn)制導(dǎo)。比如有次同行遇到一個(gè)接口偶爾返回錯(cuò)誤碼但代碼里沒打日志我建議用watch帶異常參數(shù)去抓結(jié)果沒等多久就抓到了異常棧是一個(gè)特殊的非法參數(shù)組合導(dǎo)致的本地測試完全沒覆蓋到。注意點(diǎn)watch默認(rèn)只監(jiān)控方法進(jìn)入時(shí)的信息如果你想額外看方法退出時(shí)的結(jié)果要加上-b或-e參數(shù)來控制位置或者更常用的是保持默認(rèn)然后在OGNL表達(dá)式里同時(shí)取返回值和異常即可。Arthas的做法是默認(rèn)在方法結(jié)束以后統(tǒng)一輸出所以直接查returnObj和exception是能拿到的。3.5 trace定位方法內(nèi)部耗時(shí)分布有時(shí)候接口慢但你不知道熱點(diǎn)是在內(nèi)部哪個(gè)子調(diào)用上。trace命令可以追蹤一個(gè)方法內(nèi)部的所有子調(diào)用輸出每一層的耗時(shí)以及調(diào)用次數(shù)。[arthas12345]$ trace com.example.OrderService createOrder #cost 200這個(gè)命令的含義是當(dāng)createOrder整體耗時(shí)超過200毫秒時(shí)打印方法內(nèi)部的調(diào)用鏈耗時(shí)詳情。每一行會顯示類名、方法名、耗時(shí)、調(diào)用來源。trace是我處理性能問題時(shí)最依賴的工具。比如你懷疑數(shù)據(jù)庫查詢慢但數(shù)據(jù)庫監(jiān)控又沒查到慢SQL或者懷疑HTTP外部服務(wù)超時(shí)卻不知道具體在哪個(gè)階段。trace一跑整個(gè)方法內(nèi)部的每一步耗時(shí)一目了然是內(nèi)存計(jì)算慢還是RPC調(diào)用慢還是某個(gè)循環(huán)里做了太多無用計(jì)算全都能看到。和watch不同的是trace的成本相對高一些尤其是在高頻調(diào)用方法上開啟trace會有一定的性能開銷。所以在生產(chǎn)環(huán)境使用時(shí)要控制好追蹤的目標(biāo)方法不要掛在整個(gè)入口上大規(guī)模trace更推薦在定位到大致方法后細(xì)粒度去開trace。3.6 stack方法被誰調(diào)用、調(diào)用鏈長什么樣stack命令會輸出當(dāng)前方法被調(diào)用的調(diào)用路徑簡單理解就是“誰調(diào)用了我”。用法[arthas12345]$ stack com.example.OrderService createOrder這個(gè)命令適合回答“這個(gè)方法為什么被反復(fù)觸發(fā)”、“這個(gè)入口是被人調(diào)用還是內(nèi)部定時(shí)任務(wù)觸發(fā)的”。有一次排查一個(gè)數(shù)據(jù)錯(cuò)亂問題就是想弄清楚某條數(shù)據(jù)為什么會走到一個(gè)異常分支最后用stack發(fā)現(xiàn)原來是消息消費(fèi)邏輯里間接調(diào)用了同一個(gè)方法導(dǎo)致數(shù)據(jù)狀態(tài)被重復(fù)修改。stack還支持按條件輸出比如只輸出耗時(shí)超過閾值的調(diào)用[arthas12345]$ stack com.example.OrderService createOrder #cost1000這樣既能看到調(diào)用鏈也能篩選出慢調(diào)用用來排查偶發(fā)性慢請求特別好使。3.7 tt時(shí)間隧道記錄方法調(diào)用的歷史現(xiàn)場如果說watch是“實(shí)時(shí)看每一次調(diào)用”那tt就是“把調(diào)用的現(xiàn)場記下來回頭慢慢看”。tt命令能記錄一段時(shí)間內(nèi)某個(gè)方法的調(diào)用快照包含入?yún)?、返回、異常、調(diào)用時(shí)間等并且你能用tt的Play功能去重放某一次調(diào)用?;居梅╗arthas12345]$ tt -t com.example.OrderService createOrder -n 20意思是記錄最近20次createOrder調(diào)用的快照。輸出里每行有一個(gè)ID如果你想看第8次調(diào)用的具體參數(shù)和返回值[arthas12345]$ tt -i 8有一次線上偶發(fā)問題最讓人頭疼的就是無法復(fù)現(xiàn)當(dāng)時(shí)我用tt掛了半小時(shí)記錄到了那一次異常調(diào)用的完整入?yún)⑷缓笥眠@個(gè)參數(shù)在測試環(huán)境一跑就復(fù)現(xiàn)了整個(gè)排查從“玄學(xué)”變成了“確定性”。tt的代價(jià)比watch更大因?yàn)樗诜椒ǔ鋈肟诙疾迦霐r截邏輯并且保存快照。所以開啟時(shí)間不要過長記錄次數(shù)也要限制比如-n 20抓完立即關(guān)閉。3.8 monitor統(tǒng)計(jì)方法調(diào)用頻率、成功率和耗時(shí)趨勢如果你想看一個(gè)方法在一段時(shí)間內(nèi)的整體表現(xiàn)比如每分鐘被調(diào)多少次、成功率如何、平均耗時(shí)多少monitor就是干這個(gè)的[arthas12345]$ monitor com.example.OrderService createOrder -c 30表示每30秒統(tǒng)計(jì)一次createOrder的調(diào)用次數(shù)、失敗次數(shù)、失敗率、平均耗時(shí)等。這個(gè)命令適合不需要看單個(gè)調(diào)用細(xì)節(jié)而是想看宏觀趨勢的場景。比如壓測過程中觀察某個(gè)方法的TPS、RT變化或者線上某個(gè)接口失敗率突然升高時(shí)先確認(rèn)是不是這個(gè)原因。3.9 sc、getstatic與ognl查看類信息、讀取靜態(tài)變量、執(zhí)行任意表達(dá)式這三個(gè)命令放到一起講因?yàn)樗鼈兪茿rthas里“探查類結(jié)構(gòu)”的組合拳。sc用來搜索所有已加載的類[arthas12345]$ sc *OrderService*輸出會顯示類全限定名、類加載器、類狀態(tài)。如果想看類的詳細(xì)結(jié)構(gòu)加-d參數(shù)[arthas12345]$ sc -d com.example.OrderService這樣會輸出類的修飾符、注解、父類、接口、成員變量等。getstatic用來讀取類的靜態(tài)變量[arthas12345]$ getstatic com.example.OrderService CACHE_SIZE比如某個(gè)配置類的靜態(tài)字段是在啟動(dòng)時(shí)加載的又沒辦法動(dòng)態(tài)刷新用getstatic能直接看到當(dāng)前內(nèi)存里的值判斷配置是否真的生效了。ognl是最靈活的命令它能在目標(biāo)JVM里執(zhí)行任意表達(dá)式。比如調(diào)用某個(gè)靜態(tài)方法、獲取某個(gè)對象的字段、甚至修改某個(gè)字段的值[arthas12345]$ ognl com.example.GlobalConfiggetConfig()也可以帶上下文執(zhí)行比如獲取當(dāng)前線程上下文的某個(gè)Bean[arthas12345]$ ognl -x 2 #context org.springframework.web.context.ContextLoadergetCurrentWebApplicationContext(), #bean context.getBean(orderService), #bean.queryStatus()ognl的“任意執(zhí)行”能力非常強(qiáng)但也要格外小心它相當(dāng)于給了你在生產(chǎn)環(huán)境執(zhí)行代碼的權(quán)限。尤其是在寫修改類型表達(dá)式時(shí)一定要仔細(xì)確認(rèn)不要改錯(cuò)字段。3.10 mc與redefine動(dòng)態(tài)更新類邏輯redefine是我用得比較謹(jǐn)慎但關(guān)鍵時(shí)刻能救命的命令。它允許你修改已加載類的字節(jié)碼相當(dāng)于在運(yùn)行中“熱更新”類的邏輯。基本流程是先用jad把目標(biāo)類反編譯出來導(dǎo)出源碼到本地改完邏輯以后用mc命令編譯成.class文件再用redefine命令把它加載進(jìn)JVM。步驟如下[arthas12345]$ jad --source-only com.example.OrderService /tmp/OrderService.java # 然后在本機(jī)編輯 /tmp/OrderService.java改好邏輯 [arthas12345]$ mc /tmp/OrderService.java -d /tmp/output [arthas12345]$ redefine /tmp/output/com/example/OrderService.class注意事項(xiàng)redefine只改變后續(xù)新執(zhí)行的邏輯對已經(jīng)執(zhí)行到一半的調(diào)用是無效的而且redefine不會改變類的結(jié)構(gòu)你不能新增字段、不能新增方法簽名、不能增加銷毀原結(jié)構(gòu)。一般我拿它來做臨時(shí)補(bǔ)丁加一個(gè)日志輸出、調(diào)一個(gè)參數(shù)值等等等新的版本發(fā)上去以后就不要再依賴redefine的臨時(shí)邏輯了。警告redefine本質(zhì)上是修改運(yùn)行中的JVM內(nèi)存里的類定義風(fēng)險(xiǎn)等級很高只適合臨時(shí)應(yīng)急。不到萬不得已我建議你先嘗試用ognl修改配置值、用dashboard觀察趨勢最后才考慮redefine。而且redefine前一定要把原始類文件備份好保證能回滾。4. 實(shí)戰(zhàn)案例拆解從CPU飆高到接口超時(shí)的排查全流程4.1 案例一CPU突然飆到500%的線程定位事情大約是這樣的某跨平臺訂單服務(wù)的CPU在下午兩點(diǎn)左右突然飆高監(jiān)控報(bào)警直接打到群里。按照以前的處理方式第一件事是登錄機(jī)器看top找到CPU高進(jìn)程的PID然后jstack導(dǎo)出線程棧再手動(dòng)去找nid對應(yīng)的線程。這一套流程本身沒問題但jstack的線程棧里全是十六進(jìn)制線程ID要對應(yīng)到業(yè)務(wù)線程還得人工比對效率很低。有了Arthas之后流程變成了這樣先附著到目標(biāo)進(jìn)程執(zhí)行dashboard馬上就能看到哪個(gè)線程的CPU占用異常高通常那個(gè)線程的ID還會反復(fù)出現(xiàn)在刷新面板的最前面。然后執(zhí)行[arthas12345]$ thread -n 3Arthas會直接打印出CPU占用最高的三個(gè)線程的完整堆棧自動(dòng)把線程名稱、CPU時(shí)間、堆棧都組裝好了。那次我一眼就看到某個(gè)線程卡在一個(gè)XML解析方法內(nèi)部最底層是在JVM里做正則匹配數(shù)據(jù)量一大CPU直接被吃滿。順著棧里的業(yè)務(wù)類名很快就對應(yīng)到了代碼行發(fā)現(xiàn)是一個(gè)對超大字符串做了多次replaceAll的循環(huán)屬于典型的正則回溯問題。這個(gè)案例關(guān)鍵點(diǎn)在于thread -n非常省事省掉了jstack 人工匹配nid的過程。如果只靠jstack十幾分鐘能定位就算不錯(cuò)了用Arthas一兩分鐘就鎖定了根因。4.2 案例二接口偶發(fā)超時(shí)怎么抓到慢調(diào)用的具體位置另一個(gè)印象深刻的案例是某個(gè)查詢接口偶發(fā)超時(shí)時(shí)好時(shí)壞。我先打開trace守護(hù)在入口方法上[arthas12345]$ trace com.example.QueryService queryDetail #cost 1000跑了大約十分鐘抓到了一次耗時(shí)1200毫秒的調(diào)用快照。結(jié)果顯示大部分耗時(shí)花費(fèi)在調(diào)用下游的某個(gè)HTTP接口上時(shí)間約900毫秒而我對這個(gè)下游HTTP接口的容錯(cuò)判斷閾值是500毫秒所以導(dǎo)致上游超時(shí)。順著這個(gè)線索檢查了下游服務(wù)的響應(yīng)時(shí)間分布發(fā)現(xiàn)是對方服務(wù)在整點(diǎn)時(shí)刻做批量任務(wù)導(dǎo)致該時(shí)段RT拉長。后續(xù)調(diào)整了調(diào)用方的超時(shí)時(shí)間并且給這個(gè)下游調(diào)用增加了本地緩存問題徹底解決。如果不用trace靠加日志排查這種偶發(fā)問題可能要發(fā)好幾個(gè)版本才能抓到一個(gè)慢樣本而且很有可能會因?yàn)殡S機(jī)性導(dǎo)致錯(cuò)過現(xiàn)場。trace的價(jià)值在于它不需要任何提前埋點(diǎn)事后診斷能力很強(qiáng)。4.3 案例三方法返回值為什么和預(yù)期不一致還有過一次經(jīng)歷是同事在排查一個(gè)對賬系統(tǒng)的金額計(jì)算差異。日志里打了入?yún)⒁泊蛄俗罱K返回值但中間經(jīng)過了好幾個(gè)子方法的嵌套調(diào)用看不出是哪一步把金額改錯(cuò)了。這種情況watchstack組合拳非常管用。先watch最外層方法看看入?yún)⒑妥罱K返回值如果出入?yún)]問題就深入內(nèi)部方法分別watch找到第一個(gè)出現(xiàn)差異的那一層。當(dāng)時(shí)我們用watch單獨(dú)盯了一個(gè)金額調(diào)整的方法抓到的入?yún)⑹且粋€(gè)對象對象的某個(gè)金額字段是100.00但returnObj返回時(shí)變成了99.99。再往下一層看發(fā)現(xiàn)里面調(diào)用了一個(gè)舍入工具舍入模式默認(rèn)是向下取整而業(yè)務(wù)方預(yù)期是四舍五入。順著這個(gè)鏈路往下追又用stack查了舍入工具方法的調(diào)用來源確認(rèn)只有這一條業(yè)務(wù)路徑走錯(cuò)了舍入模式。整個(gè)過程沒有重啟、沒有改動(dòng)一行代碼一個(gè)下午就把根因挖干凈了。5. 常見問題與排查思路Arthas使用中踩過的坑5.1 attach失敗提示Unable to open socket file這個(gè)報(bào)錯(cuò)最常見的場景是你用的系統(tǒng)賬號和目標(biāo)Java進(jìn)程的啟動(dòng)賬號不一致。比如應(yīng)用是用service用戶啟動(dòng)的你sudo到root用戶執(zhí)行Arthas那么Arthas無法讀取目標(biāo)JVM的臨時(shí)目錄文件就會出現(xiàn)socket文件路徑相關(guān)報(bào)錯(cuò)。解決辦法很直接換成和啟動(dòng)進(jìn)程相同的用戶執(zhí)行。如果一定要root操作可以考慮安裝Arthas到目標(biāo)用戶目錄下并用su切換到該用戶后再啟動(dòng)。5.2 所有命令都能執(zhí)行但watch/trace沒有任何輸出這個(gè)有兩種可能。一種是方法已經(jīng)啟動(dòng)了很久沒有被調(diào)用你可以先用monitor確認(rèn)調(diào)用是否真的存在。另一種是方法是在其他類加載器里加載的而Arthas默認(rèn)匹配的類加載器集合不對。特別是用到自定義類加載器、OSGi環(huán)境時(shí)需要用sc -d確認(rèn)類的類加載器信息然后用classloader命令配合指定類加載器再觀察[arthas12345]$ classloader -l然后指定類加載器的索引再對目標(biāo)方法執(zhí)行watch。你也可以用watch時(shí)帶上-c參數(shù)指定類加載器的hash值。當(dāng)然現(xiàn)實(shí)中多數(shù)Spring Boot應(yīng)用是單一類加載器基本不會遇到這類問題。5.3 對象層級太深輸出被截?cái)嗄J(rèn)情況下Arthas為了避免把大量數(shù)據(jù)一股腦打印出來會限制OGNL表達(dá)式輸出對象的展開深度。如果你想看更多字段用-x參數(shù)調(diào)大即可。比如[arthas12345]$ watch com.example.OrderService createOrder {params, returnObj} -x 5如果-x調(diào)得太大導(dǎo)致輸出非常長影響閱讀可以同時(shí)用-n限制觀察次數(shù)比如-n 3只輸出三次結(jié)果。5.4 ognl表達(dá)式寫復(fù)雜了容易出錯(cuò)怎么調(diào)試ognl表達(dá)式在Arthas里雖然功能強(qiáng)大但一旦寫復(fù)雜了語法錯(cuò)誤可能比業(yè)務(wù)代碼本身還難排查。我的習(xí)慣是先在本地用一個(gè)簡單的Spring Boot應(yīng)用試表達(dá)式確認(rèn)無誤了再拿到生產(chǎn)環(huán)境執(zhí)行。還有一個(gè)技巧是拆分成小的表達(dá)式逐步驗(yàn)證先獲取對象引用再訪問字段不要一口氣寫超長的OGNL鏈條。比如你想拿到Spring容器里的某個(gè)Bean并調(diào)用方法可以先執(zhí)行[arthas12345]$ ognl #ctxorg.springframework.web.context.ContextLoadergetCurrentWebApplicationContext(), #ctx確認(rèn)這個(gè)對象能拿得到再去擴(kuò)展后面的字段訪問。5.5 Arthas本身對性能的影響很多人會擔(dān)心Arthas附著之后影響業(yè)務(wù)性能。實(shí)話實(shí)說開啟watch/trace/monitor這類命令會對目標(biāo)方法做字節(jié)碼增強(qiáng)有一定額外開銷。如果目標(biāo)是低頻方法影響幾乎可以忽略如果目標(biāo)是高QPS方法性能損耗會明顯一些。所以生產(chǎn)使用有幾個(gè)原則只在需要排查的時(shí)間窗口打開命令用-n限制記錄次數(shù)用完馬上關(guān)閉。不要同時(shí)開啟大量方法的trace/watch。優(yōu)先用dashboard和thread這類低開銷命令做初步排查鎖定目標(biāo)后再用watch/trace做精細(xì)分析。5.6 Arthas版本太舊導(dǎo)致命令行為不一致Arthas迭代速度比較快一些命令的參數(shù)和輸出格式在舊版本里可能不兼容。如果你發(fā)現(xiàn)某個(gè)命令行為和文檔不一致優(yōu)先檢查版本[arthas12345]$ version建議下載最新release版本并保持目標(biāo)環(huán)境和運(yùn)維腳本里使用的版本一致免得今天在這臺機(jī)器上可用、明天換臺機(jī)器就報(bào)錯(cuò)。5.7 容器環(huán)境里attach的特殊情況容器化部署越來越普遍在容器里用Arthas有時(shí)會遇到PID namespace限制導(dǎo)致attach失敗或者容器里沒有安裝完整JDK只有JRE。解決辦法是基礎(chǔ)鏡像里提前安裝JDK而不是只有JRE。使用Arthas的agent模式啟動(dòng)應(yīng)用避免動(dòng)態(tài)attach的限制。容器內(nèi)執(zhí)行Arthas時(shí)確認(rèn)/tmp目錄可寫并且PID對得上宿主機(jī)還是容器內(nèi)的Namespace。5.8 無法訪問8563端口如果Arthas在遠(yuǎn)程機(jī)器上運(yùn)行而你想從本地連上去操作需要確保8563端口默認(rèn)telnet端口和8562端口默認(rèn)HTTP端口被你當(dāng)前的網(wǎng)絡(luò)允許連接。一些公司內(nèi)部網(wǎng)絡(luò)策略較嚴(yán)格需要提網(wǎng)絡(luò)放行申請或者你可以用ssh隧道把遠(yuǎn)程端口映射到本地再訪問這樣就不用額外開防火墻端口了。整體來說Arthas確實(shí)是一個(gè)讓我“用過就回不去”的工具。它解決的不是某一個(gè)具體的問題而是把人從“盲人摸象”的排查模式里解放出來讓你能直接看到運(yùn)行中JVM的內(nèi)部。剛開始接觸時(shí)可能會被它的命令數(shù)量嚇到但只要把dashboard、thread、jad、watch、trace、tt這幾個(gè)核心命令用熟就已經(jīng)能覆蓋絕大部分日常排查場景了。我自己一次一次踩坑之后才慢慢意識到滿屏的命令并不可怕關(guān)鍵是把每一條的適用時(shí)機(jī)記清楚——先看全局再鎖線程然后用watch或trace深入方法內(nèi)部再用ognl處理疑難雜癥這套思路比硬記命令參數(shù)重要得多。希望這篇文章能幫你少走一些彎路也歡迎你把這些命令在測試環(huán)境多試幾遍熟能生巧之后線上問題再也不用靠“重啟大法”來解決了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
伊人网一本| 99国产人成精品| 日本操逼二区| 亚洲综合嫩| 十八禁网站在线| 啊啊啊啊啊啊在线观看| 青草青青久久久久久国产| 午夜传煤十二区精品| 色九月| 快播久久人人aV| 日本一级二级三级网站| 福利视频网站| 欧美熟女妇同| 囯产乱伦一区二区三女 | 精品国产99999| 91天美传媒精品| 日韩免费大片一级播放| 91天天综合在线观看| 艳美熟妇先锋一二三区| 亚洲欧美中文一区二区三| 9118禁| 欧美另类天堂| 97国产精选| 日韩中文字幕2020| 色999亚洲人成色| 性爱乱伦视频免费| 躁躁躁日日躁2020| 欧美精品 - 91爱爱| 美女尤物福利视频| 91人妻做a观看视频| AAAA级日本片免费视频| 欧美一区二区三区四区综合| 中文字幕熟女人妻丝袜丝| 亚洲永久AV无码精品秋霞| 日韩人体偷拍| 久久久久久久久久久久久9999| 在线看片国产精品每日更新| 丁香六月激情| 国产精品扒开腿做爽爽爽视频| 一区 欧美 日韩 麻豆| 911av网站免费观看| 9ⅰ久久久天天| 97色插| 67914亚洲精品| 亚州精品一区二区三区香中文字幕在线| 立川理惠加勒比无码| 啊啊啊啊啊啊在线| 超碰色综合| 亚洲美腿丝袜香蕉影视欧美成人| 久久97精品久久久久久久不卡| 国产亚洲精品美女| 日韩精品人妻系列无码天堂| 成人看片网站| 天天综合网一91网| 99在线观看无大码| 久久风骚城市| 亚洲日韩人妻中文字幕一区| 青青草中文字幕| 玖玖爱影院| 亚洲熟伦熟妇AV无码春色| 夜夜爽夜夜高潮夜夜爽| 凹凸视频在线一区二区| 老司机深夜18禁污污网站| 久久久涩| 先锋女优在线观看视频| 日韩激情电影中文字幕| 综合影视国产无码| 天天舔天天| 91色黑人少妇| 蜜桃网熟妇| 日日爱99| 夜夜影视四色| 国产suv精品一区二区四区999| 伊人网在线观看| 啊啊啊啊好大好硬啊啊啊啊啊| 日韩二级| 97这里只精品| 久久久96| 国产成人自拍视频在线| 青青操在线亚洲视频观看欧美在线| 在线一区| 偷拍 欧美 日韩| 国产精品久久久久久久毛片1| 国产又黄又爽又刺激久久久久久| 入口操逼网站| 台湾佬中文娱乐自偷自拍| 欧美性爱一区| 干B网| 97综合国产| 国产成人无码a| 天天插天天射| 久操99| 亚洲色图自拍| 大香蕉综合网| 一区二区视频在线播放| 亚州色站 日韩电影| 亚洲永久永久永久永久一级一级一级精品| 亚洲少妇视频| av午夜影院在线播放| 99热综合在线| 欧色网址| 亚洲欧美中文日韩视频中国语| 久久99精品视频| 欧美日韩亚洲高清不卡一区二区三区| 99国产精品久久久在线播放| 亚洲无码视频免费在线观看网址! J?P?NESEHD熟女熟妇伦 | 日欧毛片久久| 午夜精品五区| 啊啊啊啊啊啊啊啊啊啊在线观看| 中文字幕精品亚洲熟女| 日本一区二区三区四区免费观看| 国产久久一区二区三区野外在线| 干B网| 国产懂色精品国产av| 成人天天看站长推荐| 91精品人妻一区二区三区蜜桃| 操逼操操操91| 精品无吗久久| 内射老妇BBWX0C0CK| 五月天婷婷成人网| BBBBB97COM| 久久肏大逼| 超碰97首页| 九九精品无码专区免费| 在线国产探花| 蜜臀AV成人精品蜜臀| AV天黑人| 婷婷深爱五月| 久久成人东京热人妻| 国产呦精品一区二区三区下载| 伊人网在线视频| 熟妇的味道HD中文字幕| 久久中出在线| 欧美精品xxxwww| 91青视频| 久久久久久久久久va| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 日本免费亚洲欧美| 亚洲色婷婷综合久久久久中文| 欧美性爱五月天| 欧美日韩亚洲五月天婷婷| 欧美自拍偷拍综合图片| 大香蕉色欲AV| 超踫中文字幕| 精品丝袜无码一区二区三APP| 欧美 亚洲 另类 综合| 丰满人妻无码一区二区三区| 91青青在线视频| 欧洲亚洲国产综合在线| 日日夜夜模| 小视频国产| 综合激情一一91| 国产精品秘 福利姬在线观看| 九t超碰| 色呦呦、国产精品| 久久国产成人精品国产成人亚洲| 五月天婷婷小说| 偷拍精品一区二区三区| 后入式视频国产自| 婷婷综合| 成人日韩3| 无码人妻系列少妇| 天天狠| 十八禁成人网站在线观看| 久久99干一本高清| 嗯~啊~快点 死我视频免费看网站| 日本在线观看网址| 91精品少妇搡搡搡| 日韩激情视频| 一区二区激情国产熟女| 国产400孕妇孕交群| 欧美 日韩 国产传媒| 最近2019中文字幕国语免费版| 麻豆精品A片免费观看| 凸凹视频在线观看| 精品国产一区探花在线观看| 99999国产| 蜜臀AV成人精品蜜臀| 亚洲成人免费在线| 久久老子无码午夜伦不卡| 日韩av无码网站| 综合一区二区影视| 精品视频97| 美日韩成人| 亚洲一区二区AV| 日韩综合97P| 亚洲情色91| 欧美性爱一级操| 亚洲国产美女久久久久| 97视频免费播放| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 超碰91在线| 人人操人人干网页| 久热在线精品免费观看| 激情 欧美 亚洲 小说| 中出91视频| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 美国三级日本三级久久99| 禁止观看美女黄| 91啪啪| 国产精品午夜高潮呻吟久久av| 国产日韩区| 人妻另类 专区 欧美 制服| 日本天天干天天操一区| 91久久婷婷| 精品9999| 老鸭窝成人| 制服丝袜第二页| 99蜜桃臀久久久欧美精品网站| 99热在线不卡| 亚洲色91C| 欧美狠狠操| 97人亚洲综合字幕| 超碰1997| 自拍啪啪视频| 久久一区二区蜜桃| 天天草夜夜草高潮片| 欧美中文字幕日韩在线| 百度百度日本操逼| 老熟女乱子伦中文字幕一区二区| 女人 A一级| 伊人网综合在线视频| 天天插夜夜操| 欧美激情综合色综合啪啪五月| 大香蕉AV在线| 偷拍欧美激情| 伊人少妇久久久| 久久偷偷色综合蜜桃| 夜夜国自区| 鸥美中出| 国产精品农村妇女| 欧美.亚洲.另类.丝袜.制服.诱惑| 欧美日本天堂| 性爱Av免费| 人人妻人射| av日韩手机在线影视| 睡产熟女乱伦| 口爆综合网| 欧美,日韩综合久久| 国产精品熟女九色九色蜜臀| 日韩不卡a级视频专区| 99色热| 动漫片子网站3黄| 国产乱弄免费在线视频。| 九9热伊人| 天天综合,91入口| 78超碰| 岛国色情视频在线观看| 五月丁香激情综合| 欧美视频激情久久久久久| 插入粉嫩少妇视频| 91美女网站| 免费在线黄片视频| 夜夜夜久久| 丰满欧美放荡少妇在线| 91在线视频国产网站| 丁香六月激情| 亚洲 图片 综合91| 天天搞欧美| 国产一区二区免费福利片| 黄片免费看黄片免费看| 99只有精品| 超碰78| 国内自拍 日韩激情 99| 欧美78| 中文?日韩?免费?精品| 国产一区二区三区导航| 宗合情欲网| 东北女人性交| 国内精品伊人久久久久影院会| 后入内射蜜桃臀| 亚洲好色人妻| 干干干天天| 亚洲综合在线高清| 女性91网站| 九九色精品| 麻豆黄站| 欧亚性爱啪啪| 99热国产精品| 偷拍自拍在线视频观看| 久久久久亚洲一区女同性恋中文字幕| 九九九免费视频| 黄色av一区二区在线| 欧美白嫩在线放| 精品视频在线观看精品| 午夜情侣自拍网站| 蜜桃av色偷偷av老熟女| 激情五月天网站| 后入式福利| 中文字幕精品资源在线| 久久精品操| 一起草精品人妻| 午夜综合在线| 国产福利av精彩对白| 天美传媒Av在线| 成人自拍三级在线观看| 老熟女熟妇| 亚欧毛片基地国产毛片基地| 91色五月俺来也| 亚洲高清视频在线免费观看| 天天操天天射青青草| 香港澳门日本三级网站| 亚洲熟妇丝袜在线观看| 国产内射爽爽大片| 久久久中文版| 一本一道波多野毛片中文在线| 亚洲欧美性生活| 亚洲欧美一区二区网址| 免费网色网站| 牛黄色久午久| 亚洲天堂2020| 久久久中文版| 综合自拍| 国产偷人伦激情在线观看| 亚洲欧美综合色| 日韩三A大片在线观看| 精品网站99999| 国产极品一区二区三区三州| 国产精品伦理| 国产版a级片直播在线| 日本性一区| 婷色五月| 天天视频黄网站| 97久久超碰亚洲| www.夜夜操| 国产又黄又粗又猛大片| 欧美 日韩 另类 亚洲| 激情综合二| 麻豆天美在线| 久久、1234| 在免费jIzzjIzz在线视频| 超碰久草| 欧美日韩一干二干| 亚洲操操| 欧美亚洲另类在线蜜桃| 91视频综合网| 99热在线只有精品| 色噜噜人妻丝袜AV资源| 亚洲欧美成人在线| 国产毛片在线| 欧美综合网在线| 激情五月天校园春色网| 久久精品人体AV| 欧美日韩国产黄色片| 久久岛国| 成人开心网在线视频| 粉嫩国产精品久久粉嫩| 屁屁影院一区二区三区国产| 日本视频在线中文字幕| 4tube欧美女厕所| 午夜福利久久久噜久噜久久综合 | 丁香激情五月| 日韩性爱电影一区| 天天激情干| 好爽视频在线观看视频| 区自美91| 亚洲综合九| 99热这里只有精| 精品性爱无码在线播放| 日本操逼视频导航| 成人av在线播放| 色色九区| 天躁夜夜躁2021| 国产精品毛片| 男女性扦B| 97视频www| 麻豆乱码久久精| 色香色香欲天天天影视综合网| 国产小视频91| 三级网色| 欧美一区二区亚洲天堂| 97人人操人人摸人人爱| 思思热免费在线视频| 乱伦熟女论坛| 日本视频在线中文字幕| 翔田千里无码一区| 日本国产二线女色| 91丨精品丨国产丨丝袜| 黑丝日韩av丝袜av| 色天堂在线观看| 干B| 性性欧美| 亚洲精品黑丝| 青青草综合在线| 超碰这里有精品| 91久久久久久久| 国产成人精品一区| 精品少妇高潮久久| 熟女熟妇一区二区三四区| 五月天日日操夜夜操| 蜜桃臀久久| 日日爽熟女| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 久久久草草精品| 欧美第一页| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 中文字幕熟女人妻丝袜丝| 色偷偷人人玩人人舔人人操人人摸人人爽 | 凌辱美少妇久久aV| 偷拍精品一区二区三区| 尹人免费观看视频在线| 可以在线观看的黄色网址| 国产一级特黄大片处女| 在线观看黄色电话| 黄色大片一区二区密桃丝袜| 91在线限制级| 国产熟女二区| 久久久久熟女| 在线毛片片免费观看| 天天看天天在线精品| 1769一区二区| 丝袜美腿诱惑亚洲欧美视频在线观看 | 簧片免费看视频| 丁香五月天啪啪| 中文字暮97| www.高清无码诱惑一区.com | 亚洲AV不卡在线观看尤物| 偷拍片久久| 国产精品夜夜| 在线强奷到舒服的无码视频| 男人的天堂亚洲| 久草在| 91欧美网| 日韩Va亚洲va欧美Ⅴa久久| 99久久久久| 九九热五区| 快播久久人人aV| 亚洲无码精品AV久久久| 97久久视频| 亚洲激情色片| jazzjazz国产精品麻豆| 婷婷AV一区二区三区| 亚洲s在线观看| 视频在线中文字幕| 久久久久久网址| 久久婷婷综合国际产色怕| 日韩精品99999| 亚洲色香| 伊人网免费视频| 亚洲一区二区麻豆影院| 日韩AV噜噜噜一区二区三区四区| 摸奶性爱视频网站在线免费播放| 婷婷五月天AV| 影音资源男人日韩| 最好看的中文字幕在线2018| Av色五月| av黄图片在线观看| 五月丁香影院| 日韩天天综合| 色婷婷九月天天综合| 日本九九久久99播| 高清孕妇孕交 交| 3D污黄视频在线观看| 夜夜狼人妻| 91人人| 97干在线视频| 97久久超碰日韩精品| a天堂视频| 少妇色综合| A一区片| 91丨国产丨白浆| 欧美成97爱| 高清国产av无码| 综合色久欲| 亚洲超碰AV| 97天天在线| 婷婷中文网| 九九九九九九免费视频| 日韩不卡a级视频专区| 天天内射| 欧美婷婷五月天| 日本二区不卡| 九九热精品| 94色色电影网| 国产丝袜视频| 少妇被c 黄 免费观看| 亚洲天堂人妻一区二区| 男人的天堂 在线一区| 99热超碰| 久久久精品电影| 亚洲免费97免费| 蜜乳Av成人片网站| 天天天操天天天爱| www.色婷婷| 中文视频在线观看| 欧美日韩国产男人| 8050午夜少妇无码| 69一区二区三区 | 97操综合| 长长久久曰曰夜夜成人网| 性色A∨91| 欧美综合97www| www.久久制服糖| 人妻人妻天天碰| 亚洲AV无码国产成人| 亚洲综合网91| 久久久久久波多野吉衣高潮| av天堂手机版追回| 99国产精品| 综合网欧| 午夜精品视频777| 色噜噜国产精品视频一区二区| 男人下部插入女人下部 | 蜜桃视频精品一区二区三区| 爽极品影院| 伊人欧美大香蕉视频| 97干日韩| 性爱乱伦网址| J?P?NESEHD熟女熟妇伦| 97超级色碰碰| 动漫片子网站3黄| aaaa少妇高潮大片| 视频国产成人精品日本亚洲18| 亚洲色图综合网| 久热69九色熟妇97| 国产精品探花在线| 51国产午夜精品视频| 久9综合在线| 熟女自慰久久久| av天堂5| 成人av性爱电影在线观看| 亚洲人综合| 欧美性,亚州色| 亚洲AV无码乱码在线观看性色| 翔田千里A片一区二区| 99热线麻豆 | 60秒免费小视频| 床上啊啊啊一区二区三区| 日韩av不卡在线看| 日韩欧美大片免费高清啪啪| 97国产|免费| 91欧美性| 久久綜合很很很| 少妇高潮99p| 婷婷五月天影院| 天天色,天天干,天天干| 国产精品久久aV| 九九九九九精品| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 亚洲999综合| 欧美18禁91| 欧美|91色综合| 强奸乱伦αv片| www.91逼逼.com| 男女激烈网站最新| av网站国产主播在线| 久久系列| 九九热三级片| 国产综合久久久麻桃个| 欧美精品激情| 综合久久2017| 好吊色青靑草| 96精品久久久久久久久久| 99re28在线观看| 欧美日韩亚洲少妇寂寞影院正在播放| 亚洲人精品午夜不卡| x97av| 久久视频,这里只有精品 | 国产搭汕a级片| 玖玖无码超碰| 清纯唯美综合| 精品78| 日韩肏逼视频| 欧美一区二区三区互相| 日本一区视频在线观看| 久久男人精品| 午夜黄色免费在线观看| 六月色色| 97精品国产97久久久| 91网站18在线观看| 9超碰免费| 男人天堂综合| 97爱啪| 色色九区| AⅤ片水多多| 免费一级黄色录像影片| 国人欧美精品一区二区| 亚洲中文字幕av| 天天爽天天爽| 欧美超碰96| 丝袜色综合| 黑人性暴力毛片| 精品人妻一区二区三区在线视频不卡| 国产精品人妻免费精品| 素人一区二区三区日韩| 欧亚免费视频| 97操97色| 夜夜操夜夜高潮夜夜爽国产精品区| 久久99干一本高清| 尤物网站91| 黄色区免费观看中文字幕| 日韩不卡a级视频专区| www.婷婷| 欧洲精品区| 亚洲人天堂| 97人妻免费中文字幕| 久久女人一区二区三区| 校园春色亚洲无码| 97av在线观看| 亚洲高清无码在线桃色| 亚洲无套久久嗯嗯| 亚洲精品国产熟女久久久| 国产99999| 不卡一区二区日本视频| 天天射网| 欧美日韩亚洲少妇寂寞影院正在播放| 国产亚洲精品一区二区三区| 亚洲九区| 日韩综合97P| 久久精品国产亚洲AV先锋| 男人a天堂手机在线版| 久久黄黄| 大香蕉2017| 国产亚洲精品美女久久久| 开心五月激情网| 在线亚洲丝袜视频网站| 私人尤物在线精品不卡| 99无码视频| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 久久成人精品| 久久久精品电影| 蜜臀久久99精品久久久老,,| 色97国产69香蕉| 久久性生大片免费观看性| 97国产成人精品免费视频| 99热aaa| 天天综合91| 亚洲中文字幕网| 粉嫩久久久极品| 人人操人人操人人操人人操人人操人人人11.CM | 九九色热| 亚洲丝袜二区在线| 肉嘟嘟www视频在线观看高清| 欧美久久毛片基地| 免费成人自拍视频在线| 亚洲 日韩 欧美 国产综合体| 天天操天天日天天干| 国产精品爱欲| 九九成人精品| 欧美五十路熟| 9久久美女首页| 亚洲AV成人无码一二三久久 | 日韩无码一级黄色av片| 四月丁香婷婷| 襙一襙| 亚洲AO在线| 一级性爱视频免费观看| 亚洲天堂另类小说男人| 精品久久久av无码免费| 久久亚洲不卡一区二区三区| 午夜亚洲WWW湿好大| 欧美熟妇乱码在线一区| 三级日韩一区二区三区| 天天爽夜夜欢视| 伊人操你| 久久AV色| 久操精品网| 蜜臀久久99精品久久久久久-DVD| 国产精品交换一区二区| 亚洲男人天堂av| 久艹伊人精品综合在线| 国产AV色黄看到爽| 国产精品在线一区二区| 自慰白浆在线观看| 蜜臀久久久99久久久久 | 国产精品亚洲免费| 精品亚洲天堂| 9999伦理视频| 国产欧美一级在线观看| 欧美综合色综合| 性爱综合网| 自拍偷拍 日韩欧美| 九九热精彩视频| 操屄不卡视频| 男人亚洲天堂| 亚洲国内精品成人不卡| 中文字幕在线高清男人的天堂| 国产熟女无套内射| 九九亚洲精品| 五月丁香色情| 综合av社区| 丁香五月天激情网站| 国语精品对白| 久久天堂婷婷网| 伊人一级免费黄片| 91青青在线视频| 久久久草成人网站久久久草成人久久久草久久久 | 亚洲欧洲综合av在线| AV久日| 久久五月份| 天天日天天搞天天干| 日韩电影中文字幕| 久热精品色情| 99热网站| 日本操嫩b网| 91精品国产91综合久久蜜臀| 亚洲综合69| 1区2区3区在线视频| caoni国产亚洲av| 2019天天干| 日本久久久精品电影| 99爱久久视频频| 亚洲高清无码免费观看视频| 白丝被操91| 操熟女91| 久久久少妇诱惑精品视频| 日韩天堂av电影在线观看| 久久亚洲精品成人av| 久久丁香久草综合网| 伊人九九| 亚洲高清在线se| 日本精品国产视频| 国内91熟女人妻丝袜天天精品视频在线| 一起草日韩| 呦呦影院| a级免费在线观看| 中国少妇啪啪视频| 综合情欲网| 欧美熟女丝袜| 欧美久久婷婷| 78p欧美| 美国美女AV在线| 免费视频无码| 亚洲欧洲另类| 免费综合亚洲中文| 户外裸露刺激视频第一区| 飘花国产午夜精品不卡| AAAA欧美日韩| 亚洲熟伦熟妇AV无码春色| 日韩15p| 欧美劲爆第一页| 日韩91网| 亚州欧美另类| 78精品| 超碰色97| 国产三级片在线观看| 欧美亚洲特P| 欧色网址| 男人天堂网址| 家庭乱伦麻豆| 中文操逼字幕| 黄色大片免费在线| 国产多人在线观看视频| 黄片免费视频2019| 飘花国产午夜精品不卡| 国产操伦| 亚洲精品一区二区三区在线播放| 日韩 欧美 另类 人妻| 午夜一区二区三区国产| 在线国产福利网址导航| 亚洲精品啪视频| 欧美日韩操逼嗦吊| 激情综合五月| 狼天天狼天天大香蕉| 日韩女优在线| 免费人人搞97| 9 9无尺码天堂网| 97在线视频观看免费| 四虎在线视频| 成人精品无码| 在线观看成人性爱免费小视频| 国产精品自拍xxxx| 欧美在线干| 国产日本熟女顶级一区二区三区视频| 一区久久久二区| 欧洲精品网| 久久久无码精品人妻二区| 九久精品| 日本性爱欧美性爱| 色牛牛AV| 高凊专区人人操| 久草男人天堂| 亚洲熟女诱惑| 成人av在线播放| 亚洲AV成人无码一区二区三区在线观看| 大香蕉婷婷| 久久、1234| 97久操| 69av一区二区三区| 亚洲经典啪啪| 91夜夜蜜桃臀1区2区3区| 91色综合色| 日日爱99| 一区二区三区精品视频| 人妻精品4K4K4K4K4| 九热超碰| 精品久久久av无码免费| 亚洲一区二区性爱电影| 人妻插插人妻人| 久久精品一区一起草| 女性喷水高潮在线观看| 亚洲乱熟女一区二区三区大香蕉| 日韩美女久久一区二区三区| 东京热99999| 你懂的在线观看区国产| 亚洲激情四射| 伦理弟一页| 天天色图| 国产精品电影| 校园春色综合香蕉| 亚洲成人激情小说视频| 日本韩欧美在线播放a| 天堂精品小草| 97干在线| 五月天开心网| 97久久天天综合色天天综合色电影 | 操逼视频亚洲| 天美一二三在线观看Av| 亚洲精品人体| 综合一区中亚洲国产成人综合精品| 夜夜久久| 日本中文熟女视频| 亚洲麻豆精品二区三区| 欧美特黄视频网站| 国产无马视频| 欧美亚洲se91| 国产强奸乱伦xd| 精品射1999| 激情小说在线视频| 操人妻少妇中文| 男人的天堂VA| 日本护士高潮| 亚洲情色无码一区二区三区| 国内毛片婷婷六月色| 色噜噜人妻丝袜AV资源| 亚洲日韩av专区无码| 中文字幕老熟妇黄色视频| 四虎av在线| a在线视频免费观看| 香蕉大久久久| 久久久久成人亚洲国产| 亚洲高清少妇| 欧美强奸乱| 91美女视频电影| 秋霞免费AV| 美女骚尻视频| 最近的最新的中文字幕视频| 久操视频免费观看| 亚洲 国产 精品一区| 搡老女人老91妇女熟女| 免费A V在线播放| 日韩av情韩国爱禁区av一区二区| 玖玖玖玖精品国产剧情| 欧美色图在线视频少妇| 深夜激情无码| 九九九不卡| 伊人天堂在线| 亚洲 欧美 日韩 国产一区二区| 强奸少妇AV导航网| 亚洲精品国产无码高清| 一本一首道人妻少妇免费久久| 久久国产乱子伦精品免费女人| 精品一国2| 欧美网站免费| 久久9精品| 有码免费观看| 亚洲精品三区在线观看| 五月天亚洲网| 人妻久久久| 日本性感人妻91| 国产第二页| 天天天天天干夜夜夜夜夜操| 超碰九区| 国产精品91ai| 国产精点久久久成人| 美女9118禁| 日韩精品人妻系列无码天堂| 又大又长又粗又爽又黄| 亚洲天堂电影网99999| 女优视频第10页| www.yeyecao| 亚洲国产97在线精品一区| 色999人与兽| 久久东京伊人一本到鬼色| 中文字幕第7页| 亚洲丝袜色图| 牛黄色久午久| 国产精品麻豆成人av| 97天天在线| 吻戏激情性巴克| 天天色,天天干,天天干| 色淫网站优优视频| 国产精品视频| 精品国产乱码久久久久久久久1 | 欧美男人一区| 浪人综合网| 久久久久97| 亚洲伊人青青草| 欧美熟妇人体| 性一交一乱一交A片久久四色| 精品免费视频国产一区| 久久久久九九九九九| 99re6国产精品99re在线| 岛国AB视频| 日韩欧美性吧婷婷乱伦大香蕉| 豆1无夜无码| 亚洲男人的天堂V| 免费看日产一区二区三区| 国产亚洲日韩欧| 九九九九九九九九九国产精品| 热久日综合| 欧美色三级片91| 强奸xx国产| 欧美另类精品xxxx| 一区二区三区美女超清| 日本加勒比无码专区| 97在线资源| 免费9 1久久| 96精品在线| 日本岛国黄色网址| 午夜精品五区| 国产又黄又粗的视频| 亚洲AV无码乱码| 这里只有97精品| 99蜜月精品久久| 国产一区二区三区,在线观看观看| 青青11操操操操操操操操| 香蕉婷婷| 探花激情视频| 亚洲 欧美日韩 另类| 老熟女乱子伦中文字幕一区二区 | 香港日本韩国人妇99www.wccm20| 91ise欧美| 五月丁香影院| 99在线精品观看99| 人妻熟女av国产网站| av午夜影院在线播放| 国产精品无码久久久久2028| 性久久久| 影音先锋日本一区二区| 天天看精品动漫视频一区| 凹凸视频在线一区二区| 91丨人妻丨国产丨丝袜| 亚洲图片欧美| 国产成人亚洲精品无| 97超碰色色| 美女91网站| 操逼操逼操| 26uuu最新| 91精品人妻偷情| 精品国产三级av韩国在线| 26UUU欧美日本| 欧洲在线性爱视频| 思思热在线视频免费| 国产精品久久久久无码Av网曝门| 亚洲精品国产精品成人| AA级电影三区| 黄色一区二区秘书性感| 久草免费福利在线播放| 人人干人人搞人人摸| 欧美一级黄片免费播放| 99色色网| 美日韩一卡二卡三卡免费人妻精品| 婷婷三区| 妇人噜噜| 日本天堂在线播放| 99热一区二区三区四区| 少妇综合网| 国产无码高清操逼视频| 日韩色| 成人丁香五月| 美女人妻色网站| 久久一二三四五六七八九区区| 日日妻色网| 78精品在线| 亚洲一区二区三区春色| 人人操肉肉| 国内自拍 日韩激情 99| www.狠狠干.coom | 黑人粗大V S日韩女优视频| 亚州欧美在线| 妇女性内射冈站HDWWWCOM| 日韩乱伦影音先锋| 水野优香在线观看| 日韩9999| 91免费看中出视频| 人人人摸人人| av凤凰久久久| 欧美黄色图片| 99精品综合久久久久五月天| 蜜桃av色偷偷av老熟女| 丰满岳乱妇一区二区三区| 色婷婷av在线观看| 国内操逼视频二区| 99re28在线观看| 操操逼视频| 99精彩视频| 麻豆精品天美| 伊人麻豆传媒| 久热香蕉精品在线视频| 天美国产精品| 久久久91福利姬| 成人小说另类在线| 久久99精品视频| 日日夜夜草草草| 久久区| 国产亚洲精品第一最新| 97久久精品亚洲中六字幕| 大香蕉2017| 日本一区视频在线观看| 蜜臀av一区二区三区免费观看| 东京热熟女亚洲视频网站| 欧美综合网在线| 日韩AV熟女乱伦| 中国黑人三级片网站上区| 天天干人人乐| 曰韩成人免费视频| 欧美A√综合网| 国产性爱强奸乱伦大全| 久久激情综合| 女上位精品在线| 免费一级性爱久久| 99自拍B亚洲 | 日本三级网页| 九九九九日本| 国产强奸无码乱伦| 好吊妞转入那个网| 精品人妻一区二区蜜桃视频| 中文字幕日韩人妻视频| 97色插| 97欧美精品| 亚洲日韩一区电影| 99久在线精品99re8蜜桃| 91成人精品在线播放| oumeizonghese,www| 亚洲av综合伊人久久| 国产精品乱人伊人网| 深夜国产福利| 丁香五月天啪啪| 亚洲欧美综合图片| 久久这里只精品99re66图| 很狠操| 国产九九九九九九九九| 大香蕉色欲AV| 国产精品久久久久久久毛片1| 97久久久精品| 十八禁av无码免费网站APP| 色色99| 日日插夜夜| 久久久网一区| av绯色| 91色堂| 中文字幕性感少妇av| 欧美日日人人天天| 最新国产精品久久精品| 大香蕉性欧美| 青草视频在线看看看看看看看看看| 南澳成人一级片在线播放| 五月婷婷影院| 啊啊啊好多水| 嗯嗯啊啊用力视频免费| 欧美日韩插逼视频| 夜草欧美| a级理论午夜日本| 亚春色色| 九九视品黄色| 黄片免费视频2019| 韩日精品福利视频一区不卡在线免 | 五月婷丁香| 超碰色综合| 91九九九小逼| 自拍偷拍 日韩无码| 亚洲激情在线| 久久久久久久久久久久久久9999| 欧美成熟性爱精品| 97超碰人操| 五月丁香亭亭| 98人妻精品一区二区色欲| 97超碰免费人人性爱| 女人高潮大叫一级毛片| 97天天摸天天爽| 日韩人妻无码精品系列| 色情乱伦AV| 亚洲丝袜诱惑| 中文字幕神马久久| 色婷婷久久| 欧美A片中文字幕| 久久精品六区| 中文字幕精品丝袜| 一区二区视频在线播放| 91制服丝袜中文字幕| 夜夜久久| 色婷婷成人| 秋霞一级A片黄色视频| 九九久精品| 91女神在线视频| 殴美大黄片| 亚洲乱码精品一区二区| 亚洲区限制级 99| 91婷婷伊人狠人| 国产精品自在线发布| 九九九九9999| 少好三P| 无码人妻丰满熟妇奶水区毛片| 日本精品一区二区中文字幕| 天天视频黄| 蜜桃臀av一区二区| 久久精品视频在线观看| 久久婷婷五月天| 色色福利| 女欧美一区二三区| 九九九久久久W精品| 夜精品久无码| 欧美九九爱| 日本午夜久久电影| 18禁免费视频| 3PAV乱伦视频| 美女黄页网站| 欧洲精品区| 久久大线蕉一区| 情色日播放AV| 超碰99在线观看| 青草青草久热| 家庭乱伦国产| 1769成人国产精品视频| 操久久久久| 久久久成人免费av电影| 亚洲区限制级| yazhousetuoumei| 男人天堂2019亚洲| 五月丁香激情综合| 麻豆国产96在线| 亚洲AV噜噜狠狠网址蜜桃动漫| 成人午夜高潮av猛片| 亚洲欧洲激情卡通另类文学四射小说网站| 四虎精品一区| 欧美91久久久久| 日韩午夜国产| 狠插 制服 自拍| 好吊色一区| 欧美亚洲影视| 国产精品亚洲四五区在线观看| 欧美综合骚| http://qxhbdz.com| 久久久爆乳翘臀一线天伦理视频| 丁香色五月 97干| 欧美很很操视频| 久久久夜夜嗨免费视频| 色牛牛AV| 国产福利第一视频| 91干熟女| 97人人模人人爽人人| 综合久久中文字幕综合日韩精品| 久久精品店| 亚洲经典啪啪| 1024人妻| 激情五月婷婷| 亚洲 91 在线| 国产天天骚| 熟女中出视频| 99RE在线视频精品,这里只有精品| 色九月综合| 一二三四视频在线社区中文字幕| 在线一区| 九草九九九| 天天久久久久久| 亚洲乱妇p22| 操逼A∨| 国产久久成人| 91成人在线免费视频|