如果問性能測試中最難的是哪部分,相信很多人會說“性能調優”。確實是這樣,性能調優是一個非常復雜、技術含量很高的工作。涉及到的知識面很廣。以我多年從業經驗來看,在企業里,大多數的性能調優都是由開發架構師來完成,涉及到數據庫的,可能需要DBA的介入。
而性能測試工程師在實際工作中,主要的職責是發現問題和定位問題,確定性能問題出現在哪部分,需要定位到具體函數、類、SQL,某些參數配置、某些硬件限制等。如果能做到這一點,那就是一個很稱職的性能測試工程師了。
那么如何去定位問題呢?不能靠猜測和想象,這個時候需要借助一些專業的工具來協助,以JAVA語言來說,如jdk自帶的jvisualvm等免費工具,以及商業化工具Jprofiler。
這兩款工具在業界知名度也比較高,他們的優點是可以圖形界面上看到各維度的性能數據,使用者根據這些數據進行綜合分析,然后判斷哪里出現了性能問題。
但是這兩款工具也有個缺點,都必須在服務端項目進程中配置相關的監控參數。然后工具通過遠程連接到項目進程,獲取相關的數據。這樣就會帶來一些不便,比如線上環境的網絡是隔離的,本地的監控工具根本連不上線上環境。並且類似於jprofiler這樣的商業工具,是需要付費的(可以破解,但是希望大家支持正版)
那么有沒有一款工具不需要遠程連接,也不需要配置監控參數,同時也提供了豐富的性能監控數據呢?
今天跟大家介紹一款阿里巴巴開源的性能分析神器Arthas(阿爾薩斯)
官方網站:
https://alibaba.github.io/arthas/index.html
Arthas能為你做什么事情呢?我們先來看一下官網的介紹。
接下來,我們找個項目實際體驗一下Arthas。
一、Linux上啟動被監控的項目
先來看下Linux服務端部署的項目,一個JavaWeb項目,基於tomcat部署,服務端tomcat啟動后,通過瀏覽器訪問項目首頁,驗證項目是否可以正常訪問。
二、下載arthas工具
可以直接在Linux上通過命令下載
wget https://alibaba.github.io/arthas/arthas-boot.jar
也可以在瀏覽器直接訪問https://alibaba.github.io/arthas/arthas-boot.jar,等待下載成功后,上傳到Linux服務器上。
三、啟動arthas工具(需要配置好jdk)
執行命令: java -jar arthas-boot.jar
執行成功后,arthas提供了一種命令行方式的交互方式,arthas會檢測當前服務器上的Java進程,並將進程列表展示出來,用戶輸入對應的編號(1、2、3、4…)進行選擇,然后回車(見紅色框,進程[1]就是tomcat進程)。
第一次使用arthas需要自動下載一些依賴包,等待下載完成,就會進入到arthas提供的命令行界面。
四、常用的一些監控數據
1、整體dashboard數據
在arthas的命令行界面,輸入dashboard,會實時展示當前tomcat的多線程狀態、Jvm各區域、GC情況等信息
2、查看線程監控
常用參數
輸入thread會顯示所有線程的狀態信息
輸入thread -n 3會顯示當前最忙的3個線程,可以用來排查線程CPU消耗
輸入thread -b 會顯示當前處於BLOCKED狀態的線程,可以排查線程鎖的問題
3、jvm監控
輸入jvm,查看jvm詳細的性能數據
4、函數耗時監控
通常說一個接口性能不好,其實就是接口響應時間比較長造成的,具體代碼中哪個函數耗時比較長呢?可以使用trace功能來監控一下
trace -jcn.testfan.perf.beihe.pinter.http.CaseController time
解釋:
-j參數可以過濾掉jdk自身的函數
cn.testfan.perf.beihe.pinter.http.CaseController是接口所在的類
time是接口的入口函數
通過圈起來的部分可以看到,接口的入口函數time總耗時371ms
其中getDataFromDb函數耗時200ms
getDataFromRedis函數耗時100ms
getDataFromOuter函數耗時50ms
process函數耗時20ms
很明顯,最慢的函數已經找到了,接下里就要去對代碼進行進一步分析,然后再進行優化。
﹏﹏﹏﹏
上述幾個命令只是性能測工作中常用的一些操作,Arthas還有很多其他維度的監控數據,大家可以去官網看下用戶手冊學習更多操作。
通過對Arthas的初步使用可以看到,Arthas是一個功能非常強大的性能監控工具,而且使用非常方便,不需要做任何的參數配置,就可以直觀的獲取各種維度的性能數據。但是拿到這些原始監控數據后,你可能會發現再強大的監控工具也只能提供一些數據,具體問題還是靠人來進行分析,而這點才是最關鍵的。
面對各類監控數據,如何篩選出有效的數據進行分析?
線程中為什么會出現大量WAITTING、BLOCKED?
Jvm中各種指標都是什么意思,哪些指標出現了異常情況?
服務器負載居高不下,如何對代碼進行定位排查?
面對這些問題,是不是有一種手足無措、即將窒息的感覺?
不要慌,這個時候,你就需要來testfan學習一下了!
你想要的,盡在這里
官網:http://testfan.cn/list/2/265.htm
作 者:Testfan 北河
出 處:微信公眾號:自動化軟件測試平台
版權說明:歡迎轉載,但必須注明出處,並在文章頁面明顯位置給出文章鏈接