日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

性能测试如何定位瓶颈?偶发超时?看高手如何快速排查问题

發(fā)布時(shí)間:2025/3/21 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 性能测试如何定位瓶颈?偶发超时?看高手如何快速排查问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者 |?張奇(司楚)

當(dāng)線上碰到頭疼的問題時(shí),還在對(duì)著代碼一行行的看?真的不太時(shí)髦了啊喂~

俗話說的好 “問題排查不用愁,Arthas 來幫您忙。” 今天就來說說這個(gè)讓媽媽再也不用擔(dān)心我排查問題的 Java 診斷神器——Arthas!

?

什么是 Arthas?

Arthas 是一款開源在線診斷工具,采用命令行交互模式,支持 web 端在線診斷,同時(shí)提供豐富的 Tab 自動(dòng)補(bǔ)全功能,進(jìn)一步方便進(jìn)行問題的定位和診斷。

這是一款開源一年多 GitHub star 2 萬,99% 的阿里研發(fā)小哥都在用的 Java 終極診斷利器!相對(duì)比直接下載使用,我推薦開發(fā)者可以試一下通過 IDE插件 Cloud Toolkit 中使用 Arthas 來實(shí)現(xiàn)一鍵遠(yuǎn)程診斷功能。

得益于 Arthas 強(qiáng)大且豐富的功能,讓 Arthas 能做的事情超乎想象。下面僅僅列舉幾項(xiàng)常見的使用情況,更多的使用場景可以在熟悉了 Arthas 之后自行探索。

  • 是否有一個(gè)全局視角來查看系統(tǒng)的運(yùn)行狀況?

  • 為什么 CPU 又升高了,到底是哪里占用了 CPU ?

  • 運(yùn)行的多線程有死鎖嗎?有阻塞嗎?

  • 程序運(yùn)行耗時(shí)很長,是哪里耗時(shí)比較長呢?如何監(jiān)測呢?

  • 這個(gè)類從哪個(gè) jar 包加載的?為什么會(huì)報(bào)各種類相關(guān)的 Exception?

  • 我改的代碼為什么沒有執(zhí)行到?難道是我沒 commit?分支搞錯(cuò)了?

  • 遇到問題無法在線上 debug,難道只能通過加日志再重新發(fā)布嗎?

  • 有什么辦法可以監(jiān)控到 JVM 的實(shí)時(shí)運(yùn)行狀態(tài)?

Arthas 的命令、功能在其官方文檔有詳細(xì)介紹,下文將介紹一下近期幾個(gè)使用場景。

?

場景 1:定位壓測時(shí)的性能瓶頸

平時(shí)服務(wù)器請(qǐng)求都很正常。壓測時(shí),依賴的服務(wù)、數(shù)據(jù)庫也都沒有到達(dá)瓶頸,但是機(jī)器的 CPU 全部飄紅,why?

通過 jstack 命令,只能看到某一時(shí)刻的堆棧,沒有抓到真兇。

thread 查看當(dāng)前線程信息,查看線程的堆棧。

?

thread -n 3 -i 10000 ?可以統(tǒng)計(jì) 10 秒內(nèi)最忙的 3 個(gè)線程,并且打印它們的堆棧,很容易發(fā)現(xiàn)問題。最終發(fā)現(xiàn)的問題比較簡單:日志中打印了 location 的信息,包括 類名、方法名和行號(hào)。

動(dòng)態(tài)獲取代碼的方法名、行號(hào)等信息,通常是通過 new Throwable() -> 打印 Throwable 的堆棧 -> 截取堆棧中最頂層的業(yè)務(wù)代碼 -> 拆分字符串獲取類、方法、行號(hào)等信息, ?打印堆棧對(duì)性能損耗是比較大的。

場景 2:檢測偶發(fā)的超時(shí)

有段時(shí)間,總是碰到幾次偶爾的超時(shí),但是看日志都正常,鷹眼的調(diào)用鏈路都完全 ok,沒有哪一步數(shù)據(jù)庫操作或者 HSF 調(diào)用是特別慢的。

各種監(jiān)控統(tǒng)計(jì)的時(shí)間維度的耗時(shí),都十分正常,無法找到那個(gè) rt 的尖刺。

想到了可能是日志的問題,但是沒有證據(jù)支撐。

trace?命令能監(jiān)控每一步的耗時(shí),并且可以配合條件表達(dá)式,當(dāng)耗時(shí)超過 xx ms 時(shí)打印詳細(xì)日志。

找臺(tái)機(jī)器,輸入命令,后面的就是靜等了。再次出現(xiàn) rt 尖刺時(shí),能夠捕捉到耗時(shí)的分布情況。

通過 Arthas 拿到的結(jié)果,定位到是日志打印的問題。同步日志改為異步日志后,問題解決。

場景 3:debug?那要是動(dòng)態(tài)字節(jié)碼生成咋辦?

之前碰到過一個(gè) json 序列化時(shí)輸出的數(shù)字帶不帶引號(hào)的問題。當(dāng)時(shí)各種 debug、看代碼,發(fā)現(xiàn)是通過 ASM 動(dòng)態(tài)字節(jié)碼的方式生成的序列化類。到這完全放棄了,debug 已經(jīng)無法定位問題了。當(dāng)時(shí)通過另外一種方式避免了這種問題。

反過來看這個(gè)問題的時(shí)候,我們可以通過 Arthas 的 jad 命令,反編譯動(dòng)態(tài)字節(jié)碼生成的類,結(jié)合 watch 等命令,定位排查問題。

jad——反編譯指定已加載類的源碼

還可以通過?mc(menory compiler),?redefine?命令線上熱更新代碼,歡迎探索。

有了這些能力就算萬能了?不不,接著往下看。

場景 4:做點(diǎn)壞事

在問題排查過程中,發(fā)現(xiàn)了日志輸出到了控制臺(tái),這個(gè)對(duì)性能的損耗是比較大的。有什么辦法,在不發(fā)布的情況下緊急解決它?

  • 首先找到對(duì)應(yīng)的 class

sc?-d?ch.qos.logback.core.ConsoleAppenderclass-info???????ch.qos.logback.core.ConsoleAppendercode-source???????/home/admin/.../lib/logback-core-1.2.3.jarname?????????????ch.qos.logback.core.ConsoleAppenderisInterface???????falseisAnnotation?????falseisEnum???????????falseisAnonymousClass?falseisArray???????????falseisLocalClass?????falseisMemberClass?????falseisPrimitive???????falseisSynthetic???????falsesimple-name???????ConsoleAppendermodifier?????????publicannotationinterfacessuper-class???????+-ch.qos.logback.core.OutputStreamAppender+-ch.qos.logback.core.UnsynchronizedAppenderBase+-ch.qos.logback.core.spi.ContextAwareBase+-java.lang.Objectclass-loader?????+-com.taobao..LaunchedURLClassLoader@58dad04a+-sun.misc.Launcher$AppClassLoader@18b4aac2+-sun.misc.Launcher$ExtClassLoader@58ceff1classLoaderHash???5f205aa
  • 然后獲取 class 的屬性信息,找到 appender 列表

ognl?-c?5f205aa?'@org.slf4j.LoggerFactory@getLogger("root").aai.appenderList'
  • 刪除標(biāo)準(zhǔn)輸出的 appender

1ognl?-c?5f205aa?'@org.slf4j.LoggerFactory@getLogger("root").aai.appenderList.remove(0)'
  • 神器:火焰圖

排查性能問題的時(shí)候,還有一個(gè)神器:火焰圖通過火焰圖,很清晰的看到一段時(shí)間內(nèi),對(duì)每個(gè)方法耗時(shí)的統(tǒng)計(jì)。

?

開始使用 Arthas

  • 方式一:推薦使用?IDEA?插件下載?Cloud Toolkit 來使用?Arthas

地址:

ttp://t.tb.cn/2A5CbHWveOXzI7sFakaCw8

Cloud Toolkit 是阿里云發(fā)布的免費(fèi)本地 IDE 插件,幫助開發(fā)者更高效地開發(fā)、測試、診斷并部署應(yīng)用。通過插件,可以將本地應(yīng)用一鍵部署到任意服務(wù)器,甚至云端(ECS、EDAS、ACK、ACR 和小程序云等);并且還內(nèi)置了 Arthas 診斷、Dubbo工具、Terminal 終端、文件上傳、函數(shù)計(jì)算 和 MySQL 執(zhí)行器等工具。不僅僅有 IntelliJ IDEA 主流版本,還有 Eclipse、Pycharm、Maven 等其他版本。

  • 方式二:直接下載

地址:

https://github.com/alibaba/arthas

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的性能测试如何定位瓶颈?偶发超时?看高手如何快速排查问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 四虎成人av| 中文字幕2区 | 国模无码视频一区 | 天天综合91 | 麻豆视频国产 | 色综合自拍 | 国产男女无遮挡猛进猛出 | 97超碰站| 欧美伦乱| 日韩一级免费毛片 | 永久国产| 亚洲国产成人va在线观看天堂 | 人人草网站| 中文字幕人妻一区二区 | 中文字幕第一页在线 | 青青在线免费观看 | 国产伦精品一区二区三区视频痴汉 | 一级黄色片在线播放 | 337p亚洲精品色噜噜狠狠 | 国产成人精品在线观看 | 亚洲AV无码成人精品区东京热 | 99久久精品一区二区 | 午夜看片在线观看 | 97香蕉超级碰碰久久免费软件 | 日本美女毛茸茸 | 成人精品区 | 国产a视频 | 靠逼在线观看 | 美女性生活视频 | 人妖天堂狠狠ts人妖天堂狠狠 | 欧美日韩在线综合 | 久操超碰 | 精品久久精品久久 | 亚洲人天堂 | 寡妇av | 亚洲狼人社区 | 福利国产在线 | 亚洲一级av无码毛片精品 | 成人国产一区二区三区精品麻豆 | 全黄一级男人和女人 | 黄色1级视频 | 欧美一级大片 | 先锋影音色 | 国产精彩视频 | 日本不卡高字幕在线2019 | 欧美亚洲大片 | 国产高清在线免费观看 | 第一色影院 | 国产精品日日摸天天碰 | 日韩精品在线观看中文字幕 | 操小妹影院 | 亚洲天堂中文 | 小泽玛利亚一区二区三区在线观看 | 国产视频三区 | 天天操夜夜添 | 91 高清 在线 制服 偷拍 | 国产激情无套内精对白视频 | 国产精品99久久久久久一二区 | 国产婷婷一区二区三区 | 免费超爽大片黄 | 视频在线观看免费大片 | 高清av一区 | www.成人在线 | 99国产精品一区二区三区 | 亚洲资源在线播放 | 久久久久久香蕉 | 777片理伦片在线观看 | 日本一区二区三区免费视频 | 26uuu欧美日本 | 欧美另类综合 | 男人天堂伊人 | 免费av免费看 | 久久久久人妻一道无码AV | 神马久久久久久久久久 | 天堂在线中文字幕 | 色xxxxx| 99ri视频 | 免费人成年激情视频在线观看 | 性感美女一级片 | 亚洲精品乱码久久 | а√天堂资源在线 | 香蕉a视频| 午夜视频大全 | 一区二区三区四区视频 | 九九在线观看视频 | www.av网 | 男人猛进女人爽的大叫 | 欧美一级片在线播放 | 毛片啪啪啪 | 主播福利在线 | 丰满人妻一区二区三区53号 | 国产一区二区久久久 | 在线播放你懂得 | 国产色网站 | 久久久久久国产精品日本 | 99国产精品久久久久久久成人 | 国产一区二区黄色 | 欧美三级大片 | 性少妇xxxxx|