免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

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)歷過這樣的場(chǎng)景線上應(yīng)用突然CPU飆高、接口超時(shí)、用戶反饋某個(gè)功能時(shí)好時(shí)壞可日志里干干凈凈一點(diǎn)異常都沒打出來。重啟大法雖然能暫時(shí)緩解但根本問題還在而且重啟以后什么現(xiàn)場(chǎng)都沒了。這種時(shí)候我第一反應(yīng)就是開Arthas這個(gè)工具我第一次用就覺得“真香”甚至可以說它已經(jīng)成了我排查線上問題的默認(rèn)入口。所有要連著好幾臺(tái)機(jī)器、翻各種日志、反復(fù)猜測(cè)代碼邏輯的日子在Arthas面前基本可以畫上句號(hào)了。Arthas是Java生態(tài)里非常出名的在線診斷工具它最大的特點(diǎn)是不用改代碼、不用重啟應(yīng)用直接附著在運(yùn)行中的JVM上就能實(shí)時(shí)查看類加載信息、方法調(diào)用參數(shù)、返回值、異常甚至還能動(dòng)態(tài)修改內(nèi)存中已加載的類重新定義類邏輯。對(duì)于需要快速定位生產(chǎn)環(huán)境問題的開發(fā)、運(yùn)維和SRE同學(xué)來說這是一把不折不扣的瑞士軍刀。這篇內(nèi)容我會(huì)把日常用得最多、最順手的功能串起來講一遍從怎么快速附著到具體命令怎么用、遇到問題的排查思路是什么盡量按照實(shí)戰(zhàn)場(chǎng)景來寫方便你直接照葫蘆畫瓢。1. 為什么Arthas值得“真香”先搞清楚它解決的痛點(diǎn)1.1 傳統(tǒng)排查方式的困境我最早排查線上問題基本靠三板斧看日志、加臨時(shí)日志重新發(fā)版、重啟試試。日志如果沒有打印出關(guān)鍵堆棧就得靠猜加日志發(fā)版光是走流程就要很久而且改了代碼的行為可能就和問題現(xiàn)場(chǎng)不一致了有些偶發(fā)問題根本復(fù)現(xiàn)不出來重啟就更不用提了JVM里的現(xiàn)場(chǎng)被清得一干二凈線程狀態(tài)、堆內(nèi)存數(shù)據(jù)、正在執(zhí)行的調(diào)用鏈全都沒了。更難受的是定位性能問題。一個(gè)接口耗時(shí)忽高忽低你懷疑某個(gè)第三方調(diào)用超時(shí)但沒法確認(rèn)到底卡在哪一行。最原始的方案是到處打時(shí)間戳然后重新發(fā)版算下來一個(gè)下午就過去了。而且發(fā)版本身會(huì)引入變量問題可能就這次發(fā)完消失了下次出問題又不知道什么時(shí)候。Arthas這類工具的思路完全不同應(yīng)用不需要重啟它會(huì)在目標(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è)很大的問題是使用門檻比較高需要編寫專門的腳本而且對(duì)版本、對(duì)JVM參數(shù)比較敏感用得不好容易把自己搞掛。Arthas雖然也用了類似字節(jié)碼增強(qiáng)的原理但它在交互體驗(yàn)和命令設(shè)計(jì)上做了很多工程化的打磨像看板一樣實(shí)時(shí)刷新的dashboard、一鍵查看線程CPU占用的thread命令、跟蹤方法調(diào)用鏈的trace命令都是直接敲命令就能用非常符合后端開發(fā)的直覺。另外Arthas對(duì)Java版本和中間件環(huán)境的兼容性做得不錯(cuò)像Spring Boot這類框架的項(xiàng)目幾乎開箱即用不需要額外改啟動(dòng)參數(shù)。所以很多團(tuán)隊(duì)會(huì)把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ù)版本升級(jí)時(shí)用它來引導(dǎo)會(huì)更統(tǒng)一也方便自定義下載目錄。腳本方式適合快速體驗(yàn)它的本質(zhì)也是下載arthas-boot.jar再啟動(dòng)。啟動(dòng)之后命令行會(huì)列出當(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輸入序號(hào)回車就能附著到對(duì)應(yīng)的進(jìn)程上。需要注意當(dāng)前登錄用戶必須和目標(biāo)進(jìn)程的啟動(dòng)用戶一致否則會(huì)附著失敗或者出現(xiàn)權(quán)限不足的問題。這個(gè)坑我踩過很多次后面會(huì)在排查章節(jié)單獨(dú)說。2.2 無交互式啟動(dòng)適合腳本和自動(dòng)化場(chǎ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還有一種場(chǎng)景是應(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會(huì)受PID namespace影響提前掛agent反而更省心。2.3 理解Arthas的attach與Agent機(jī)制Arthas底層用的是Java的Attach API。它向目標(biāo)JVM發(fā)送attach請(qǐng)求并加載一個(gè)agent這個(gè)agent會(huì)和Arthas的服務(wù)端建立通信服務(wù)端再開一個(gè)telnet端口默認(rèn)8563以及一個(gè)HTTP端口默認(rèn)8562。你敲的每一條命令都會(huì)先經(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)本地能連上自己的測(cè)試環(huán)境但線上環(huán)境始終連接失敗就要檢查網(wǎng)絡(luò)策略是否開放了8563和8562這兩個(gè)端口。2.4 檢查Arthas是否工作正常附著成功后可以先執(zhí)行一個(gè)最簡單的命令試試[arthas12345]$ version如果返回版本號(hào)說明鏈路通暢。然后可以執(zhí)行[arthas12345]$ sysprop查看系統(tǒng)屬性。這些都正常了再進(jìn)入正式的診斷流程。3. 高頻命令實(shí)戰(zhàn)解析從看板到方法級(jí)追蹤3.1 dashboard實(shí)時(shí)全局看板dashboard是我每次進(jìn)入Arthas后幾乎必敲的第一條命令。它會(huì)以一個(gè)動(dòng)態(tài)面板的形式展示當(dāng)前JVM的概況包括線程、內(nèi)存、GC、類加載數(shù)量以及運(yùn)行時(shí)環(huán)境信息??窗鍟?huì)自動(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è)命令會(huì)把CPU占用最高的5個(gè)線程的堆棧信息全部打印出來并且自動(dòng)帶上線程的ID、名稱、CPU使用率、狀態(tài)。有一次我遇到線上CPU突然打滿用這個(gè)命令一下就看到了某個(gè)線程卡在了一個(gè)JSON序列化工具的循環(huán)里棧頂清清楚楚寫著某行代碼的toString調(diào)用問題原因秒定位。第二查看指定線程的完整棧[arthas12345]$ thread 67其中67就是線程ID。這會(huì)打印該線程的完整堆棧適合排查線程阻塞在哪里、鎖等待在哪里。第三查找線程間是否有鎖等待和死鎖[arthas12345]$ thread --stateBLOCKED如果想要檢查死鎖Arthas沒有專門的一條命令但是可以結(jié)合thread --stateBLOCKED和線程棧中的“waiting for monitor”字樣來判斷。某次我處理過一個(gè)偶發(fā)死鎖問題兩個(gè)線程都在等對(duì)方的鎖通過這個(gè)命令一查堆棧里兩個(gè)線程互相等待的鎖對(duì)象非常直觀最后定位到是加鎖順序不一致導(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輸出會(huì)帶類加載器信息、源碼位置、反編譯的Java代碼。這個(gè)命令在排查“為什么線上行為和本地不一致”時(shí)特別有用。有一次客戶端反饋某功能表現(xiàn)異常我用jad一查發(fā)現(xiàn)類里根本沒有最新加的判斷邏輯立刻確認(rèn)是發(fā)布流程出了問題省掉了無休止的討論。如果你的類被JIT優(yōu)化了反編譯出來可能有部分內(nèi)容顯示不出來但不影響判斷大致邏輯。可以用jad --source-only只輸出源碼方便復(fù)制到本地做diff比較。3.4 watch觀察方法調(diào)用入?yún)?、返回值和異常watch是Arthas里我最喜歡的命令沒有之一。它用來觀察指定方法的每一次調(diào)用抓取入?yún)?、返回?duì)象、拋出的異常、耗時(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)⒘斜?、返回?duì)象、異常、耗時(shí)。這個(gè)大括號(hào)不是列表字面量而是輸出多個(gè)字段的組合。-x表示展開對(duì)象的層級(jí)數(shù)字越大展開細(xì)節(jié)越多。比如-x 3能看到入?yún)?duì)象的三層嵌套結(jié)構(gòu)。這個(gè)命令在排查“參數(shù)對(duì)了卻得到奇怪結(jié)果”、“某個(gè)方法偶爾拋異常但日志沒記錄”的場(chǎng)景下幾乎是精準(zhǔn)制導(dǎo)。比如有次同行遇到一個(gè)接口偶爾返回錯(cuò)誤碼但代碼里沒打日志我建議用watch帶異常參數(shù)去抓結(jié)果沒等多久就抓到了異常棧是一個(gè)特殊的非法參數(shù)組合導(dǎo)致的本地測(cè)試完全沒覆蓋到。注意點(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í)詳情。每一行會(huì)顯示類名、方法名、耗時(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的成本相對(duì)高一些尤其是在高頻調(diào)用方法上開啟trace會(huì)有一定的性能開銷。所以在生產(chǎn)環(huán)境使用時(shí)要控制好追蹤的目標(biāo)方法不要掛在整個(gè)入口上大規(guī)模trace更推薦在定位到大致方法后細(xì)粒度去開trace。3.6 stack方法被誰調(diào)用、調(diào)用鏈長什么樣stack命令會(huì)輸出當(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ù)為什么會(huì)走到一個(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ā)性慢請(qǐng)求特別好使。3.7 tt時(shí)間隧道記錄方法調(diào)用的歷史現(xiàn)場(chǎng)如果說watch是“實(shí)時(shí)看每一次調(diào)用”那tt就是“把調(diào)用的現(xiàn)場(chǎng)記下來回頭慢慢看”。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ù)在測(cè)試環(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í)趨勢(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é)而是想看宏觀趨勢(shì)的場(chǎng)景。比如壓測(cè)過程中觀察某個(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*輸出會(huì)顯示類全限定名、類加載器、類狀態(tài)。如果想看類的詳細(xì)結(jié)構(gòu)加-d參數(shù)[arthas12345]$ sc -d com.example.OrderService這樣會(huì)輸出類的修飾符、注解、父類、接口、成員變量等。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è)對(duì)象的字段、甚至修改某個(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í)行的邏輯對(duì)已經(jīng)執(zhí)行到一半的調(diào)用是無效的而且redefine不會(huì)改變類的結(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)等級(jí)很高只適合臨時(shí)應(yīng)急。不到萬不得已我建議你先嘗試用ognl修改配置值、用dashboard觀察趨勢(shì)最后才考慮redefine。而且redefine前一定要把原始類文件備份好保證能回滾。4. 實(shí)戰(zhàn)案例拆解從CPU飆高到接口超時(shí)的排查全流程4.1 案例一CPU突然飆到500%的線程定位事情大約是這樣的某跨平臺(tái)訂單服務(wù)的CPU在下午兩點(diǎn)左右突然飆高監(jiān)控報(bào)警直接打到群里。按照以前的處理方式第一件事是登錄機(jī)器看top找到CPU高進(jìn)程的PID然后jstack導(dǎo)出線程棧再手動(dòng)去找nid對(duì)應(yīng)的線程。這一套流程本身沒問題但jstack的線程棧里全是十六進(jìn)制線程ID要對(duì)應(yīng)到業(yè)務(wù)線程還得人工比對(duì)效率很低。有了Arthas之后流程變成了這樣先附著到目標(biāo)進(jìn)程執(zhí)行dashboard馬上就能看到哪個(gè)線程的CPU占用異常高通常那個(gè)線程的ID還會(huì)反復(fù)出現(xiàn)在刷新面板的最前面。然后執(zhí)行[arthas12345]$ thread -n 3Arthas會(huì)直接打印出CPU占用最高的三個(gè)線程的完整堆棧自動(dòng)把線程名稱、CPU時(shí)間、堆棧都組裝好了。那次我一眼就看到某個(gè)線程卡在一個(gè)XML解析方法內(nèi)部最底層是在JVM里做正則匹配數(shù)據(jù)量一大CPU直接被吃滿。順著棧里的業(yè)務(wù)類名很快就對(duì)應(yīng)到了代碼行發(fā)現(xiàn)是一個(gè)對(duì)超大字符串做了多次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毫秒而我對(duì)這個(gè)下游HTTP接口的容錯(cuò)判斷閾值是500毫秒所以導(dǎo)致上游超時(shí)。順著這個(gè)線索檢查了下游服務(wù)的響應(yīng)時(shí)間分布發(fā)現(xiàn)是對(duì)方服務(wù)在整點(diǎn)時(shí)刻做批量任務(wù)導(dǎo)致該時(shí)段RT拉長。后續(xù)調(diào)整了調(diào)用方的超時(shí)時(shí)間并且給這個(gè)下游調(diào)用增加了本地緩存問題徹底解決。如果不用trace靠加日志排查這種偶發(fā)問題可能要發(fā)好幾個(gè)版本才能抓到一個(gè)慢樣本而且很有可能會(huì)因?yàn)殡S機(jī)性導(dǎo)致錯(cuò)過現(xiàn)場(chǎng)。trace的價(jià)值在于它不需要任何提前埋點(diǎn)事后診斷能力很強(qiáng)。4.3 案例三方法返回值為什么和預(yù)期不一致還有過一次經(jīng)歷是同事在排查一個(gè)對(duì)賬系統(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è)對(duì)象對(duì)象的某個(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ò)最常見的場(chǎng)景是你用的系統(tǒng)賬號(hào)和目標(biāo)Java進(jìn)程的啟動(dòng)賬號(hào)不一致。比如應(yīng)用是用service用戶啟動(dòng)的你sudo到root用戶執(zhí)行Arthas那么Arthas無法讀取目標(biāo)JVM的臨時(shí)目錄文件就會(huì)出現(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)匹配的類加載器集合不對(duì)。特別是用到自定義類加載器、OSGi環(huán)境時(shí)需要用sc -d確認(rèn)類的類加載器信息然后用classloader命令配合指定類加載器再觀察[arthas12345]$ classloader -l然后指定類加載器的索引再對(duì)目標(biāo)方法執(zhí)行watch。你也可以用watch時(shí)帶上-c參數(shù)指定類加載器的hash值。當(dāng)然現(xiàn)實(shí)中多數(shù)Spring Boot應(yīng)用是單一類加載器基本不會(huì)遇到這類問題。5.3 對(duì)象層級(jí)太深輸出被截?cái)嗄J(rèn)情況下Arthas為了避免把大量數(shù)據(jù)一股腦打印出來會(huì)限制OGNL表達(dá)式輸出對(duì)象的展開深度。如果你想看更多字段用-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)證先獲取對(duì)象引用再訪問字段不要一口氣寫超長的OGNL鏈條。比如你想拿到Spring容器里的某個(gè)Bean并調(diào)用方法可以先執(zhí)行[arthas12345]$ ognl #ctxorg.springframework.web.context.ContextLoadergetCurrentWebApplicationContext(), #ctx確認(rèn)這個(gè)對(duì)象能拿得到再去擴(kuò)展后面的字段訪問。5.5 Arthas本身對(duì)性能的影響很多人會(huì)擔(dān)心Arthas附著之后影響業(yè)務(wù)性能。實(shí)話實(shí)說開啟watch/trace/monitor這類命令會(huì)對(duì)目標(biāo)方法做字節(jié)碼增強(qiáng)有一定額外開銷。如果目標(biāo)是低頻方法影響幾乎可以忽略如果目標(biāo)是高QPS方法性能損耗會(huì)明顯一些。所以生產(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)維腳本里使用的版本一致免得今天在這臺(tái)機(jī)器上可用、明天換臺(tái)機(jī)器就報(bào)錯(cuò)。5.7 容器環(huán)境里attach的特殊情況容器化部署越來越普遍在容器里用Arthas有時(shí)會(huì)遇到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對(duì)得上宿主機(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ò)放行申請(qǐng)或者你可以用ssh隧道把遠(yuǎn)程端口映射到本地再訪問這樣就不用額外開防火墻端口了。整體來說Arthas確實(shí)是一個(gè)讓我“用過就回不去”的工具。它解決的不是某一個(gè)具體的問題而是把人從“盲人摸象”的排查模式里解放出來讓你能直接看到運(yùn)行中JVM的內(nèi)部。剛開始接觸時(shí)可能會(huì)被它的命令數(shù)量嚇到但只要把dashboard、thread、jad、watch、trace、tt這幾個(gè)核心命令用熟就已經(jīng)能覆蓋絕大部分日常排查場(chǎng)景了。我自己一次一次踩坑之后才慢慢意識(shí)到滿屏的命令并不可怕關(guān)鍵是把每一條的適用時(shí)機(jī)記清楚——先看全局再鎖線程然后用watch或trace深入方法內(nèi)部再用ognl處理疑難雜癥這套思路比硬記命令參數(shù)重要得多。希望這篇文章能幫你少走一些彎路也歡迎你把這些命令在測(cè)試環(huán)境多試幾遍熟能生巧之后線上問題再也不用靠“重啟大法”來解決了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美丁香五月| 九九99精品视频在线观看| 综合久久婷婷99| 噜噜色com| 成人无码髙潮喷水A片| 日日射天天射| 97在线碰| 9999综合99综合人| 色香蕉影院| 五月婷无码| 玖玖婷婷五月天毛片| 五月天婷婷视频小说| 婷婷色五月激情| 五月天婷婷青青草| 综合色图区| 爱草视频在线| 这里只有精品99视频| 日操熟女| 超碰狠狠干99| www.婷婷六月天| 91色情播放| 婷婷激情性爱| 婷婷五月激情综合啪啪| 69超碰在线| 久婷| 日本久久婷婷| 99狠狠| 色色影院aaaav| 九热视频在线伦| www久| 可以直接看的AV| 天堂婷婷五月在线| 婷婷伊人| 97色色婷婷| 任我干视频在线观看| 亚洲热视频| 婷婷AV丁香| 欧美乱码国产一级A片| 色婷五月天| 亚洲激情综合| 九九热在线视频观看| 五月激情另类| 99热这里只有精品热| 婷婷伊人| 成人电影一区| 激情五月婷婷综合| 婷婷六月丁香激情| 综合婷婷六月| 另类小说五月天综合网| 五月婷婷网久久| 9 1超碰九色| WWW.久久久久久久久久久久久| 青青草国产亚洲精品久久| 亚洲成人一区| 五月色婷婷综合| 91热网址| 色婷| 五月丁香六月婷婷啪啪| 国产亚洲在线观看| 日本人妻A片成人免费看片| 9l视频自拍九色9l视频在线观看| 亚洲综合无码| 91久久1118| 久久这里只有国产视频| 婷婷激情五月综合| 自拍偷窥99热| 国外亚洲成AV人片在线观看 | 婷婷深爱色五月| 婷婷五月激情视频网| 日日夜夜天天| 久久精99| 粉嫩av懂色av蜜臀av熟妇| 狠狠五月激情丁香六月| 久久婷婷婷| 欧美在线视频9| 色婷小说| 婷婷黄色| 2023天天日夜夜爽| 天天色亚洲| 丁香六月婷婷色XXXXX| 色五月丁香婷婷在线观看| 国产婷婷五月色情综合| 日韩视频99| 俺去也五月| 久久婷婷五月| 伊人影院久久网| www久热com| 伊人天堂婷婷| 超碰国产在线观看| 六月丁丁香| 婷婷五月精品中文字幕| 亚洲天堂爱爱| 在线综合网| 五月丁香激情综合网| 五月婷婷激情69| 激情五月色综合国产精品| 九九视频在线免费视频| 激情综合五| 色五月天堂| 99热99色| 亚洲综合成人网站| 免费国产VA国产免费| 99热免费精品热久久66| 99色色色色| A久久| 五月丁香六月成人| 国产精品久久久久9999小说| 激情丁香社区| 日韩99精品| 成人婷99最新| 91碰操| 吊色AV男人的天堂| 婷婷日日天天| 五月天激情小说网| 99久久五月婷婷| 成人国产综合| 色婷婷综合影院| 99无码视频| www.99操| 98毛片| 99无吗| 97热这里只有精品| 丁香五月最新地址| 老司机日日夜夜青草| 亚洲色综合| 日韩成人精品中文字幕电影| 看黄的网站18禁| 狠狠色综合网站久久久久| 97色在线| 激情五月婷黄版| 婷婷伊人久久无码色五月| 伊人激情综合网| www婷婷| 五月天婷亚洲天综合网综合| 久99视频| 丁香五月激情综合久久| 26uuu欧美亚洲日韩| 最近中文字幕2019视频1| 涩涩五月天| 亚洲视频丁香网va| 人人摸人人干| 人人九色| 激情九色| 婷婷开心激情| 五月精品99综合| av中文在线| 五月婷婷AV| 成人无码精品1区2区3区免费看| 色九月欧美| 亚洲va在线| 色综合婷婷| 五月丁香综合久久夜夜| 国产玖玖资源| 东北熟女视频99| 无码中文一区二区三区| 激情五月婷| 天天干,天天操,天天射| 99.N在线视频| 色婷婷操逼| 色五月婷婷小说亚洲中文字幕组| 熟惀91九色在线| 久久视频这里都是精品| 五月丁香久久| 岛国资源网| 99性爱视频| 午夜亚洲国产精品av一区二区| 亚洲成人人人操| 91九色PORNY大屁股| 五月丁香婷婷激情久久| 丁香五月桃花在线激情综合| 久久国产色| 五月婷婷久草| 国产va视频| bukadeavzaixian| 播四月婷婷六月丁香| 成人国产欧美大片一区| 亚洲综合婷婷六月丁香五月| 色99无码| 色色色色网| 九九久久99| 久久久中文| 99久久综合| 九九热最新地址| 狠狠五月激情在线| 99惹 精品在线| 伍月婷婷六月丁香| 色婷婷888| 欧美色色色色色| 99久久国产宗和精品1上映| 亚洲中文乱字字幕在线永久| 天天综合亚洲综合| 丁香六月激情四射| 97高清国语自产拍| 五月婷婷成人| 激情色中文| 欧美黑人巨大性生话| 丁香婷婷人妻综合网| 亚洲深喉AV| 婷婷丁香五月天在线| 色啪久| 五月天网站亭亭| 丁香婷色| 狠狠婷婷爱| 久九男女天堂| 狠狠草在线观看| 天堂资源欧日浪女在线播放| 五月丁香啪| 欧美另类五月激情| 色色色国产| 99性爱视频| 日日操,夜夜爽| 色久99| 91日本在线观看| 丁香五月狠狠综合欧美| 亚洲激情av| 国产视频色色色色色色色| 日韩日比视频| 一本色道久久88加勒比| 日本99久久| 激情综合网,婷婷五月天| 99九九99九九九视频精品| 五月婷啪| 亚洲情欲| 大香蕉婷婷| 亚洲精品a成人在线播放| 综合网视频| 天天爽天天爽天天爽天天爽天天爽| 日本熟妇乱妇熟色A片蜜桃| 婷婷色五月天在线观看| 精品人妻久久久| 色婷婷天堂| 无码激情AAAAA片-区区| 级情九色| 五月婷婷偷拍| 五月丁香六月激情欧美综合| 思思色综合网站| 9热视频在线观看| www,奇米影视| 少妇被躁爽到高潮无码文| 久久久久久久久久91| 俺去也五月| www夜夜操| 五月丁香成人| 韩国情人在线电视剧免费观看高清版全集 | 丁香六月av| 99热全是精品| 婷婷五月在线| 丁香五月婷婷激情蜜桃| 99热有精品在线观看| 五月天伊人网| 丁香五月五月婷婷| 99热大香蕉| 亚洲色情在线| 久久婷婷桃花五月天| 人妻人人操| 91色涩| www.日日夜夜.com| 一级黄色尤物综合视频手机在线观看| 久久九九在线视频| 丁香五月开心婷婷| 99亚洲色色| 呦呦v线| 丁香婷婷六月激情文学| 亚洲午夜精品久久久久久人妖| 婷婷丁香五月激情密臀av| 伊人五月婷| 九九视频在线观看视频6 | 婷婷五月电影院| 91九色视频在线观看| 五月丁香激情婷婷| 丁香六月婷| 婷婷激情社区| 国产av基地| 欧美啪啪五月天| 丁香花婷婷五月天| 91久久色| 九热视频| 五月婷婷开心激情六月蜜桃| 色色色色av777| 色五月婷婷视频| 五月婷成人网| 欧美草久久五月天91| 激情亚洲色图片丁香综合| 思思久久精品视频| 五月天婷婷高清无码| 人人干Av| 色5月丁香婷婷| 国产成人AV在线播放| 婷婷香五月天| 中文字幕AV在线播放| 久久婷婷五月综合97色一本| 操逼福利视频| 久久综合人妻| 六月婷婷色| 俺去也婷婷| 91麻豆国产三级精品福利在线观看| 久久99热网| 96丁香婷婷九月蜜桃综合久久| 久操香蕉| 日本啪啪天堂| 人人干Av| 九九综合伊人| 激情操逼婷婷| 站长推荐无码播放| 日韩精品一区二区三区,四区,五区视频 | 久久综合五月天| 六月丁香五月天| 国产成人精品123区免费视频| 97在线观视频免费观看| 99碰| 天天干天天操天天干天天操天天干天天操 | 色五月成人婷婷| 天天日夜夜夜操操操操| 激情综合网五月激情| 99碰网站| 亚洲a片免费观看| 美女伊人久久| 丁香五月六月婷婷自拍| 激情床戏| 色爱爱综合网| 狠狠色婷婷7| 久热A| 99这里有精品视频| 影音先锋秋秋五月婷婷| 超碰人妻在线| 九九热最新视频| 欧美成人va| 午夜微拍福利| 五月丁香激情五月天| 99热网站| 99热在线极品极品| 99rewww| 亚洲综合99| 欧美成人精品三区综合A片| 婷婷WWW久久| 蜜桃婷婷狠狠久久| 人人摸人人搞| 久久九九思思| 五月丁香天天| 天天干天天日天天操| 婷婷五月天免费99| 天天成人综合| 色综合色| 色婷婷操逼| 婷婷五月在线播放| 97伦乱| 五月天婷婷基地丁香| 婷婷俺去也| 思思9久久| 无码九九| 久久久久人妻网址| 久久激情天堂| 人妻视频在线| 踪合专区啪啪| 人妻久久久| 亚洲偷| 91九色国产熟女| 激情五月婷婷在线| 五月天婷a在线| 狠狠色婷婷7777久| 丁香五月成人社区| av国产精品偷| www.91婷婷| 四色五月视频| 五月狠狠| 91婷婷在线| 五月婷婷日| 操操操91| 欧美性丁香色色五月天干干| 精品久久婷婷| 97碰| 97亚洲色 torrent magnet| 五月天激情四射网站| 国产三级在线播放| 色婷久久| 五月丁香性爱| 天天插综合| 桃色五月婷婷| 第四色在线观看| 激情久久四色| 五月天激情色色| 欧美天天干五月丁香| 深爱激情综合| 丁香五月天精品| 性做久久久久久久免费看| 欧美性丁香色色五月天综合爱爱| 琪琪布丁香社区激情五月天| 久久视频这里有精品99| 91肏| 亚洲综合色网| 久久网思思| 婷婷热色| 丁香激情网| 精品婷婷| 免费视频无码| 激情内射p| 99综合熟女| 亚洲AV日韩无码| 婷婷趴趴| 99热在线观看| 婷婷五点亚洲| 色婷婷久久天天性爱| 在线婷婷| 色婷婷婷综合五月天| 99年操人人爽| 成人五月天丁香婷| 五月丁香久久综合精品| 日日噜噜久久婷婷五月天| 激情五月天综合网| 九九热免费观看视频| 亚洲宗合激情| 91色婷婷综合久久中文字幕二区| 五月 丁香 欧美| 久久综合五月情| 久热69| 一区二区中文字幕| 99热999| 五月丁香色情| 婷婷丁香人妻天天| 色狠狠五月天| 国产偷人爽久久久久久老妇APP| 五月丁香在线婷婷美女| 五月丁香激情啪啪| 涩涩激情五月婷婷| 天天干天天插| 五月婷婷影院| 亚洲欧美999| 免费AAAAA网| 精品久久久91久久影视网| 直接看的av| 六月婷婷俺也去| 五月天婷婷网站| 99精品在这里| 精品久久艹| 久久精品爱爱| 超碰免费大香蕉| 亚洲三A| AA久久| 狠狠干青青草| 五月天激情小说婷婷| 亚洲9久久精品| 色婷婷激情| www五月| 婷婷狠狠五月综合| 五月天久久网站| www.五月婷婷| 99色视| 久久99热这里| 岛国操B不卡在线| 久草婷婷视频| 婷婷色五天| 五月婷婷婷| 99热啪啪| 天天射影院| 色狠狠综合| 国产精产国品一二三在观看 | 99这里精品| 五月丁香婷婷综合| 热99只有精品| 欧美人人女女精品综合五月天| 美国十月色婷婷在线观看| 九九亚洲综合| 怡红院AV亚洲一区二区三区H| 丁香五月天啪啪激情综和网| 婷婷终合色图| 婷婷色五月天在线| 操日视频| www久久99| 中出内射的人妻视频| 91丨九色丨老熟女激情| 九九亚洲综合| 狠狠狠激情网| 日熟女| 直接看的av| 婷婷色五月色妇| 99热一本久道| 婷婷五月天色色| 亚洲另类久久| 99热这里都是精品| 亚洲激情四谢| 天天搡日日搡aaaaⅩ| 色五月涩涩婷婷蜜桃| 熟女色色一区二区| 五月天大香蕉| 俺也高清无码高清视频| ww久久| 国产精品色情AAAAA片软件| 久久只有18视频| 欧美日综合| 综合色图婷婷| 国产亚洲99久久精品| 五月天婷婷色小说| 综合激情五月丁香| 色黄啪啪| 五月天激情网图片| 婷婷五月综合网| va婷婷在线免费观看| 九九九九大香蕉| 欧美成人精品A片免费一区99| 婷婷俺去也| 99久久国产宗和精品1上映| 97干在线免费| 99国产精品久久久久久久久久久 | 婷婷亚洲欧美丁香五月| 第四色色六月色综合| 天天艹天天综合网| 成人在线网址| 婷婷五月综合亚洲| 五月天色导航| 激情网站五月| 98永久精品| 久久久国产精品黄毛片| www.五月天婷婷| 热99这就是精品视频| 成人五月天在线观看| 天天网曰日曰夜夜综合永久免费| 一点色成人网| 狠狠干五月天| 丁香五月欧美激情| 丁香五月天在线| 五月开心六月婷婷在线播放网站| 97碰在线| 色域五月婷婷丁香| 欧洲区自拍| 国产精品天天狠天天看| 亚洲成人AV在线播放| 色综合天天网| 狠狠色五月激情| 亚洲综合在线播放| 色婷婷丁香五月天| 影音先锋男人AV资源站| 婷婷久久大香蕉| 婷婷丁香九月| 人人综合久| 丁香五月六月综合欧美| Www.狠狠| 久久偷拍综合五月天| 婷婷五月天熟妇| 五月情四婷婷| 久久五月婷综合网| 97涩涩丁香五月天| 狠狠色狠狠鲁| 精品99爱免费视频在线观看| 天天爽人人爽| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 欧美性生交XXXXX无码小说| 91色婷婷综合久久中文字幕二区| 99热在线观看| 色五月丁香伊人| 亚洲99视频| 婷婷丁香五| 色色色色色色色综合| 国产日产成人亚洲欧美国产VA| 色域五月婷婷丁香| -91九色大屁股| 91尤物九色在线| 久久久婷丁香五月天激情综合| 丁香五月天影院| 综合在线观看99| 丁香操逼| 操碰久| 国产在线视频1234| 成人色图情色成人网 www.5b5b5bcom 五月天| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 日本三级日本三级99| 97超级啪啪在线观看| 思思热在线视频精品| 这里只有在线精品| 春色激情第四色| 六月色国内综合| 婷婷丁香亚洲五月天| 色久综合天天做视频| 丁香五月婷综合网| 天天色月| 色综合久久伊伊婷婷五月| 日本成人噜噜噜噜噜| 99在线看片| 九九热这里只有精品在线观看| 欧美成人性爱网| 五月婷婷九九热| 亚洲综合婷婷| 99aese| 天天日天天做天天操| 天天爽免费视频| 91日日日| 五月丁香偷拍| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | www,婷婷五月天777me,com| 夜夜撸日日骑| 日本啪啪网| 99精品视频网| www.com久久久久久久久久久久久久久久久| 婷婷综合天堂| 涩综合网| 五月激情婷婷播播网| 午夜做爱影院| 99热这里只有精品中文字幕| 热久久999| 综合狠狠干| 同性gv国产精品一区二区| 久色国产| 色色五月天激情| 黄色片久久| 五月天色站| 亚洲精品网站色视频| www.俺去也com| 久久99操| 天天肏视奸| 综激情网| 国产成人+亚洲+欧洲| 色综合激情| 欧美熟女视频 色婷婷| 性爱激情小说AV五月丁香花| 成人精品一区二区三区四区五区| 色五婷婷开心缴| 五月丁香六月激情综合| 五月天基地| 色五月aV| 丁香五月网址| 在线色婷婷| 9九热视频| 婷婷五月18永久免费视频| 亚洲免费看片| 9热久久在线| 电影蜘蛛女| 日韩精品一品二区三区的使用体验| 久色网| 五月丁香网站| 色五月天视频| 99热超碰| 亚洲另类电影| 激情综合五月婷婷丁香| 亚洲五月天激情| 五月婷婷深深爱| 丁香五月欧美色综合| 五月丁香婷婷色| 99久久色| www,婷婷五月天,com| 久久久18| 香蕉伊人综合| 色婷婷激情五月天| 99ER热精品视频| 天天射影| 97自拍视频在线| 狠狠九九婷婷韩| 五月丁香AV在线| 国产精品a无线| 激情综合五月丁香| 久青操| 色播色丁香五月| 五月婷婷在线视频免费观看| 婷婷五月天堂| 久久婷婷五月综合色天| 成人欧美Va| 99re这里只有| 婷婷六月色情| 久久久久人妻精选| 亚洲AV日韩在线观看| 色天天久婷婷| 北京熟妇搡BBBB搡BBBB| 99er这里只有精品| 99re8在这里只有精品| 黄色精品五月婷婷| 91丁香五月| 久re热视频| 丁香五月激情婷婷| 无码激情AAAAA片-区区| 五月天久久婷婷婷| 久久婷五月| 婷婷五月天播| 99热网站| 先锋男人99资源| 97五月天| 操国产人妻| 色婷婷五月天| 色综合久久伊伊婷婷五月| 精品色色| 婷婷六月丁香色| 乱岳熟女50岁| 色久免费| 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | 青草青草视频2免费观看| 色色啊| 日韩精品无码一区二区| 亚洲国产婷婷色五月| 日日操夜夜撸| 天天综合亚洲综合网天天αⅴ| 综合网色| 激情亚洲色图片丁香综合| 牛色色碰| 综合五月婷婷| 成人五月天丁香婷| 国产99久久久| www.婷婷久久五月天| 26uuu亚洲欧美另类| 美女婷婷激情亚洲| 五月成人网站| 99啪| 一本道在线电影| 亚洲综合婷婷五月天| 在线sebiav精品视频| 五月丁香婷婷视频| 99婷婷| 成人午夜视频精品一区| 婷婷丁香五月天中文字幕| 色射7856五月天激情四射| 伊人五月婷婷| 久久这里只有精品07| 96丁香婷婷九月蜜桃综合久久| 日韩色五月| 亚洲视频二区| 日操| 丁香五月天堂亚洲社区| 六月丁香激情| 五月激情综合网| 99在线精品免费视频| 99热在线观看精品免费| 亚洲综合在线播放| 婷婷色网| 综合成人小说婷婷| 天天日天天干天天爱| 天天狠狠综合精区| 67194中文字幕| 久久久久亚洲A∨成人乱码电影| 色爆五月| 99热这里都是精品| 婷婷五月天激情亚洲小说| 99色.com| 国产又粗又大又爽又黄| 天天综合中文| 国产日韩欧美性生活| 久艹久| 激情久久久| 五月天婷婷丁香蜜桃91| 91久久五月天| 欧美精品在线观看| 人妻激情综合| 久色网五月| caop在线视频| 久久久潮喷-久久久九九-成人AV| 色五月婷婷影院| 久久色这里只有精品| 九九AV| 美女被肏网站在线看| 色五月婷婷在线| 99热无码| 一區四區歐美日韓| 婷婷五月天黄色网址| 五月日韩中文字幕| 九九色影视| ji'qi'luan'ren'lun| 99在线爽| 99资源在线| 婷婷丁香五月综合| 久久激情天堂| 99热精品在线| 五月丁香六月婷婷不卡免费无码 | 婷婷久久网| 激情五月婷婷她| 少妇性BBB搡BBB爽爽爽视頻| 日韩999| 亚洲精品网址| 色吧婷婷五月亚洲| 可以免费观看的av| 婷婷激情六月视频| 丁香五月激情综合啪啪| 丁香婷婷人妻综合网| 大香网伊人久久综合| 丁香五月激情月| 久久婷婷青青| 欧美色综合天天久久综合精品| 色综合区| 超碰97免费在线| 五月天国产婷婷精品视频在线| 色视五月天婷婷| 婷五月天天| 久久视频婷婷视频| 综合久久高清| 先锋资源婷婷| 欧美日本99| 国产精品成av人在线视午夜片| 久热无码| 91啪啪视频| 亚洲日日日| 成年人丁香五月| 色色网站免费| 天天草天天爱| 凹凸探花电影| 色亚洲中文| 国产伊人五月天| 99久久精彩视频。| 在线看的免费网站| 六月丁香五月天| 中文字幕婷婷五月天在线观看| 日日操日日干| 五月丁香六月婷婷在线小说视频| 婷婷第六色| 国产伦理精品高清在线观看网站一区二区| 大香蕉网站,大香蕉综合| 亚洲第一av| 九九九九中文字幕| 色原狠狠综合| 久操97| 色哟哟www| 性视频久久| 五月婷婷人人人操| 99福利导航| 亚洲乱码w在线观看| 丁香五月婷婷偷拍| 91色操| 97操视频| 激情另类综合| 噜噜噜噜噜在线| 深爱五月激情网| 五月婷婷激情四季| 精品福利911| 激情综合六月| 99热精品中文字幕| 超碰猛烈的性猛交| 亚洲成人av在线观看| 五月丁香婷婷福利| 成人精品视频99在线观看免费| 99秘 在线| 182无码| 丁香五月六月| 久久婷婷丁香五月宗合| 激情综合五月| 色黑鬼导航| 九九久久9 9在线观看| 999热这里只有精品| 97久久五月丁香婷婷| 99久在线观看| 久思思久视频| 91干婷婷| www.五月天色色.com| 五月天色婷好好| 亚洲乱码日产精品BD| 深爱婷婷丁香五月激情| 9久国产精品| 亚洲中文字幕在线观看| 婷婷99狠狠躁| www.久久99| 亚洲狠狠爱婷婷| 婷婷丁香五月综合免费视频百花| 激情AV在线| 亚洲超碰在线| 五月婷婷中文| 激情综合网五月婷婷| 五月婷婷色欲| 五月丁香六月婷婷开心网| 成人av中文字幕| 婷婷五月天久久久| www.五月天| 亚洲婷婷综合视频| 五月天婷婷免费| 色色色97| 婷婷五月天天| 激情亚洲色图片丁香综合| 操人妻视频91| 9l视频自拍九色9l视频自拍九色9l社区| 激情深爱五月天| 超碰成人在线免费观看| 激情综合色网| 不卡影院午夜理论片| 玖玖爱综合网| 五月日韩中文字幕| 五月婷婷影院| 99r这里只有精品在线观看| av网址在线| 久777| 婷婷激情五月呦呦| 91爱操| 色色色色网色色网色色| 99热这里精品| 伊人五月婷| 亚洲成人网站在线观看| 色亚洲欧洲| 色色色网站| 精品爆操| 伊人狠狠干| 国产99久久久国产精品免费看| 九热电影av| 亚洲无码性爱| 丁香五月网站| 91se在线观看| 九月婷婷综合| 色婷婷操逼网| 很很干五月天| 久久a热| 天天视频精品9| 五月天婷基地| 国产成人在线精品| 92久久久| 五月婷婷在线网站| 久久人妻精品| 久久久性爱视频| 婷婷色正月| 久久九色| av在线观看网站| 激情五月天激情五月天| 久久婷婷六月综合国际| 就99这里只有精品| 色五月人妻| 91丨九色丨熟女丰满| 丁香五月另类小说| 激情操逼婷婷| 五月婷婷 六月丁香| 综合网亚洲| 亚洲无AV在线中文字幕| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 五月天婷婷婷| 久热这里只有| 婷婷九月丁香| 精品成人久久久久久久_一二三四视| 欧洲色色| 五月停亭六月,六月停亭的英语| www.91操| 色五月激情网| 伊人无码高清| 亚洲AV久久久久久久久久久久久久久久 | 日韩无码色色| 九九在线精品| 亚洲五月花| 狠狠操综合| 欧美黄色一级录像| 超碰成人黄色网| 久久免费试看120秒| www.综合久久.com| 97碰在线视频| 青草久久五月婷伊人| 五月丁香六月停停| 婷婷瑟瑟五月天| 99热只有这里才是精品| 99热这里只有精品86| 亚洲人妻电影| 丁香五月香蕉| 日本乱子人伦在线视频| 综合网色综合| 99这里有精品视频| 激情五月丁香综合蜜桃| 操丝袜视频影院导航| www天天爽| 久久九九@| 久久五月丁香| 国产在线激情视频| www五月天com| 超碰人人操人人干| 亚洲天堂亚洲色色色| 91精品久久久久久综合五月天| 五月天播播中文字幕| 五月丁香六月激情| 亚洲日比视频| 色婷婷六月天| 伦99热| www.色婷婷.com| 大香蕉久久| 殴美97色| 婷婷和五月天| 久99热| 大香蕉五月天| 在线免费视频caop| 欧美精品99久久久| 五月香六月婷| 亚洲精品电影| 激情五月天婷婷播播久久综合91| 伊人九九综合| 5月婷婷6月丁香aV| 婷婷99狠狠躁天天躁| 色综合综合网| 九月丁香| 婷婷丁香成人五月天| 五月丁香婷婷中文网| 91久久综合亚洲鲁鲁五月天| 麻豆AV一区二区三区| 九九av在线| 五月婷婷色吧!| 99热偷拍| 丁香五月婷婷激情蜜桃| 中文激情网| 婷婷丁香色情五月天| 亚洲天天操| 9久操| 五月丁香六月婷婷在线播放| 亚洲情色一区| 丁香五月天啪啪| 人人操AV| 日本五月天激情| 亚洲久久天堂| 婷婷五月花免费视频在线| 天天婷婷| 610018岁成人视频| 五月婷婷丁香啪啪| 国产综合婷婷| 婷婷五月成人社区| 成人网丁香五月| 91色婷婷综合久久中文字幕二区| 欧美日韩日韩成人| 久久五月天精品视频| 亚洲av日韩无码| 丁香五月成人自拍| 99精品在| 大香蕉伊人久久| 激情性爱五月| 激情丁香五月天图片| 亚洲99热| 婷婷五月丁香激情色情| 五月婷婷激情综合网| 欧美日韩成人在线观看| 激情五月天视频| 久久探花91swag| 99热日本| 免费看欧美成人A片无码| 任你艹| 五月婷av| 成人 在线 日韩| 久久精品系列| www.99操.com| 久久这里只有精品视频1| 色婷婷网大全在线| 五月色导航| 99精品偷自拍| 色爱99| 在线观看国产高清视频免费网站| 婷婷久久五月天| 国产成人+综合亚洲+天堂| 丁香视频| 我去色色网五雨天| 任你日视频| 五月天电影网| 亚洲成人电影在线免费观看| 五月天婷婷婷| 九色porny在线观看激情四射| 妻久久人久久| 丁香成人五月天| 狠狠人妻色综合| 国产 码在线成人网站| 婷婷色色网| av在线观看网站| 婷婷亚洲综合| 色婷婷狠狠| 99久久免费性爱视频`| 亚洲永久免费| 婷婷丁香五月天婷婷| 色五月无码| 五月激情综合网婷婷| 丁香五月婷婷天激情| 99综合99| 超碰1999| 亚洲婷婷丁香| 我爱大香蕉| 蜜桃婷婷五月| 五月婷婷激情日本| 婷婷性爱| 欧美性做爰大片免费看办公室 | 一本道在线电影| 丁香五月天天高清在线| 人人爽欧美婷婷久久久五月丁香 | 五月天成人小说| 久久99综合网| 人人妻久久妻| 天天干夜夜想| 色婷婷五月亚洲| 在线观看996精品| 五月天啪啪视频| 色婷婷影音| 日本激情ⅩXX免费视频| 超碰v| 99色色网| 丁香丝袜五月| 色婷婷视频在线| 五月天欧美 另类小说| 五月婷婷色男女| 激情六月下句是什么| 亚洲性受XXXX五月丁香| 国产亚洲99| 久久婷婷五月天激情新地址| 99小视频在线| 第二色AⅤ| 激情婷婷亚洲五月| yazhouzonghesese| 99这里只有精品|v| 99碰碰| 五月婷婷性| 丁香婷婷射| 久久永久网址| 九九操操| 中文aV网| 大香网伊人久久综合| 少妇性BBB搡BBB爽爽爽视頻| 天天操天天操天天操天天操天天操天天操| enecarbon-materials.com污K127封锁请涟系@wip1688 | 天天做天天爱天天高潮| 色婷婷久久综合久色| 五月综合激情啪啪啪啪啪| 久久视频在线视频| 九九精品亚洲| 丁香九月婷婷综合| 人妻内射视频| 99精品丁香五月| 久久五月天激情婷婷| 日本在线99| 亚洲永久四色| 丁香五月综合福利视频导航| 久久久久久丁香五月| 婷婷狠狠色| 欧美色色色色色| 亚洲字幕AV一区二区三区四区| 五月婷婷色播| 中文字幕人妻熟女在线| 综合久久婷婷99| www.久久爱.c n| 久/久精品99看9| 九九热视频免费的| 婷婷五月天伊人| renrencaoni| 99视频只有这里精品| 思思热在线免费视频| 97干视频在线| 丁香五月av| 精品爱欲五| 色日本综合| 99超在线| 久久偷拍综合五月天| 97久久草草超级碰碰碰| 色狠狠色噜噜AV天堂五区| 无码一级片| 丁香五月激情六月欧亚激情综合导航| 日韩欧美四五区| 丁香五月欧美色综合| 婷婷涩五月| 疯狂做受XXXX高潮A片| 91丨九色丨熟女| 色五月色五天色情网| 欧美毛片www| 欧美久久婷婷| 激情五月婷婷综合网| 丁香色综合| 婷婷色av| 99久久这里只有精品| 东北黄色一级| 秋霞午夜理论| 色婷婷激情| 婷婷五月性感| 婷婷久久图片| 日本色婷婷久久99精品91| 久久精品系列| 大香蕉伊人丁香五月| 99ER热精品视频| 五月天婷婷在线视频| 色婷婷另类| 丁香 婷婷 激情 综合 五月| 久久机热思思热| www色色com| 91久久精品视频| 五月丁香激情综合网官网| 婷婷五月激情的图片| 先锋影音av色五月天资源站| 婷婷色五月激情| 天天爽天天爽视频| 大地资源色婷婷视频在线| 久久激情综合| 日本五月视频| 大香蕉伊人久久| AV动漫不卡无码免费| 啪到高潮激情丁香五月| 五月天社区| 97色婷婷| 國語久久婷| 99啪视频在线观看| 丁香五月婷婷色五月| 亚洲男女激情| 激情五月天综合网| 亚洲精| 丁香五月色情| 无码人妻激情| 天天久| 久久91久久精品久久| 韩国情人在线电视剧免费观看高清版全集| 99热新网址| 伊人九九综合| 婷婷噜噜| 色逼综合网| 青青草蜜臀| 五月丁香色婷婷| 久久总和99| 久久99综合网| 久久国产高清| 五月色婷婷激情| 成人中文网| 丁香五月天激情四射网络不好 | 婷婷综合精品视频97| 色一情一乱一伦一区二区三区| 成片免费观看视频大全| 五月婷婷av| 91美女啪啪| 操操操AV| 婷婷色五月天色色| 婷婷四色五月| 六月成人网| 99色1| 97精品人人A片免费看| 欧美日韩成人h| 国产片色| 九九久久9 9在线观看| 五月激情六月| 天天综合网站| 色。 日日日| 99精品国产在热久久| 日韩五月天婷婷| 国产FREESEXVIDEOS性中国| 丁香五月综合色婷婷| 色五月五月婷婷| 26uuu淫色| 五月丁香六月婷| 久久婷婷操| 亚洲av电影在线| 情涩婷婷五月天| 青青草婷婷五月天| 久色资源网| 性爱人人网| 超碰在线免费9| 8区视频在线| 亚洲五月天婷婷| 五月天天丁香婷婷在线中| 久久伊人大香蕉| 日韩99色| 色狠狠色| 六月综和久久| 99精品久久久久久| 色五月六月| 国产免费av在线| AV电影在线播放| 婷婷六月婷婷| 色婷婷香蕉在线| 婷婷情爱五月天6| 色色丁香婷婷| 中文字幕丰满孑伦无码专区| 精品视频这里只有精品| 欧美精品中文字幕亚洲专区| 另类激情网| 国产AV不卡福利| 日本丁香五月| 五月丁香激情综合网官网| 新男人天堂人妻| 大香蕉中文| 欧美色色色色色色色色色色影视| 激情开心五月天| caopeng97日韩| 99玖玖人人| 五月天成人手机在线视频| 亚洲国产黄色电影| 日本狠狠色| 看黄的网站18禁| 婷婷六久久| 成人五月天丁香婷| 亚洲综合婷婷| 苗黎美女四级成人版一级二级毛片| 天天澡天天狠天天天做| 五月伊人网| 久久婷婷五月综合色丁香花| 婷婷五月天天天| 婷婷开心深爱五月天| 99re资源在线视频导航| 91爱操| w婷婷五月婷婷w| 久久婷婷五月天激情|