您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“如何排查線上服務(wù)響應(yīng)時(shí)間太長(zhǎng)的問(wèn)題”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
最近線上環(huán)境某個(gè)接口服務(wù)響應(yīng)時(shí)間偏長(zhǎng),導(dǎo)致用戶體驗(yàn)感超差;當(dāng)出現(xiàn)這種情況時(shí),我們?cè)撛趺纯焖俚呐挪檫@類(lèi)問(wèn)題呢?
常用的排查思路:
為代碼添加上詳細(xì)的打印日志; 不建議 ,一是線上環(huán)境,沒(méi)法隨便的重新部署更換了詳細(xì)日志的代碼,二是 添加詳細(xì)的日志輸出,那就意味這會(huì)生成大量的日志文件,這些日志文件會(huì)占據(jù)大量服務(wù)器磁盤(pán)空間。
搭建一個(gè)模擬了線上環(huán)境的測(cè)試環(huán)境進(jìn)行復(fù)盤(pán)排查;額,出現(xiàn)了這種問(wèn)題哪有那么多的時(shí)間讓你進(jìn)行環(huán)境復(fù)盤(pán)排查,所以此方案也是 不建議的 。
線上診斷神器 Arthas ,這個(gè)工具是阿里開(kāi)源的,專門(mén)用于線上環(huán)境問(wèn)題排查的,這個(gè)工具提供了很多的 命令 用來(lái)排查問(wèn)題; 當(dāng)出現(xiàn)上面的響應(yīng)時(shí)間偏長(zhǎng)的問(wèn)題,就可以使用 Arthas 提供的 trace 命令進(jìn)行排查,使用這個(gè)工具的 trace 命令可以統(tǒng)計(jì)到方法中整個(gè)調(diào)用鏈路上的所有性能開(kāi)銷(xiāo)和追蹤調(diào)用鏈路,查找其中耗時(shí)比較長(zhǎng)的方法再具體排查即可。
文章接下來(lái)將從兩方面展開(kāi):
①、搭建模擬線上服務(wù)接口響應(yīng)時(shí)間偏長(zhǎng)的環(huán)境;SpringBoot 服務(wù)接口 + JMeter 模擬服務(wù)接口調(diào)用;
②、使用診斷神器 Arthas 提供的命令 trace 命令進(jìn)行響應(yīng)時(shí)間偏長(zhǎng)的問(wèn)題排查;
1、SpringBoot 項(xiàng)目搭建,并且編寫(xiě)好服務(wù)接口;
注意:服務(wù)接口代碼為了簡(jiǎn)便,只寫(xiě)了 一些大循環(huán)的代碼 來(lái)模擬較長(zhǎng)的耗時(shí);除此之外,實(shí)際上還包含很多多其它常見(jiàn)的情況,例如:
服務(wù)接口方法中存在很多的 JDBC 操作 ,并且由于數(shù)據(jù)庫(kù)中數(shù)據(jù)量太大,導(dǎo)致很多的 JDBC 查詢非常耗時(shí),并且此時(shí)可能由于還沒(méi)有創(chuàng)建合適的索引,導(dǎo)致查詢耗時(shí)更加的長(zhǎng),最終導(dǎo)致服務(wù)接口響應(yīng)時(shí)間偏長(zhǎng);
此服務(wù)接口中調(diào)用了 其它的服務(wù)接口 ,由于內(nèi)部調(diào)用的其它服務(wù)接口出現(xiàn)問(wèn)題等,導(dǎo)致此其它服務(wù)接口執(zhí)行耗時(shí)比較長(zhǎng),進(jìn)而導(dǎo)致服務(wù)接口響應(yīng)時(shí)間偏長(zhǎng);
服務(wù)接口代碼如下:
2、JMeter 模擬用戶調(diào)用的測(cè)試腳本配置:
服務(wù)接口代碼準(zhǔn)備好后,使用IDEA開(kāi)發(fā)工具將其導(dǎo)出為 Jar 包 。
服務(wù)接口代碼和JMeter腳本獲取地址:模擬Demo源碼地址
為了模擬最為真實(shí)的線上環(huán)境,需將準(zhǔn)備好的 服務(wù)接口Jar包 放到 Linux 服務(wù)器中,然后使用命令 java -jar .jar 運(yùn)行起 Jar 包;
最后使用 JMeter 進(jìn)行接口的調(diào)用,在 聚合報(bào)告 中發(fā)現(xiàn)平均響應(yīng)時(shí)間偏長(zhǎng);如圖:
按照下面的步驟來(lái),你一定會(huì)成功快速的排查出問(wèn)題原因的;
1、 首先需要下載阿里開(kāi)源的Arthas 的診斷工具 Jar 包,下載地址:arthas-boot.jar ;然后將 Jar 包放到 部署服務(wù)接口項(xiàng)目的服務(wù)器中 。
2、 然后使用 ps 命令,查詢出當(dāng)前運(yùn)行服務(wù)接口的程序進(jìn)程號(hào);例如:本文章模擬的服務(wù)接口程序 Jar 包名稱為 springboot_arthas-1.0.0.jar ,所以命令為: ps -ef | grep springboot_arthas-1.0.0 。
3、 然后運(yùn)行Arthas 診斷工具,命令:java -jar arthas-boot.jar ;開(kāi)始運(yùn)行的界面如圖:
4、 運(yùn)行完后,就可以使用 trace命令 統(tǒng)計(jì)服務(wù)接口方法調(diào)用鏈路上的全部節(jié)點(diǎn)的耗時(shí);
trace
命令能主動(dòng)搜索class-pattern
/method-pattern
對(duì)應(yīng)的方法調(diào)用路徑,渲染和統(tǒng)計(jì)整個(gè)調(diào)用鏈路上的所有性能開(kāi)銷(xiāo)和追蹤調(diào)用鏈路。具體命令格式: trace [全限定類(lèi)名] [類(lèi)中的方法名]
例如:統(tǒng)計(jì)的本服務(wù)接口:
com.lyl.controller.TestController : 全限定類(lèi)名
process:TestController 類(lèi)中的方法;
具體命令: trace com.lyl.controller.TestController process
5、 trace 命令執(zhí)行結(jié)果展示,如圖:
通過(guò)trace 命令監(jiān)控統(tǒng)計(jì)的調(diào)用鏈路各個(gè)方法的執(zhí)行耗時(shí),可以發(fā)現(xiàn)調(diào)用的 com.lyl.util.StringUtil 類(lèi)中的 test2() 方法執(zhí)行耗時(shí)比較大;
所以需要特別去查看這個(gè)方法的代碼是否存在問(wèn)題;
如果這個(gè)代碼中還存在許多的方法調(diào)用鏈路,則需要再次使用 trace 命令進(jìn)行監(jiān)控調(diào)用鏈路的耗時(shí),找出具體可能存在問(wèn)題的方法。
Arthas 阿里開(kāi)源的診斷工具還提供了很多的命令供使用,大家可以自行去查看學(xué)習(xí),地址:命令列表 。
注意:
①、使用Arthas 診斷的程序代碼,在打包時(shí) 不能混淆 ,否則在使用trace 命令會(huì)報(bào) 類(lèi)或方法找不到 ;
②、在使用trace命令監(jiān)控統(tǒng)計(jì)時(shí),需要JMeter測(cè)試腳本正在運(yùn)行調(diào)用服務(wù)接口,如果服務(wù)接口沒(méi)有正在調(diào)用中,則統(tǒng)計(jì)不到內(nèi)部調(diào)用鏈路的耗時(shí)情況;
“如何排查線上服務(wù)響應(yīng)時(shí)間太長(zhǎng)的問(wèn)題”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。