<pre id="ff7yo"></pre>

      <form id="ff7yo"><legend id="ff7yo"></legend></form>
        <nav id="ff7yo"><listing id="ff7yo"></listing></nav><nav id="ff7yo"></nav>

        <nav id="ff7yo"><listing id="ff7yo"></listing></nav>
        <small id="ff7yo"></small><nav id="ff7yo"><dd id="ff7yo"></dd></nav>
      1. <nav id="ff7yo"></nav>
          <form id="ff7yo"></form><nav id="ff7yo"></nav>
          <nav id="ff7yo"></nav>
          <sub id="ff7yo"></sub>
          更多課程 選擇中心

          軟件測試培訓
          達內IT學院

          400-111-8989

          軟件測試常見性能問題

          • 發布:軟件測試培訓
          • 來源:軟件測試資訊
          • 時間:2020-03-09 16:05

          性能測試大致分以下幾個步驟:

          需求分析

          腳本準備

          測試執行

          結果整理

          問題分析

          今天要說的是最后一個步驟——“問題分析”;

          需求描述

          有一個服務,啟動時會加載一個1G的詞表文件到內存,請求來了之后,會把請求詞去詞表里做模糊匹配,如果匹配到了就向一個后端服務發送一條http請求,拿回數據之后,返回給客戶端的同時,向mysql記錄請求的唯一標識和一個請求次數的標記;

          其中有幾個關鍵函數

          模糊匹配(fuzzyMatching)

          后端請求函數(sendingRequest)

          拼裝請求函數(buildResponse)

          記錄mysql請求次數標記(signNum)

          問題及分析

          第一組:完全隨機請求詞,qps達到1k時,服務器未見異常,cpu、內存、帶寬均未滿,qps無法繼續提升;

          分析:由于此服務后端連接了其它服務,所以在壓測之前,要確認后端服務不會成為瓶頸點,目前的狀態很可能是后端服務限制了被測服務的性能;此時可以檢查后端服務所在機器的各項指標,或者查看本機的連接狀況,一般后端服務無法處理,而被測服務又會一直向后面請求的話,timewait狀態的連接會變得比較多;

          第二組:解決后端服務的問題后,第二組使用平均30個字的請求詞,來打壓,qps到400時,cpu load已滿;

          分析:這種情況明顯是由于fuzzyMatching函數計算效率的問題導致cpu滿載,從而無法提升qps,使響應時間不斷增大,此時可以通過perf+火焰圖來確定整個處理請求過程中響應時間長的函數;此時需要評估壓測數據是否合理,如果線上平均請求詞只有2個的時候,此組測試明顯不合理,此時要開發進行性能優化就是浪費時間的;如果評估測試數據合理,可以再次更換短詞數據進行壓測驗證猜測;

          第三組:解決了上述兩個問題之后,使用完全隨機請求詞,qps到達3k后降低至1k,然后再次提升到3k,如此反復;

          分析:此時關注一下各項指標,排除了以上的問題的話,操作mysql慢的問題可能性大一些,對這種需要高并發的系統來說,直接讀寫mysql不是個聰明的解決方案,一般會用redis做一層緩存,這里說道的另一個問題就是開發設計不合理,導致的性能問題;

          第四組:將后端換做真實的服務來做整體壓測,發現qps最高只能到300,此時檢查各項指標,發現入口帶寬占滿了;

          分析:這次問題比較明顯,后端服務返回內容過大,導致帶寬被占滿,此時依然需要評估需求:1、是否需要后端返回的所有數據內容;2、評估更換萬兆網卡的性價比;3、是否可以通過技術手段優化帶寬占用,比如把一次請求分散到多組服務的多個請求;

          perf+火焰圖定位函數問題

          這里簡單說一下如何使用perf+火焰圖來直觀的定位性能問題:

          perf

          Perf 擁有了眾多的性能分析能力,舉例來說,使用 Perf 可以計算每個時鐘周期內的指令數,稱為 IPC,IPC 偏低表明代碼沒有很好地利用 CPU。Perf 還可以對程序進行函數級別的采樣,從而了解程序的性能瓶頸究竟在哪里等等。Perf 還可以替代 strace,可以添加動態內核 probe 點,還可以做 benchmark 衡量調度器的好壞。

          使用舉例:perf record -e cpu-clock -g -p 11110 -o data/perf.data sleep 30

          -g 選項是告訴perf record額外記錄函數的調用關系

          -e cpu-clock 指perf record監控的指標為cpu周期

          -p 指定需要record的進程pid

          生成火焰圖

          1、第一步

          使用壓力測試工具對程序進行打壓,壓到程序拐點;

          $sudo perf record -e cpu-clock -g -p 11110

          Ctrl+c結束執行后,在當前目錄下會生成采樣數據perf.data.

          2、第二步

          用perf script工具對perf.data進行解析

          perf script -i perf.data &> perf.unfold

          3、第三步

          將perf.unfold中的符號進行折疊:

          ./stackcollapse-perf.pl perf.unfold &> perf.folded

          4、最后生成svg圖:

          ./flamegraph.pl perf.folded > perf.svg

          原生的perf可以直接定位C/C++的程序,通常編譯debug版本的程序能看到更多的信息,java、go等語言可以通過各自定制的工具來生成,原理類似;通過火焰圖可以輕松定位到哪個函數的處理時間最長,從而找到問題所在。

          免責聲明:文章內容來源于網絡,如有侵權,請聯系我們刪除。

          預約申請免費試聽課

          填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

          上一篇:高薪測試技術要掌握哪些
          下一篇:熱修復測試過程注意事項

          學習軟件測試需要了解的數據庫知識?

          熱修復測試過程注意事項

          軟件測試常見性能問題

          高薪測試技術要掌握哪些

          • 掃碼領取資料

            回復關鍵字:視頻資料

            免費領取 達內課程視頻學習資料

          • 視頻學習QQ群

            添加QQ群:1143617948

            免費領取達內課程視頻學習資料

          Copyright ? 2018 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

          選擇城市和中心
          黑龍江省

          吉林省

          河北省

          陜西省

          湖南省

          貴州省

          云南省

          廣西省

          海南省

          神马影院-战旗影院-首播影院-新视觉影院-在线观看中文字幕dvd播放 百度 好搜 搜狗
          <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>