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

ARTICLE DETAIL

資訊詳情

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

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

Java線上排查利器Arthas實(shí)戰(zhàn):從CPU飆高到接口超時(shí) 在Java后端摸爬滾打久了你大概率經(jīng)歷過(guò)這樣的場(chǎng)景線上應(yīng)用突然CPU飆高、接口超時(shí)、用戶反饋某個(gè)功能時(shí)好時(shí)壞可日志里干干凈凈一點(diǎn)異常都沒打出來(lái)。重啟大法雖然能暫時(shí)緩解但根本問(wèn)題還在而且重啟以后什么現(xiàn)場(chǎng)都沒了。這種時(shí)候我第一反應(yīng)就是開Arthas這個(gè)工具我第一次用就覺得“真香”甚至可以說(shuō)它已經(jīng)成了我排查線上問(wèn)題的默認(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)境問(wèn)題的開發(fā)、運(yùn)維和SRE同學(xué)來(lái)說(shuō)這是一把不折不扣的瑞士軍刀。這篇內(nèi)容我會(huì)把日常用得最多、最順手的功能串起來(lái)講一遍從怎么快速附著到具體命令怎么用、遇到問(wèn)題的排查思路是什么盡量按照實(shí)戰(zhàn)場(chǎng)景來(lái)寫方便你直接照葫蘆畫瓢。1. 為什么Arthas值得“真香”先搞清楚它解決的痛點(diǎn)1.1 傳統(tǒng)排查方式的困境我最早排查線上問(wèn)題基本靠三板斧看日志、加臨時(shí)日志重新發(fā)版、重啟試試。日志如果沒有打印出關(guān)鍵堆棧就得靠猜加日志發(fā)版光是走流程就要很久而且改了代碼的行為可能就和問(wèn)題現(xiàn)場(chǎng)不一致了有些偶發(fā)問(wèn)題根本復(fù)現(xiàn)不出來(lái)重啟就更不用提了JVM里的現(xiàn)場(chǎng)被清得一干二凈線程狀態(tài)、堆內(nèi)存數(shù)據(jù)、正在執(zhí)行的調(diào)用鏈全都沒了。更難受的是定位性能問(wèn)題。一個(gè)接口耗時(shí)忽高忽低你懷疑某個(gè)第三方調(diào)用超時(shí)但沒法確認(rèn)到底卡在哪一行。最原始的方案是到處打時(shí)間戳然后重新發(fā)版算下來(lái)一個(gè)下午就過(guò)去了。而且發(fā)版本身會(huì)引入變量問(wèn)題可能就這次發(fā)完消失了下次出問(wèn)題又不知道什么時(shí)候。Arthas這類工具的思路完全不同應(yīng)用不需要重啟它會(huì)在目標(biāo)JVM進(jìn)程上啟動(dòng)一個(gè)代理然后把診斷命令通過(guò)socket傳給這個(gè)代理代理用字節(jié)碼注入技術(shù)去攔截目標(biāo)類的方法把你想看的參數(shù)、返回值、異常、執(zhí)行耗時(shí)實(shí)時(shí)抓回來(lái)。相當(dāng)于給運(yùn)行中的應(yīng)用做了一次“無(wú)痛內(nèi)窺鏡”檢查隨時(shí)都能做做完拔掉恢復(fù)原樣。1.2 和BTrace、Greys等同類工具的取舍其實(shí)在Arthas之前已經(jīng)有BTrace這類早期工具我也試用過(guò)。BTrace有一個(gè)很大的問(wèn)題是使用門檻比較高需要編寫專門的腳本而且對(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)線上問(wèn)題排查工具來(lái)推廣甚至要求每個(gè)服務(wù)鏡像里都預(yù)留Arthas的安裝路徑方便隨時(shí)附著排查。提示Arthas本身是一個(gè)診斷工具它不改變業(yè)務(wù)代碼的最終邏輯。但要注意在敏感環(huán)境使用時(shí)需要做好權(quán)限管理避免有人通過(guò)它執(zhí)行危險(xiǎn)操作比如動(dòng)態(tài)修改類邏輯。生產(chǎn)環(huán)境建議配合審計(jì)和權(quán)限體系來(lái)用。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來(lái)用因?yàn)楹罄m(xù)版本升級(jí)時(shí)用它來(lái)引導(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)限不足的問(wèn)題。這個(gè)坑我踩過(guò)很多次后面會(huì)在排查章節(jié)單獨(dú)說(shuō)。2.2 無(wú)交互式啟動(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)用一跑起來(lái)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)過(guò)本地的Arthas客戶端再通過(guò)這個(gè)通道發(fā)送給目標(biāo)JVM里的agent去執(zhí)行。這條鏈路聽起來(lái)有點(diǎn)繞但只要理解了排錯(cuò)就快多了。比如你遇到attach成功但命令半天沒反應(yīng)那大概率是目標(biāo)進(jìn)程中agent初始化出了問(wèn)題比如類加載器沖突、Arthas版本過(guò)舊等。再比如你發(fā)現(xiàn)本地能連上自己的測(cè)試環(huán)境但線上環(huán)境始終連接失敗就要檢查網(wǎng)絡(luò)策略是否開放了8563和8562這兩個(gè)端口。2.4 檢查Arthas是否工作正常附著成功后可以先執(zhí)行一個(gè)最簡(jiǎn)單的命令試試[arthas12345]$ version如果返回版本號(hào)說(shuō)明鏈路通暢。然后可以執(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這樣每秒刷新一次。下面給你看一眼典型輸出長(zhǎng)什么樣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ù)線程長(zhǎng)期處于RUNNABLE狀態(tài)而且CPU占比明顯偏高基本可以鎖定它就是CPU飆高問(wèn)題的元兇。再用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è)線程的堆棧信息全部打印出來(lái)并且自動(dòng)帶上線程的ID、名稱、CPU使用率、狀態(tài)。有一次我遇到線上CPU突然打滿用這個(gè)命令一下就看到了某個(gè)線程卡在了一個(gè)JSON序列化工具的循環(huán)里棧頂清清楚楚寫著某行代碼的toString調(diào)用問(wèn)題原因秒定位。第二查看指定線程的完整棧[arthas12345]$ thread 67其中67就是線程ID。這會(huì)打印該線程的完整堆棧適合排查線程阻塞在哪里、鎖等待在哪里。第三查找線程間是否有鎖等待和死鎖[arthas12345]$ thread --stateBLOCKED如果想要檢查死鎖Arthas沒有專門的一條命令但是可以結(jié)合thread --stateBLOCKED和線程棧中的“waiting for monitor”字樣來(lái)判斷。某次我處理過(guò)一個(gè)偶發(fā)死鎖問(wèn)題兩個(gè)線程都在等對(duì)方的鎖通過(guò)這個(gè)命令一查堆棧里兩個(gè)線程互相等待的鎖對(duì)象非常直觀最后定位到是加鎖順序不一致導(dǎo)致的經(jīng)典死鎖。3.3 jad反編譯線上類確認(rèn)跑的是不是你以為的代碼線上最尷尬的情況之一就是代碼看著是新的實(shí)際發(fā)出去的包是舊的。與其問(wèn)別人不如直接反編譯看字節(jié)碼。jad命令能反編譯任意已加載類打印出它的Java源碼結(jié)構(gòu)實(shí)際是反編譯結(jié)果可能和原始源碼有細(xì)微差別但邏輯基本可讀。用法非常簡(jiǎn)單[arthas12345]$ jad com.example.OrderService輸出會(huì)帶類加載器信息、源碼位置、反編譯的Java代碼。這個(gè)命令在排查“為什么線上行為和本地不一致”時(shí)特別有用。有一次客戶端反饋某功能表現(xiàn)異常我用jad一查發(fā)現(xiàn)類里根本沒有最新加的判斷邏輯立刻確認(rèn)是發(fā)布流程出了問(wèn)題省掉了無(wú)休止的討論。如果你的類被JIT優(yōu)化了反編譯出來(lái)可能有部分內(nèi)容顯示不出來(lái)但不影響判斷大致邏輯。可以用jad --source-only只輸出源碼方便復(fù)制到本地做diff比較。3.4 watch觀察方法調(diào)用入?yún)ⅰ⒎祷刂岛彤惓atch是Arthas里我最喜歡的命令沒有之一。它用來(lái)觀察指定方法的每一次調(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ù)來(lái)控制位置或者更常用的是保持默認(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í)超過(guò)200毫秒時(shí)打印方法內(nèi)部的調(diào)用鏈耗時(shí)詳情。每一行會(huì)顯示類名、方法名、耗時(shí)、調(diào)用來(lái)源。trace是我處理性能問(wèn)題時(shí)最依賴的工具。比如你懷疑數(shù)據(jù)庫(kù)查詢慢但數(shù)據(jù)庫(kù)監(jiān)控又沒查到慢SQL或者懷疑HTTP外部服務(wù)超時(shí)卻不知道具體在哪個(gè)階段。trace一跑整個(gè)方法內(nèi)部的每一步耗時(shí)一目了然是內(nèi)存計(jì)算慢還是RPC調(diào)用慢還是某個(gè)循環(huán)里做了太多無(wú)用計(jì)算全都能看到。和watch不同的是trace的成本相對(duì)高一些尤其是在高頻調(diào)用方法上開啟trace會(huì)有一定的性能開銷。所以在生產(chǎn)環(huán)境使用時(shí)要控制好追蹤的目標(biāo)方法不要掛在整個(gè)入口上大規(guī)模trace更推薦在定位到大致方法后細(xì)粒度去開trace。3.6 stack方法被誰(shuí)調(diào)用、調(diào)用鏈長(zhǎng)什么樣stack命令會(huì)輸出當(dāng)前方法被調(diào)用的調(diào)用路徑簡(jiǎn)單理解就是“誰(shuí)調(diào)用了我”。用法[arthas12345]$ stack com.example.OrderService createOrder這個(gè)命令適合回答“這個(gè)方法為什么被反復(fù)觸發(fā)”、“這個(gè)入口是被人調(diào)用還是內(nèi)部定時(shí)任務(wù)觸發(fā)的”。有一次排查一個(gè)數(shù)據(jù)錯(cuò)亂問(wèn)題就是想弄清楚某條數(shù)據(jù)為什么會(huì)走到一個(gè)異常分支最后用stack發(fā)現(xiàn)原來(lái)是消息消費(fèi)邏輯里間接調(diào)用了同一個(gè)方法導(dǎo)致數(shù)據(jù)狀態(tài)被重復(fù)修改。stack還支持按條件輸出比如只輸出耗時(shí)超過(guò)閾值的調(diào)用[arthas12345]$ stack com.example.OrderService createOrder #cost1000這樣既能看到調(diào)用鏈也能篩選出慢調(diào)用用來(lái)排查偶發(fā)性慢請(qǐng)求特別好使。3.7 tt時(shí)間隧道記錄方法調(diào)用的歷史現(xiàn)場(chǎng)如果說(shuō)watch是“實(shí)時(shí)看每一次調(diào)用”那tt就是“把調(diào)用的現(xiàn)場(chǎng)記下來(lái)回頭慢慢看”。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ā)問(wèn)題最讓人頭疼的就是無(wú)法復(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í)間不要過(guò)長(zhǎng)記錄次數(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è)過(guò)程中觀察某個(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用來(lái)搜索所有已加載的類[arthas12345]$ sc *OrderService*輸出會(huì)顯示類全限定名、類加載器、類狀態(tài)。如果想看類的詳細(xì)結(jié)構(gòu)加-d參數(shù)[arthas12345]$ sc -d com.example.OrderService這樣會(huì)輸出類的修飾符、注解、父類、接口、成員變量等。getstatic用來(lái)讀取類的靜態(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)類反編譯出來(lái)導(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)用是無(wú)效的而且redefine不會(huì)改變類的結(jié)構(gòu)你不能新增字段、不能新增方法簽名、不能增加銷毀原結(jié)構(gòu)。一般我拿它來(lái)做臨時(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)急。不到萬(wàn)不得已我建議你先嘗試用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)的線程。這一套流程本身沒問(wèn)題但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)屬于典型的正則回溯問(wèn)題。這個(gè)案例關(guān)鍵點(diǎn)在于thread -n非常省事省掉了jstack 人工匹配nid的過(guò)程。如果只靠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拉長(zhǎng)。后續(xù)調(diào)整了調(diào)用方的超時(shí)時(shí)間并且給這個(gè)下游調(diào)用增加了本地緩存問(wèn)題徹底解決。如果不用trace靠加日志排查這種偶發(fā)問(wèn)題可能要發(fā)好幾個(gè)版本才能抓到一個(gè)慢樣本而且很有可能會(huì)因?yàn)殡S機(jī)性導(dǎo)致錯(cuò)過(guò)現(xiàn)場(chǎng)。trace的價(jià)值在于它不需要任何提前埋點(diǎn)事后診斷能力很強(qiáng)。4.3 案例三方法返回值為什么和預(yù)期不一致還有過(guò)一次經(jīng)歷是同事在排查一個(gè)對(duì)賬系統(tǒng)的金額計(jì)算差異。日志里打了入?yún)⒁泊蛄俗罱K返回值但中間經(jīng)過(guò)了好幾個(gè)子方法的嵌套調(diào)用看不出是哪一步把金額改錯(cuò)了。這種情況watchstack組合拳非常管用。先watch最外層方法看看入?yún)⒑妥罱K返回值如果出入?yún)]問(wè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)用來(lái)源確認(rèn)只有這一條業(yè)務(wù)路徑走錯(cuò)了舍入模式。整個(gè)過(guò)程沒有重啟、沒有改動(dòng)一行代碼一個(gè)下午就把根因挖干凈了。5. 常見問(wèn)題與排查思路Arthas使用中踩過(guò)的坑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無(wú)法讀取目標(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ì)遇到這類問(wèn)題。5.3 對(duì)象層級(jí)太深輸出被截?cái)嗄J(rèn)情況下Arthas為了避免把大量數(shù)據(jù)一股腦打印出來(lái)會(huì)限制OGNL表達(dá)式輸出對(duì)象的展開深度。如果你想看更多字段用-x參數(shù)調(diào)大即可。比如[arthas12345]$ watch com.example.OrderService createOrder {params, returnObj} -x 5如果-x調(diào)得太大導(dǎo)致輸出非常長(zhǎng)影響閱讀可以同時(shí)用-n限制觀察次數(shù)比如-n 3只輸出三次結(jié)果。5.4 ognl表達(dá)式寫復(fù)雜了容易出錯(cuò)怎么調(diào)試ognl表達(dá)式在Arthas里雖然功能強(qiáng)大但一旦寫復(fù)雜了語(yǔ)法錯(cuò)誤可能比業(yè)務(wù)代碼本身還難排查。我的習(xí)慣是先在本地用一個(gè)簡(jiǎn)單的Spring Boot應(yīng)用試表達(dá)式確認(rèn)無(wú)誤了再拿到生產(chǎn)環(huán)境執(zhí)行。還有一個(gè)技巧是拆分成小的表達(dá)式逐步驗(yàn)證先獲取對(duì)象引用再訪問(wèn)字段不要一口氣寫超長(zhǎng)的OGNL鏈條。比如你想拿到Spring容器里的某個(gè)Bean并調(diào)用方法可以先執(zhí)行[arthas12345]$ ognl #ctxorg.springframework.web.context.ContextLoadergetCurrentWebApplicationContext(), #ctx確認(rèn)這個(gè)對(duì)象能拿得到再去擴(kuò)展后面的字段訪問(wèn)。5.5 Arthas本身對(duì)性能的影響很多人會(huì)擔(dān)心Arthas附著之后影響業(yè)務(wù)性能。實(shí)話實(shí)說(shuō)開啟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的特殊情況容器化部署越來(lái)越普遍在容器里用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 無(wú)法訪問(wèn)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)程端口映射到本地再訪問(wèn)這樣就不用額外開防火墻端口了。整體來(lái)說(shuō)Arthas確實(shí)是一個(gè)讓我“用過(guò)就回不去”的工具。它解決的不是某一個(gè)具體的問(wèn)題而是把人從“盲人摸象”的排查模式里解放出來(lái)讓你能直接看到運(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)境多試幾遍熟能生巧之后線上問(wèn)題再也不用靠“重啟大法”來(lái)解決了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
狠狠操官网| 大香蕉中文aV在线| 日韩操啪| 亚洲欧洲自拍| 国产精品久久久久久9999| 麻豆国产96在线| 国产强奸乱伦第1页| 亚洲色性情三级| 五月丁香激情综合| 国产精品无码论坛| 国产精品一区二区亚洲人成毛片| 欧美情色亚洲| 伊人色综合欧美| 日本一二区免费| 欧美,日韩,亚洲视频| 人妻少妇精品久久久久久久| 激情文学亚洲| 黑人与人妻| 丝袜狠狠草尤物人妻av91| 黑人操一区二区| 中文字幕蜜乳av| 色97综合中文字幕| 日韩97在线| 992大香蕉| 精品国产国产AV| 国产黄a三级三级三级av在线看| 亚洲精品毛片在线观看| 伊人久操| h无码动漫在线观看| 无码国产精品96久久久久孕妇| 日本熟妇自慰性高潮一区二区三区| 亚洲欧美综合色| 五月丁香婷婷综合网| 国产操偷| 亚洲一区二区三区欧美日韩| 午夜无码精品免费看性色| 免费观看性欧美一级| 偷拍偷窥与盗摄视频专区| 久久久久九九九九| 91福利网在线观看| 一二三区操逼国产91| 亚洲色交| 久久国产逼| 国产无码精品无码| 免费1级a做爰片观看| 一中国女人毛片水真多| 国产精品久久妻无码网站| 97精品视频| 91综合熟女| 一区二区乱码福利| 丰满美女一级毛片在线播放| 美女黄频a美女大全免费皮| 中国女人内射6XXXXX| 爆操无码| 日本不卡码黄色 | 天天射天天色成人| 91丝袜在线播放| 91情色在线| 青青草好吊色| 69XX一中文字幕人妻91| 久久欲| 国产a片操逼| 亚洲天堂人妻熟妇视频| 婷婷九月色| 人妻嗯啊啊在线播放| 奸色色 男人天堂 天天射| 91新在线欧美| 少妇精品| 99re热有精品视频国产| 免费精品福利在线观看| 亚洲精品久久久久久久久豆丁网| 91女优在线观看 | 欧 美 自 拍 偷 拍| 亚洲中文国际强奸字幕| www.激情| 射丝袜大香蕉| 呦呦影院| 婷婷天堂站| 人妻夜夜爽天天爽麻豆三区网站| 走光一区92下载| 热G综合热G中文| 少妇淫妇久久久久久久| 久久久久国产精品喷潮免费观看臀| 一区二区三区激情在线观看| 欧美操逼视频二区| 东京太热男人的天堂久久久| 99在线免费公开视频| 国产第25页在线观看| A久久| 天天天乱色综合全| 国产精品丝袜在线| 国产成人www免费人成看片| 91 刺激在线| 性色av一区二区| 久久精品店| 无套内射人妻在线播放| 婷婷五月天久久精品视频一区二区三区| 五十路熟女工口| 校园激情狠狠四射| 99久热| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 婷婷九月丁香| 欧美亚洲日本视频久久久| 99热97| 九九超碰综合网| 26UUU欧美日本| 久久丁香五月天| 91男女| 亚洲精品尤物yw在线影院| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 亚洲色图尤物视频| 亚洲AV不卡在线观看尤物| 99久久99久久免费精品蜜臀| 色综合久久久久| 久干网| 国产精品久久久久久久久久梁医生| 女人爽到高潮潮喷18禁网站| 综合五月天| 五月天丁香婷婷综合网站| 日本不卡二三区| 精品视频在线观看| 欧美夜夜骑视频| 久操凹凸视频| 色踪合AV| 自拍鲍鱼一区在线高清观看免费| 屁股久久久久久久久| 午夜视频好爽啊| 欧美精品 - 91爱爱| 欧美极品美女aaaaaa级黄片| 欧美中文狠| 国内精品a| 玖玖蜜臀资源网| av激情亚洲五月天| 久久亚洲天天做| a亚洲欧美色欲| 久久手机视直播| 国产精品香蕉| 日日夜夜草草草| 美女极品一区二区三区| 丝袜加勒比| 日韩人妻无码专区| 亚洲āv网址在线观看| 欧美日韩国产男人| 国产精品青草综合久久| a男人的天堂久久一级A毛片| 超碰在线97国产| 在线色导航| 亚洲系列欧美| 校园春色 男人天堂| 东京太热男人的天堂久久久| 蜜桃精久三区| 大香蕉乱伦视频网| 欧美成人一级麻豆| 97爱啪| 激情开心五月天| 国产精品com| 日日A∨| 精品国产人成在线| 搡老熟女免费视频 | 国产无码精品久久久久久| 欧美日本天堂| 国产日韩欧美三级片| 久9精品| 亚州色站 日韩电影| 日韩一级片在线看| 国产福利一区二| 蜜区区视频79 | 欧美的性爱网站免费| 曰本特级特黄特色黄色A级网站高清在线免费看| 亚洲码专区| 操逼操2| 日韩特一级久久| 蜜桃精品一区二区三区ww| 亚洲第一精品在线视频| 精品视频久久| 激情小说亚洲| avav青青草久久夜| 裸体1区| 亚州精人品大香蕉| 91蜜臀在线久久久久| 超碰成人最新最好看| 人妻少妇精品视频一区二区三区| 色老牛| 亚洲日本韩国极品一区二区| 激情第四色| 岛国毛片在线观看免费| 人妻少妇精品| 久久精品店| 精品人妻一区二区三区蜜桃视频| 亚洲免费97免费| 大香蕉伊人网WWWn0n| 熟女乱伦二区| 综合色色婷婷| 久久xxxx| AV 少妇 人妻 偷拍| 玖玖资源综合在线视频| 大香蕉一区二区在线观看.| 97干在线视频| 97色亚洲| 97免费在线观看| 97欧美色| 少妇精品久久久八区九区| 欧美视频第二页| 中文无码一二三区| 色色99| 亚洲1区| 日韩人妻一区二区精品| 1024人妻熟女一区二区三区| 丁香婷婷大香蕉| 国产精品一级片在线看| 高清国产av无码| 亚洲情色中文字幕一区| 91成人久久 | 欧美性综合| 欧美亚洲se91| 99热大香蕉伊在线| 成人久久久精品| 偷拍亚洲视频一区二区三区四区| 欧美精品,四区。五区| 亚洲情色一区二区三区| 日本二区不卡| 97资源久久| 国产后入| 欧美日韩国产黄色片| www.大香| 日日干日日| 丝袜美腿诱惑亚洲欧美视频在线观看| 男人的天堂2018东京热啪啪啪| 伊人91| 人妻天天爽夜夜爽爽| 成人久久无码www| 色999偷自拍拍| 日韩精品9区| 欧美色图人妻| 欧美天天弄| 国产精品人人爽人人做可爱福利| 午夜久久无码1000合集| 国内精品不卡无毒99999| 啊啊啊快操我视频| 熟妇女伦乱视频视频| 日韩十八禁| 欧美大波激情xxxx| 亚洲少妇中文字幕网址| 大香蕉 222| 91欧美巨乳| 97视频在线| 欧美1区二区三区公司| 国产精品高潮久久AV| 亚洲成人妻日韩在线| 五月天人妻综合| 国产乱子伦一区二区三区在线观看| 日韩福利综合一区| 成人黑料社久久| 中文高清一区二区的| 99蜜桃臀久久久欧美精品网站| 久久久久96| 国内偷拍精品一区二区| 动漫爆乳3D奶水一区在线观看 | 国产成人久久精品蜜臀| 99热精品在线观看| 天天色怡春院| 超碰免费人妻在线| 九九99久久| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 9超碰免费| 超碰免费欧美7| 在线观看中文字幕| 日本三级中国三级99人妇网站| 1区2区3区在线视频| 久久久久久久久久精| 97在线免费看视频| 超碰在线国产| 99后入| 老司机福利青青草| 青青草天天亲夜夜操网| 色色色色色色色色综合| 欧美传媒| 欧美综合97www| 狠狠躁伊人中文字幕| 日韩AV无码中文一区二区| 射丝袜高跟鞋99| 3P丝袜熟女 色综合| 久久综合亚洲色1080p| 天天添天天干电影| 免费毛片在线播放| 日韩青久久| 国产亚洲中文不卡二区| 色超碰综合| 美国精品国产精品| 哑洲在线| 婷婷色在线| 国产中文字幕在线观看| 久久久久亚洲Aⅴ无码| 2026国产精品视频| 乱伦图一区| 欧美A√综合网| 亚洲av综合色区图片亚洲| 高树玛利亚无码流出| a级免费在线观看| 理论久久婷婷网 8| 乱伦日本中文自拍| 亚洲人妻熟妇三十三区| 久久九九国产精品| 99热在线只有精品| 亚洲国产精品久久久久久久久久| 91亚洲在线| 91xingse| 永久免费发布性爱网| 欧美性综合| 操逼片中文| 久久激情视频| 男人的天堂2018东京热啪啪啪| 好吊色青靑草| 天天综合香 ld视频| 操逼网站网站| 91精品国久久久久久无码| 亚洲高清国产理伦片| 中文精品少妇天堂| 精品丰满人妻一区二区三区免费观| 97日亚洲欧美| 久久视网78| 欧美午夜视频免费观看| 91干熟女| 97久久国产| 婷婷激情一区二区三区俺也去| 免费家庭乱伦视频| 秋霞蝌科网日本一区| 偷拍 亚洲 欧美| 日本三级黄页| 亚洲图片激情综合另类| 亚洲,欧美,综合网| av婷婷色网| 高跟丝袜AV专区国产| 玖日综合网| 欧美日韩亚洲电影| 人人天天欧洲| 国产精品干干干| www.人人摸在线视频| 骚货| 日韩国产在线观看av| 操久久久久| 大香蕉一人在线| 色五月综合| 18禁止看精品中文字幕| 亚洲高清91| 91AV天堂| 欧美三级一级| 蜜桃av综合网发布| 欧美性爱无码一区二区三区| 97综合国产| 无码久| 丁香五月综合| 精品人体无圣光凹凸| 欧美 亚洲 第一页| 青青草一本道福利视频| 丝袜av一区二区三区| 超碰79人人乐| 99热啪啪| 国产乱伦一二三区| 人人操人人搞人人草| 麻豆亚洲AV成人无码久久精品| 欧美 亚洲 另类 综合| 偷拍 亚洲| 五月色丁香| 国产麻豆一级精品视频| 人人操,操人人| 一级特黄aaa大片在线观看成人一级片在线观看 | 大香交| 无码人妻丰满熟妇奶水区毛片| 亚洲人妻中文高清| 国产黄色影片在线观看| 性久久久| www.91人妻.com| 97在线免费观看视频| 校园春色AV天堂| 欧美美逼| 男人天堂东京热| 日韩日韩日韩-国产乱码精品一区二区| 国产盗摄美女如厕大神作品在线观看| 亚洲乱色视频一区、二区在线| 啪啪啪大香蕉| 亚洲黑丝在线| 艳美熟妇先锋一二三区| 暖暖精品二区三区观看| 一区二区三区国产精产| 操操操操操操| 青青青艹在线视频| 熟女露脸激情自拍视频| 亚洲 中文 欧美 日韩 在线| 校园春色AV天堂| 丝袜AV一区二区三区| 天天干18禁| 美女9118禁| 91网站18禁| 9Ⅰ超碰| 一级二级在线观看| 国产高清吃奶免费视频网站| 粉嫩av久久一区二区三区| 日韩黄片影院| 91在线无码精品秘 软件| 国产免费一区二区在线A片视频| 91精品丝袜在线观看| 婷婷91| 久久亚洲骚逼综合| 老司机久久| AV在线播放网址| 久久岛国| 欧美成人四级在线播放| 国产精品久久久久综合| 欧美综合色站| 亚洲欧美变态| av黄图片在线观看| 大香网站| 91爽啪| 极品久久久久久久久久久久久久| 我想要啊 啊 啊| 婷婷爽人人婷婷爽视频| 变态乱伦伪娘灌肠一区二区| 成人性爱电影网| 亚洲情色五月天| 91女优在线观看 | 日本三级R| 成人贴图日韩欧美| 亚州日韩97| 国内一级精品| 另类小色呦| 色噜噜国产在线| 狠狠干妹子| 亚洲AV无码秘 蜜桃臀国精产品| 久久91视频| 麻豆久久久一区二区| 久久99草| 国产精品人妻无码久久久老鸭窝| 黑人操一区二区| 天天影视综合网欧美精品| 麻豆激情综合| 免费试看60秒| 99视频自拍| 三级网站超变态精品| 2020中文字幕在线观看| 日韩性爱免费视频在线网站| 夜夜操91744565| 亚洲九九视频| 国产精品久久久久久片| 2017大香蕉国产精品久久| 99热伊人| 久久久五月天| 国产少妇内射| 人妻 中文 日韩| 久久av网| 日本孕妇一区二区视频操逼免费看 | 大色网久久| 一二三四视频中文字幕在线看| 天堂种子在线www网资源| 久久国产对白激情浪潮| 2025年A片视频精品| 亚洲色吧网| 欧美图片色五月天| 久久AV无码网址| 日韩欧美偷拍美女视频| 色综合久久av| 色噜噜人妻丝袜AV资源| 伊人五月天婷婷| 91色五月俺来也| 欧美裸体美女日麻屄| 人妻熟女字幕一区二区| 青青操国产夫妻| 激情综合五月| 香蕉99秘 一区精品蜜桃臀| 欧美在线观看综合国产| 国产乱码久久久| 欧美亚洲中文字幕| 久操频道免费在线呗看| av大香蕉| 99色网| 欧亚乱色熟一区二区三四区| 91精品国产91久久福利| 国产又大又粗又长视频在线| 无码人妻精品一区二区三区99不卡| 男人天堂站| 国产精品com| 久久久久一本一区二区青青蜜月| 国产多人在线观看视频| 97天天在线| 97人人干人人操| 亚洲高清欧美总合| 欧美成人精品一区二区三区| 91成人高清在线观看| 女生自91网站| 亚洲欧洲网站免费观看| 91综合网在线| 青青草伊人久久| 性色av蜜臀av色欲aV| 啊啊啊啊啊舒服| 91狠狠综合久久| 91丝袜在线观看| 91天天综合网,天天综合网| 91在线视频观看国产| 粉嫩久久久极品| 欧美日韩国产在线| 91在线超高颜值国产| 欧美黑人日韩少妇色情| WWW4虎| av天堂精品久久| 久久久免费高清中文视频| 国产精品麻豆成人AV艾秋| 污色区网站| 天天情欲宗合网| 伊人AAA| 高潮的A片激情扒开一区| 亚欧美综合| 久久免费中文字幕在线观看| 久热香蕉精品在线视频| 欧美色图色综合| 97精品在线| 免费看毛片操穴| 嗯啊抽插大香蕉网页| 亚洲欲色| 久久9999| 中 文字幕一区二区三四 五 区日 日 骚| 国产精品久久久久久久毛片1| 久久岛国| 亚洲激情深爱文学小说网站| 伊人大香蕉在线| 中文字幕性感少妇av| 亚洲伊人久久综合97| 人人操人人精品影片| 色综合潮| 偷拍网站久久男女男| 亚洲国产高清福利视频| 国产精品一区二区亚洲人成毛片| 九九热九九| 精品久操| 欧美色图在线视频少妇| 亚洲情色在线| 国产性感骚丝袜在线| 五月天色色色| 五月天激情四射| 亚洲色 国产 欧美 日韩| 欧美精品久久久久久久丰满| 欧美激情专区| 欧美黑人熟妇精品91| 天天综合站| 欧美在线中M| 夜草欧美| 使劲用力艹少妇视频一区二区| 日韩av三四区| av大香蕉网站| 亚洲狼狼干综合1| 超碰激情808| 青青爽| 日韩在线视频1234| 精品国产自在在线99| 国产少妇肉丝在线观看| 亚洲日本成人动漫| 欧洲天天在线| 欧美日韩国第一区| 99re69| 91九九九小逼| 青青伊人加勒比海| 97欧美久久久久久久| 美女干逼2| 亚洲高清在线se| 一本色道久久综合狠狠操| www.acm成人黄色毛片| 亚洲图片欧美另类综合免费视频大大香| 男人精品天堂一区| 91欧洲入口| 成人青青草原伊人| 亚洲天堂男人的天堂| 亚洲精品九九九| 91在线视频国产网站| 国产二区三区免费视频| 老熟女乱子伦中文字幕一区二区| 美女一区二区国产精品| 色五月首页| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 狠狠激情综合狠狠操中文字幕| 久久riav中文精品| 综合一区中亚洲国产成人综合精品| 性色av婷婷久久一区二区点复制| 人妻熟女字幕一区二区| 欧美精品丝袜久久久中文字幕| 麻豆AV96熟妇人妻| 97超碰影音| 蜜桃久久一区二区| 美国精品国产精品| 国产激情视频在线观看| 欧美九九99久久精品| 人妻黑丝袜电影| 国产精品白丝www| jizz啪啪| 国产成人无码网站在线视频| 99999精品视频| 嫩草 我啊~嗯~在线| 国产熟女一区二区| 人妻一二三区| 熟妇在线视频一区二区| 夜草欧美| 青娱乐啪啪视频| 亚洲 自拍偷拍 欧美| 婷婷五月激情综合| 日韩无码AB| 欧美97色| 国产精品成人蜜臀AV在线| 伊人天堂在线| 激情情色五月天| 日本孕妇一区二区视频操逼免费看 | 91痴汉| 日韩操啪| 婷婷伊人綜合中文字幕| 精品久久大胆人体| 乱欲视频| 99精品免费| av线电影| 色屁屁影院www国产| 中文字幕成人| 欧美日韩97在线| 久久精品国产AV一区二区三区| 欧美刺激色黄片免费看| 日日橹狠狠爱欧美超碰| 精品人妻一区二区免费蜜桃视频| 日本日皮视频逼| 97这里只精品| 国产亚洲日韩欧| 国产欧美日韩女同性恋ww喷水精品| 亚洲男人天堂视频| 亚洲一区二区三区播放在线| 亚州成人a∨| 屁股久久久久久久久久| 狠狠综合网| 久久久久久中文| 女人 A一级| 色婷婷久久综合超碰| 欧洲在线性爱视频| 欧美大香蕉在线观看| 超碰欧美97| 天天日少妇逼AV| 91在线观看,天天综合| 日韩中文字幕在线视频观看| 98超碰日本| 自拍视频一区在线观看| 牛牛久久国产精品视频一二三| yaouchengrenav| 厕所偷拍在线| 免费视频在线一区二区不卡| 久久综合久久综合人久久夜精品| 天天综合亚洲综合| 91国产丝袜足交精品视频| 成年人黄色| 亚洲天堂性爱| 秋霞一集毛片观看| 自拍二页| 日本视频一区二区三区| 97国产综合欧美| 欧美黄色片AAAAA| 丰满人妻-区二区三区免费看| 激情综合色| 亚洲国产精品无石码久久| 亚洲欧美大香蕉| yw尤物av无码点击进入麻豆| 亚洲精品欧洲精品| 午夜福利精品| 黄页网站成人免费| 2020中文字幕| 亚洲色图尤物视频| 中精品一区二区三区| 婷婷伊人綜合中文字幕| 日韩肏逼视频| 97超碰在线资源网站| 嫖老熟女A片一二三区| 欧美综合天堂| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 亚洲性综合| 国产呦精品一区二区三区下载| 嗯~啊~快点 死我视频免费看网站| 日操粉逼逼| 性欧美91| 亚洲欧洲无码97久久精品| 一区二区影院| 97欧美综合| 成人在线永久| 深爱激情五月天| 影音先锋每日最新资源在线观看| 成人精品欧洲亚洲| 少妇超碰在线| 亚州免费啪啪视频| 日日不卡av| 久久只有精品一区二区三区| 亚洲无线码一区国产欧美国| 激情小说在线视频| 国产热av| 色女综合| 91九色精品熟女内射| 日本精品一级二级三级| 亚洲91射| 欧美激情一区二区| 日韩精品国产精品五码一区二区| 又大又长又粗又爽又黄| 国产综合久久久麻桃个| 超碰午夜| 91亚洲欧美色图| 超碰99在线| 久久久久久国产精品免费网站| 国产日韩久久| 日韩淫色网| 青青草国产亚洲精品久久| 天天天天天干夜夜夜夜夜操| 亚洲图片婷婷五月天| 亚洲激情综合另类| 日韩毛片9| 嗯嗯啊啊视频一区二区三区| 日本有码影片下载 | 97资源亚洲| 九九综合网| 色欲人妻一区二区在线| 久久天天摸| 激情五月天网| 在线国产探花| 久久精品国产亚洲AV高级北京| 欧美福利视频啊啊啊啊| 欧美在线天堂| 亚洲双插| 97久久国产精品| yy少妇精品久久| 久久久中文版| 欧美色图偷拍另类| 欧美男女午夜啪啪| 国产亚洲一黄| 91超级碰| 亚洲高清无码免费观看视频| 午夜精品五区| 很黄很色的视频在线观看| 精品黄色电影| 亚洲人精品久久久| 91精品国久久久久久无码| 性爱动态120秒| 久久伊人五月天| 亚欧性爱在线无码| 五月天综合在线| 国产超碰在线| 九九久久精品| 激情六月天| 九九综合| 久久国产视频性吧 | 男女无套 免费网站| 亚洲欧美不卡线| 超碰97护士| 精人妻无码一区二区三区伊人直播| 日韩性爱小视频| 艹比视频国产精品| 人人摸人人入| 亚洲天堂男人的天堂| 天天天肏屄肏屄肏屄欧美欧美| 精品人妻伦一区二区三区久久| 欧美亚洲AN| 午夜福利久久久噜久噜久久综合| 欧美性天天影视| 亚洲少妇色| 91国产美女丝袜足交精品视频| 婷婷视频网| 久久成人国产精品| 午夜欧美J进J出白浆流出久久久 | 淫纸中9区| 蜜臀av网址| 校园春色宗合网| 日韩乱插| 78p欧美| 亚洲激情天堂网| 中文字幕青青草| 麻豆国产97在线| 欧美爆操91| 日韩电影在线观看网址| 亚洲图片第一页| 美女91| 一级黄色性爱裸体视频| 在线a v| 色五月激情网| www.操| 国产亚洲精品美女| 性感美女91影视| 欧美日韩插逼视频| 人妻人人做人人澡人人爽欧美一区| 国产精品一区二区黄片| 夜夜狼人妻| 日韩人人精品| a片自拍直播视频| 国产午夜无码片在线观看影视 | 亚洲欧美中文日韩视频中国语| 中文伊人大香蕉视频| 欧美激情久久久久| 91色图| 久久‘黄片视频| JULIA人妻风俗店中出电影| 97在线资源| 日韩性爱小视频| www…国产操逼| 97人人爱人人做人人乐| 日本亚洲嫩草影院啪啪| 97在线精品观看视频| 久久午夜伦| 亚洲自拍97| 欧美日产国产在线成人第一区| 综合久久99| 国产情色在线| 伊人久久综合影院精品久久久| 国产在线精品偷| 日夜干射色啊| 男人的天堂 在线一区| 岛国精品视频在线观看| 神马久久啊啊| 国产无吗在线播放| 韩国一区二区精品亚洲| 黑人精品欧美一区二区蜜桃| 日韩精品免费高清视频在线| 日本精品88888888| 60秒不遮不挡| 亚洲国产一区二区三区四区国产| 97色妞| 超碰97人人cao| 97色冈| 葡萄牙性视频一二区| 国产又色又爽又舒服的三级视频| 大乔未久88一区| 亚洲无无码αⅴ每日更新| 97干日韩| 好色综合| 久热久一区二区三区| 78久久| 国内91熟女人妻丝袜天天精品视频在线| 少妇高潮喷水无套久久久久久| 国产一进一出视频网站| 久久精品老司| 91丨豆花丨熟女| 日韩人妻无码精品系列| 久久性爱视频99| 色老汉色| 熟妇xxxxx性春色| 青青草啪啪网| 变态乱伦伪娘灌肠一区二区| 欧美日动态视频| 99国产在线 精品 视频| 老熟妇一区二区三区啪啪| A级毛片在线看免费| 丰满搜索结果 -第18页- 久久高清无码 | 色香AV| 国产人伦精品一区二区三区| 亚洲麻豆av一区二区| 久久久不能久久久久| 日本性感人妻91| 躁躁日曰躁2020| www.91理论| 国产AB视频| 无码99| 无码久久亚洲高清,| 成人在线视频一区| 日人妻视频91| 亚洲色图A| 日韩美女久久一区二区三区| 日韩av电影成人在线| 动漫av中文| 久久一区二区三区入口| 东北女人高潮视频| 九九精品美女高溯喷水 | 欧美黑人与女人91~| 91伊人久| 久久久精| 婷婷四五区| 激情熟女12P| 国产乱青青草久久| 99在线免费视频| 亚洲伊人久久综合97| 中文字幕人乱码中文字的预防方法| 91精品啪在线观看国产城中村| 草久在线| 国产成人AV麻豆| 777奇米影视777四色| 日日操夜夜操天天操免费观看麻豆| 刺激性视频黄页| 青娱乐久久艹| 日韩av在线精品观看| 超碰欧美在线欧美| 久久黄黄| 日韩无码黄色片| 蜜臀久久99精品久久久久久婷婷| 嫩草伊人久久精品| 99热这里是精品| 日韩性爱毛片操骚逼| 97欧美日韩综合| 欧美aⅴ99久久黑人专区| 丁香九月激情| 内射老妇BBWX0C0CK| 亚洲清纯综合| 亚洲日产专区婷婷| 美中韩AV综合网| 一级久久久久久久久久久| 亚洲高清视频在线免费观看| 精品二区三四区五电影 | 秋霞一级A片黄色视频| 久久精品国产亚洲粉嫩| 夜夜综合| 99国产在线绯色一区| 久久久五月天| 日逼国产| 国产亚洲精品美女久久久| 蜜臀久久99精品久久久久久婷婷| 久久久国产精品亚洲精品| 97香焦色区| 91久热| 欧美精品久久久久久久久88| 人妻干天天| 国产综合色精品在线观看| 免费视频观看60秒| 亚洲诱惑天堂| 日韩天天本| 4141514逼喷水三级片| 一区二区日韩欧美久久| 1769精品一区二区三区| 人人看人人爰人人操| 亚洲婷婷综合网| 久久久久夜夜夜夜| 干B网| 欧美性高潮在线| 超碰偷拍| 大屁股熟女一区二区三区| 亚洲视频一二区| 91色五月俺来也| 爱逼综合| 麻豆成人影音在线| 日韩欧美女求操每天更新| 99色在线| 91无码人妻精品一区二区三区蜜桃| 97网址97| 97久久天天综合色天天综合色电影| 四虎884a| 欧美一区二区成人一卡| 美美91成人国产精品欧美精品久久久久久久| 丰满人妻一区二区三区四| 夜夜爽爽爽| 精品国产乱码久久久久久影片| 狠狠色婷婷| 日韩三级一区| 蜜色网色哟哟| 秋霞男人网| 久久久久密臀一区二区| 亚洲国产精品久久久男人的天堂| 91骚妇| 97网址97| 就去色综合| 欧美日韩在线小说 | 1人人看人人摸人人操| 欧美黄色大片在线观看 | 桃色五月天| 97网址www| 久久綜合很很很| 免费超碰97久久| 亚洲有薄码区久久在线一区| 亚洲小说视频| 国产 日韩 欧美一区| 中文字幕精品一区二| 日韩国产欧美伦理在线 | 99夜夜操| 大香蕉乱级| 中国国产精品一区视频| 91精品国产高清久久久久久,亚洲成人| 最近的最新的中文字幕视频| a网站免费观看| 艾草av| 欧美色图97| 九九久久玖玖| www亚洲免费| 青草av在线| 嗯嗯啊啊啊好舒服| 色哟哟1区2区| 东北女人高潮视频| 无码137片内射在线影院| 日韩人妻 中文字幕| 狠狠综合| 亚洲激情天堂网| 久久线上视频免费看| 国产久久免费精品视频| 精品国产久热在线观看| 亚洲……91| 天美一区在线| 超碰97色| 亚洲成A∨人影院在线欢看| 麻豆2区1区天美| 久久熟女久| 97超碰超碰| 91精品啪在线观看国产城中村| 国产熟女少妇一区| 久久超碰av在线| 男人的天堂网页| 啪啪啪精品视频| sss视频华人在线| 久热精品在线| 秋霞成人一级在线观看| 超碰av人人人| 伊人在线大香蕉视频久久| 亚洲伊人久久综合97| 大屁股xxxxx| 91N综合在线| 电家庭影院午夜69久久夜色精品国产69乱 | 99热精品在线观看| 亚欧美综合网。| 国产午夜在线观看| www.zbzhongsen.com| 久久视频少妇美女| 97超碰人人操人人操| 香蕉综合网| 四虎精品一区| 国产最新小视频在线播放下载| 九九九九久久久| 四虎免费视频| 亚洲精美粉嫩嫩泬在线观看| 亚洲高清视频在线观看| 国产97视频| 日韩在线观看中文字幕视频| 成人欧美日超碰| 操逼视频色| 亚洲丝袜天堂| 麻豆精品一区二区三区四区免费观看| 久9视频| 啊啊啊啊,啊啊好多水| 久久久久久日韩| 91网站视频在线观看| 99精品国产户外露出| 色色色色色色色色色色色色色色综合| 亚洲玖玖爱| 久久精品国产亚洲AV成人直播| 60秒免费小视频| 一类无码操逼视频| 久久超碰大香蕉| 国产特级毛片AAAAAA高潮流水 | 无码一区免费在线不卡| 啊啊啊 在线观看| 国产女人视频三四五区| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 亚洲一区二区三区四区视频| 噜噜噜亚洲精品| 3d成人精品一区二区| 午夜毛片高清免费不卡| av天堂精品久久| 日韩精品9区| 欧美日韩性爱无码| 97在线欧| 另类小说五月天| 加勒比综合88| 极品白嫩福利在线| 日韩激情无码影院| 天天天天天天天天综合| 国产网红精品| 在线啊啊啊| 日本99热| 精品九九| 青草香蕉网| 日本欧美一区二区三区免费| 熟女91网| 韩日精品四区| 人人操人人爽人人操人人| 亚洲精品骚逼| 婷婷激情五月天小说网| 人妻激情视频| 厕所偷拍在线| 黄片免费看的| 9久9久9久9久视频网站| 九色97| 亚洲h片在线免费观看| 亚洲国产亚洲天堂| 91操人| 久久精品人人做人人看| 亚州色图片在线色| 欧美日韩999| 肏逼视频日本| 校园春色家庭伦理欧美激情| 日日夜夜狠狠| 中文字幕乱码人妻二区三区| 9ⅰ久久久天天| 91男女啊啊啊| 口爆吞精在线观看| 国产97色在线| 亚热日本熟女| 水野优香在线观看| 日韩黄片视频试看| 蜜臀99久| 日韩视频小说在线观看| 国产超碰在线| 亚洲av综合色| 99re免费| 九一国产精品| 免費人妻夜夜爽天天爽爽一区| 午夜影美女日鸡鸡天天视频国产| 亚洲色交| 国产自啪精品视频网站黑丝| 婷婷三区| 久热婷婷| 一级黄色性爱A级片| 99re免费| 一卡二卡三卡| 亚洲欧美日产国产91毛片| 激情开心五月天| 日美免费黄片| 欧美福利视频啊啊啊啊| 欧美激情 一区| 欧美熟女丝袜| 4141514逼喷水三级片| 日韩av乱伦| 久草国产在线视频| 2018天天日天天日| 超碰99在线| 热久久无毒不卡| 日本东京热大香蕉a片| 亚洲 欧美 91| 色情五月丁香| 新婚人妻扶着粗大强行坐下| 国产精品久久久久无码Av网曝门| 97视频播放| 激情综合网激情五月天| 日本高清_区二区三区| 亚洲电影中字一区二区| 人人操人人肉久久精品| 成人资源中文字幕在线观看| 免费成人在线熟妇网| 久久激情视频| 好舒服视频| 丝袜喷水在线| 少妇二级| 久久国产视频性吧| 亚洲色综合| 国产精品久久久久av| 女人喷水视频在线观看| 亚洲中文字幕久久人妻| 国产福利电影| 玖玖爱在线视频免费观看| 久久久久国产精品久久久| 亚洲性高潮| 97欧美综合网| 精品人妻少妇| 久久欧美激情| 日韩91网站| 午夜男人的天堂| 超碰色老头| 亚洲色天| 欧美一区二区男人天堂| 夜夜精品视频| 欧美组图日韩亚洲中文字幕| 男女一进一出视频久久| 久久久久97| 免费A片三p视频| 色黄污美女啪啪啪免费网站| 欧美不卡在线一区二区| 国内精品嫩模A∨私拍小视频| 深夜福利黄片| 搡老熟女免费视频| 国产多人在线观看视频| 亚洲精品尤物yw在线影院| 日本日逼高清| 在线观看黄色电话| 亚洲天堂久久| 天堂av2019|