阿里巴巴開(kāi)源性能監(jiān)控神器Arthas初體驗(yàn)

如果問(wèn)性能測(cè)試中最難的是哪部分,相信很多人會(huì)說(shuō)“性能調(diào)優(yōu)”。確實(shí)是這樣,性能調(diào)優(yōu)是一個(gè)非常復(fù)雜、技術(shù)含量很高的工作。涉及到的知識(shí)面很廣。以我多年從業(yè)經(jīng)驗(yàn)來(lái)看,在企業(yè)里,大多數(shù)的性能調(diào)優(yōu)都是由開(kāi)發(fā)架構(gòu)師來(lái)完成,涉及到數(shù)據(jù)庫(kù)的,可能需要DBA的介入。


而性能測(cè)試工程師在實(shí)際工作中,主要的職責(zé)是發(fā)現(xiàn)問(wèn)題和定位問(wèn)題,確定性能問(wèn)題出現(xiàn)在哪部分,需要定位到具體函數(shù)、類、SQL,某些參數(shù)配置、某些硬件限制等。如果能做到這一點(diǎn),那就是一個(gè)很稱職的性能測(cè)試工程師了。


那么如何去定位問(wèn)題呢?不能靠猜測(cè)和想象,這個(gè)時(shí)候需要借助一些專業(yè)的工具來(lái)協(xié)助,以JAVA語(yǔ)言來(lái)說(shuō),如jdk自帶的jvisualvm等免費(fèi)工具,以及商業(yè)化工具Jprofiler。

jvisualvm界面

Jprofiler

這兩款工具在業(yè)界知名度也比較高,他們的優(yōu)點(diǎn)是可以圖形界面上看到各維度的性能數(shù)據(jù),使用者根據(jù)這些數(shù)據(jù)進(jìn)行綜合分析,然后判斷哪里出現(xiàn)了性能問(wèn)題。

但是這兩款工具也有個(gè)缺點(diǎn),都必須在服務(wù)端項(xiàng)目進(jìn)程中配置相關(guān)的監(jiān)控參數(shù)。然后工具通過(guò)遠(yuǎn)程連接到項(xiàng)目進(jìn)程,獲取相關(guān)的數(shù)據(jù)。這樣就會(huì)帶來(lái)一些不便,比如線上環(huán)境的網(wǎng)絡(luò)是隔離的,本地的監(jiān)控工具根本連不上線上環(huán)境。并且類似于jprofiler這樣的商業(yè)工具,是需要付費(fèi)的(可以破解,但是希望大家支持正版)

那么有沒(méi)有一款工具不需要遠(yuǎn)程連接,也不需要配置監(jiān)控參數(shù),同時(shí)也提供了豐富的性能監(jiān)控?cái)?shù)據(jù)呢

今天跟大家介紹一款阿里巴巴開(kāi)源的性能分析神器Arthas(阿爾薩斯)

官方網(wǎng)站:

https://alibaba.github.io/arthas/index.html

Arthas能為你做什么事情呢?我們先來(lái)看一下官網(wǎng)的介紹。

當(dāng)你遇到以下類似問(wèn)題而束手無(wú)策時(shí),Arthas可以幫助你解決:

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

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

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

線上遇到某個(gè)用戶的數(shù)據(jù)處理有問(wèn)題,但線上同樣無(wú)法 debug,線下無(wú)法重現(xiàn)!

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

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

Arthas支持JDK 6+,支持Linux/Mac/Winodws,采用命令行交互模式,同時(shí)提供豐富的 Tab 自動(dòng)補(bǔ)全功能,進(jìn)一步方便進(jìn)行問(wèn)題的定位和診斷。

接下來(lái),我們找個(gè)項(xiàng)目實(shí)際體驗(yàn)一下Arthas。

一、Linux上啟動(dòng)被監(jiān)控的項(xiàng)目

先來(lái)看下Linux服務(wù)端部署的項(xiàng)目,一個(gè)JavaWeb項(xiàng)目,基于tomcat部署,服務(wù)端tomcat啟動(dòng)后,通過(guò)瀏覽器訪問(wèn)項(xiàng)目首頁(yè),驗(yàn)證項(xiàng)目是否可以正常訪問(wèn)。

二、下載arthas工具

可以直接在Linux上通過(guò)命令下載

wget?https://alibaba.github.io/arthas/arthas-boot.jar

也可以在瀏覽器直接訪問(wèn)https://alibaba.github.io/arthas/arthas-boot.jar,等待下載成功后,上傳到Linux服務(wù)器上。


三、啟動(dòng)arthas工具(需要配置好jdk)

執(zhí)行命令:?java -jar arthas-boot.jar?

執(zhí)行成功后,arthas提供了一種命令行方式的交互方式,arthas會(huì)檢測(cè)當(dāng)前服務(wù)器上的Java進(jìn)程,并將進(jìn)程列表展示出來(lái),用戶輸入對(duì)應(yīng)的編號(hào)(1、2、3、4…)進(jìn)行選擇,然后回車(見(jiàn)紅色框,進(jìn)程[1]就是tomcat進(jìn)程)。

第一次使用arthas需要自動(dòng)下載一些依賴包,等待下載完成,就會(huì)進(jìn)入到arthas提供的命令行界面。

四、常用的一些監(jiān)控?cái)?shù)據(jù)

1、整體dashboard數(shù)據(jù)

在arthas的命令行界面,輸入dashboard,會(huì)實(shí)時(shí)展示當(dāng)前tomcat的多線程狀態(tài)、Jvm各區(qū)域、GC情況等信息

2、查看線程監(jiān)控

常用參數(shù)

輸入thread會(huì)顯示所有線程的狀態(tài)信息

輸入thread -n 3會(huì)顯示當(dāng)前最忙的3個(gè)線程,可以用來(lái)排查線程CPU消耗

輸入thread -b 會(huì)顯示當(dāng)前處于BLOCKED狀態(tài)的線程,可以排查線程鎖的問(wèn)題


3、jvm監(jiān)控

輸入jvm,查看jvm詳細(xì)的性能數(shù)據(jù)


4、函數(shù)耗時(shí)監(jiān)控

通常說(shuō)一個(gè)接口性能不好,其實(shí)就是接口響應(yīng)時(shí)間比較長(zhǎng)造成的,具體代碼中哪個(gè)函數(shù)耗時(shí)比較長(zhǎng)呢?可以使用trace功能來(lái)監(jiān)控一下

trace -jcn.testfan.perf.beihe.pinter.http.CaseController time

解釋:

-j參數(shù)可以過(guò)濾掉jdk自身的函數(shù)

cn.testfan.perf.beihe.pinter.http.CaseController是接口所在的類

time是接口的入口函數(shù)

通過(guò)圈起來(lái)的部分可以看到,接口的入口函數(shù)time總耗時(shí)371ms

其中g(shù)etDataFromDb函數(shù)耗時(shí)200ms

getDataFromRedis函數(shù)耗時(shí)100ms

getDataFromOuter函數(shù)耗時(shí)50ms

process函數(shù)耗時(shí)20ms

很明顯,最慢的函數(shù)已經(jīng)找到了,接下里就要去對(duì)代碼進(jìn)行進(jìn)一步分析,然后再進(jìn)行優(yōu)化。

上述幾個(gè)命令只是性能測(cè)工作中常用的一些操作,Arthas還有很多其他維度的監(jiān)控?cái)?shù)據(jù),大家可以去官網(wǎng)看下用戶手冊(cè)學(xué)習(xí)更多操作。


通過(guò)對(duì)Arthas的初步使用可以看到,Arthas是一個(gè)功能非常強(qiáng)大的性能監(jiān)控工具,而且使用非常方便,不需要做任何的參數(shù)配置,就可以直觀的獲取各種維度的性能數(shù)據(jù)。但是拿到這些原始監(jiān)控?cái)?shù)據(jù)后,你可能會(huì)發(fā)現(xiàn)再?gòu)?qiáng)大的監(jiān)控工具也只能提供一些數(shù)據(jù),具體問(wèn)題還是靠人來(lái)進(jìn)行分析,而這點(diǎn)才是最關(guān)鍵的。

面對(duì)各類監(jiān)控?cái)?shù)據(jù),如何篩選出有效的數(shù)據(jù)進(jìn)行分析?

線程中為什么會(huì)出現(xiàn)大量WAITTING、BLOCKED?

Jvm中各種指標(biāo)都是什么意思,哪些指標(biāo)出現(xiàn)了異常情況?

服務(wù)器負(fù)載居高不下,如何對(duì)代碼進(jìn)行定位排查?

面對(duì)這些問(wèn)題,是不是有一種手足無(wú)措、即將窒息的感覺(jué)?

不要慌,這個(gè)時(shí)候,你就需要來(lái)testfan學(xué)習(xí)一下了!

7月7日,新的一期性能測(cè)試實(shí)戰(zhàn)班即將開(kāi)課,歡迎咨詢!

你想要的,盡在這里

官網(wǎng):http://testfan.cn/list/2/265.htm


作  者:Testfan 北河

出  處:微信公眾號(hào):自動(dòng)化軟件測(cè)試平臺(tái)

版權(quán)說(shuō)明:歡迎轉(zhuǎn)載,但必須注明出處,并在文章頁(yè)面明顯位置給出文章鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容