<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          面試官:線上服務(wù)響應(yīng)時間太長的排查思路講下吧

          共 2605字,需瀏覽 6分鐘

           ·

          2021-04-17 18:50

          前言:

          最近線上環(huán)境某個接口服務(wù)響應(yīng)時間偏長,導(dǎo)致用戶體驗超差,那平時該怎么快速的排查這類問題呢?

          ①、為代碼添加上詳細的打印日志;不建議 ,一是線上環(huán)境,沒法隨便的重新部署更換了詳細日志的代碼,二是 添加詳細的日志輸出,那就意味這會生成大量的日志文件,這些日志文件會占據(jù)大量服務(wù)器磁盤空間。

          ②、搭建一個模擬了線上環(huán)境的測試環(huán)境進行復(fù)盤排查;額,出現(xiàn)了這種問題哪有那么多的時間讓你進行環(huán)境復(fù)盤排查,所以此方案也是 不建議的 。

          ③、線上診斷神器 Arthas ,這個工具是阿里開源的,專門用于線上環(huán)境問題排查的,這個工具提供了很多       的  命令 用來排查問題;當出現(xiàn)上面的響應(yīng)時間偏長的問題,就可以使用 Arthas 提供的  trace  命令進行排查,使用這個工具的 trace 命令可以統(tǒng)計到方法中整個調(diào)用鏈路上的所有性能開銷和追蹤調(diào)用鏈路,查找其中耗時比較長的方法再具體排查即可。

          文章接下來將從兩方面展開:

          ①、搭建模擬線上服務(wù)接口響應(yīng)時間偏長的環(huán)境;SpringBoot 服務(wù)接口 +  JMeter 模擬服務(wù)接口調(diào)用;

          ②、使用診斷神器 Arthas 提供的命令 trace 命令進行響應(yīng)時間偏長的問題排查;

          模擬線上環(huán)境:

          1、SpringBoot 項目搭建,并且編寫好服務(wù)接口;

          注意:服務(wù)接口代碼為了簡便,只寫了 一些大循環(huán)的代碼 來模擬較長的耗時;除此之外,實際上還包含很多多其它常見的情況,例如:

          ①、服務(wù)接口方法中存在很多的  JDBC 操作 ,并且由于數(shù)據(jù)庫中數(shù)據(jù)量太大,導(dǎo)致很多的 JDBC 查詢非常耗時,并且此時可能由于還沒有創(chuàng)建合適的索引,導(dǎo)致查詢耗時更加的長,最終導(dǎo)致服務(wù)接口響應(yīng)時間偏長;

          ②、此服務(wù)接口中調(diào)用了 其它的服務(wù)接口 ,由于內(nèi)部調(diào)用的其它服務(wù)接口出現(xiàn)問題等,導(dǎo)致此其它服務(wù)接口執(zhí)行耗時比較長,進而導(dǎo)致服務(wù)接口響應(yīng)時間偏長;

          服務(wù)接口代碼如下:

          test1、test2方法如下:

          2、JMeter 模擬用戶調(diào)用的測試腳本配置:

          3、服務(wù)接口 SpringBoot 代碼 和  JMeter 測試腳本的所在項目位置:

          服務(wù)接口代碼準備好后,使用IDEA開發(fā)工具將其導(dǎo)出為 Jar 包 。

          服務(wù)接口代碼和JMeter腳本獲取地址:https://github.com/leishen6/springboot_arthas

          為了模擬最為真實的線上環(huán)境,需將準備好的 服務(wù)接口 Jar 包放到 服務(wù)器中,然后使用命令  java -jar  *.jar  運行起 Jar 包;然后使用 JMeter  進行接口的調(diào)用,在 聚合報告 中發(fā)現(xiàn)平均響應(yīng)時間偏長;如圖:

          如果有用戶反映某功能響應(yīng)時間太長了,別著急,根據(jù)下面的方法進行排查,絕對方便又快速的找到問題原因。

          Arthas 問題排查:

          1、首先需要下載阿里開源的Arthas 的診斷工具 Jar 包,下載地址:arthas-boot.jar ;然后將 Jar 包放到 部署服務(wù)接口項目的服務(wù)器中

          2、然后使用 ps 命令,查詢出當前運行服務(wù)接口的程序進程號;例如:本文章模擬的服務(wù)接口程序 Jar 包名稱為 springboot_arthas-1.0.0.jar ,所以命令為:ps -ef | grep springboot_arthas-1.0.0  。

          3、然后運行Arthas 診斷工具,命令:java  -jar  arthas-boot.jar ;開始運行的界面如圖:

          此時診斷工具還沒有運行完,需要手動選擇要診斷/監(jiān)控的java 進程,并且此工具也會列出全部的java進程號,你只需要輸入 它們最前的序號  [1]  即可;如圖:

          4、運行完后,可以使用 trace命令 監(jiān)控服務(wù)接口方法中調(diào)用的其它方法的耗時;

          trace 命令能主動搜索 class-patternmethod-pattern 對應(yīng)的方法調(diào)用路徑,渲染和統(tǒng)計整個調(diào)用鏈路上的所有性能開銷和追蹤調(diào)用鏈路。

          具體命令格式:trace  [全限定類名]  [類中的方法名]

          例如:監(jiān)控本服務(wù)接口;

          com.lyl.controller.TestController : 全限定類名,process:TestController 類中的方法;

          具體命令: trace   com.lyl.controller.TestController   process

          5、trace 命令執(zhí)行結(jié)果展示,如圖:

          通過trace命令監(jiān)控統(tǒng)計的調(diào)用鏈路各個方法的執(zhí)行耗時,可以發(fā)現(xiàn)調(diào)用的 com.lyl.util.StringUtil 類中的 test2() 方法執(zhí)行耗時比較大;所以需要特別去查看這個方法的代碼是否存在問題;如果這個代碼中還存在許多的方法調(diào)用鏈路,則需要再次使用 trace 命令進行監(jiān)控調(diào)用鏈路的耗時,找出具體可能存在問題的方法。

          Arthas  阿里開源的診斷工具還提供了很多的命令供使用,大家可以去查看學(xué)習(xí),地址:命令列表  。

          注意:

          ①、使用Arthas 診斷的程序代碼,在打包時 不能混淆 ,否則在使用trace 命令會報  類或方法找不到  ;

          ②、在使用trace命令監(jiān)控統(tǒng)計時,需要JMeter測試腳本正在運行調(diào)用服務(wù)接口,如果沒有調(diào)用,則統(tǒng)計不到內(nèi)部調(diào)用鏈路的耗時情況;

          由于本人水平有限,如有問題,敬請?zhí)岢觯?/p>

          往期資源  需要請自取

          Java項目分享  最新整理全集,找項目不累啦

          臥槽!字節(jié)跳動《算法中文手冊》火了,完整版 PDF 開放下載!

          字節(jié)跳動總結(jié)的設(shè)計模式 PDF 火了,完整版開放下載!

          堪稱神級的Spring Boot手冊,從基礎(chǔ)入門到實戰(zhàn)進階

          臥槽!阿里大佬總結(jié)的《圖解Java》火了,完整版PDF開放下載!

          喜歡就"在看"唄^_^

          瀏覽 101
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天综合网天天综合7799 | 欧美熟妇乱伦 | jzzijzzij亚洲成熟少妇在线播放 | 日韩欧美三级在线观看 | 亚洲天堂一区在线观看 |