java中arthas如何使用,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)憑借專業(yè)的設(shè)計(jì)團(tuán)隊(duì)扎實(shí)的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識(shí)和豐厚的資源優(yōu)勢(shì),提供專業(yè)的網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、網(wǎng)站優(yōu)化、軟件開(kāi)發(fā)、網(wǎng)站改版等服務(wù),在成都十載的網(wǎng)站建設(shè)設(shè)計(jì)經(jīng)驗(yàn),為成都上千余家中小型企業(yè)策劃設(shè)計(jì)了網(wǎng)站。
下載Arthas
wget https://alibaba.github.io/arthas/arthas-boot.jar
把下載好的arthas-boot.jar
包放到想要監(jiān)測(cè)的java應(yīng)用所在服務(wù)器,跟Spring Boot
應(yīng)用一樣,直接使用java命令運(yùn)行即可。
java -jar arthas-boot.jar
注意:
第一次運(yùn)行,下載慢可以使用--repo-mirror aliyun --use-http
啟動(dòng)后,會(huì)列出當(dāng)前的java應(yīng)用列表(有點(diǎn)像jps -l
),輸出序號(hào)選擇想要監(jiān)測(cè)的應(yīng)用即可。
啟動(dòng)后即進(jìn)行Arthas
的命令行界面,可以使用Arthas
提供的命令來(lái)實(shí)現(xiàn)需要監(jiān)測(cè)的功能。如下圖,需要監(jiān)測(cè)的java應(yīng)用是示例java-monitor-example
。
如果只是退出當(dāng)前的連接,可以用quit
或者exit
命令。Attach到目標(biāo)進(jìn)程上的arthas還會(huì)繼續(xù)運(yùn)行,端口會(huì)保持開(kāi)放,下次連接時(shí)可以直接連接上。
如果想完全退出arthas,可以執(zhí)行shutdown
命令。
Arthas
的使用就是需要學(xué)會(huì)使用它提供的命令功能,主要分為幾大類:
基本命令:help
、cat
、pwd
、history
,quit
等等,跟linux的命令差不多。
jvm相關(guān):dashboard
、thread
、jvm
、sysenv
等等,主要是對(duì)JVM信息的監(jiān)測(cè),跟之前學(xué)習(xí)java命令行工具jinfo
、jmap
、jstack
等有異曲同工之妙。
class/classloader相關(guān):sc
、sm
、jad
、dump
、classloader
等等。
monitor/watch/trace相關(guān):monitor
、watch
、trace
、stack
等等,這些功能基本涵蓋了BTrace
中所實(shí)現(xiàn)的功能,包括定時(shí)檢測(cè),方法參數(shù),返回值,調(diào)用時(shí)長(zhǎng)等。
下面對(duì)常用的幾個(gè)命令進(jìn)行說(shuō)明,詳細(xì)的命令列表請(qǐng)查閱官方文檔。
dashboard
啟動(dòng)Arthas
后,-h
查看使用幫助:
$ dashboard -h USAGE: dashboard [-b] [-h] [-i] [-n ] SUMMARY: Overview of target jvm's thread, memory, gc, vm, tomcat info. EXAMPLES: dashboard dashboard -n 10 dashboard -i 2000
相當(dāng)于概覽,在一個(gè)界面中顯示線程、內(nèi)存、gc情況,vm情況和tomcat信息。如下圖(官方文檔的示例圖):
這個(gè)概覽的信息默認(rèn)5秒刷新一次,對(duì)于內(nèi)存變化,線程占用情況,GC次數(shù),一目了然。使用ctrl+c
退出。
thread
還記得jstack
嗎,我們需要先找出線程ID,使用它導(dǎo)出線程堆棧,然后使用線程ID查看。在Arthas
中就方便多了,像上面dashboard
中,已經(jīng)有ID,直接使用thread id
即可。-h
查看幫助文檔:
$ thread -h USAGE: thread [-h] [-b] [-i] [-n ] [id] SUMMARY: Display thread info, thread stack EXAMPLES: thread thread 51 thread -n -1 thread -n 5 thread -b thread -i 2000 OPTIONS: -h, --help this help -b, --include-blocking-thread Find the thread who is holding a lock that blocks the most number of threads. -i, --sample-interval Specify the sampling interval (in ms) when calculating cpu usage. -n, --top-n-threads The number of thread(s) to show, ordered by cpu utilization, -1 to show all. Show thread stack
如上面所示的EXAMPLES
,使用thread
命令,可以找出占用CPU最高前N個(gè)線程(-n
),可以打印指定線程的運(yùn)行堆棧(id
),找出當(dāng)前阻塞其他線程的線程(-b
),由此來(lái)分析線程問(wèn)題很方便。
jvm
jvm
命令很簡(jiǎn)單,沒(méi)有參數(shù),它輸出的信息包括運(yùn)行參數(shù),類加載信息, 內(nèi)存情況,系統(tǒng)信息,線程數(shù)信息,文件描述符等。有點(diǎn)像jvisualvm
的中概述
,但比它更詳細(xì)。
jad
有時(shí)需要檢測(cè)線上運(yùn)行的應(yīng)用中,新的代碼是否有使用或者是否有更新到,可以把加載的類反編譯出來(lái),查看源碼是否為最新的,這時(shí)jad
就很有用。-h
打印使用幫助:
$ jad -h USAGE: jad [-c] [-h] [-E] [--source-only] class-pattern [method-name] EXAMPLES: jad java.lang.String jad java.lang.String toString jad --source-only java.lang.String jad -c 39eb305e org/apache/log4j/Logger jad -c 39eb305e -E org\\.apache\\.*\\.StringUtils OPTIONS: -c, --code The hash code of the special class's classLoader -h, --help this help -E, --regex Enable regular expression to match (wildcard matching by default) --source-only Output source code only Class name pattern, use either '.' or '/' as separator method name pattern, decompile a specific method instead of the whole class
如上面所示的EXAMPLES
,jad可以反編譯類(class-pattern
),反編譯類的某個(gè)方法(method-name
),如果有多個(gè)classLoader
,還可以使用-c
來(lái)選擇顯示哪個(gè)等。
monitor
monitor
可以定時(shí)輸出方法的執(zhí)行情況進(jìn)行監(jiān)控,包括調(diào)用次數(shù),成功次數(shù),失敗次數(shù),平均時(shí)長(zhǎng),失敗率等,有點(diǎn)像BTrace
中的@Timer
,但是更方便。-h
查看使用幫助:
$ monitor -h USAGE: monitor [-c] [-h] [-n ] [-E] class-pattern method-pattern SUMMARY: Monitor method execution statistics, e.g. total/success/failure count, average rt, fail rate, etc. Examples: monitor org.apache.commons.lang.StringUtils isBlank monitor org.apache.commons.lang.StringUtils isBlank -c 5 monitor -E org\.apache\.commons\.lang\.StringUtils isBlank OPTIONS: -c, --cycle The monitor interval (in seconds), 60 seconds by default -h, --help this help -n, --limits Threshold of execution times -E, --regex Enable regular expression to match (wildcard matching by default) Path and classname of Pattern Matching Method of Pattern Matching
如上面所示的EXAMPLES
,可以監(jiān)測(cè)方法執(zhí)行情況,默認(rèn)是60s輸出一次,可以使用-c
來(lái)修改輸出間隔時(shí)間。
watch
類似于BTrace
的@OnMethod
,若想在線上的應(yīng)用中把執(zhí)行方法時(shí)的參數(shù),返回值,異常信息,watch
命令就非常合適。-h
使用幫助:
$ watch -h USAGE: watch [-b] [-e] [-x] [-f] [-h] [-n ] [-E] [-M ] [-s] class-pattern method-pattern express [condition-express] SUMMARY: Display the input/output parameter, return object, and thrown exception of specified method invocation The express may be one of the following expression (evaluated dynamically): target : the object clazz : the object's class method : the constructor or method params : the parameters array of method params[0..n] : the element of parameters array returnObj : the returned object of method throwExp : the throw exception of method isReturn : the method ended by return isThrow : the method ended by throwing exception #cost : the execution time in ms of method invocation Examples: watch -b org.apache.commons.lang.StringUtils isBlank params watch -f org.apache.commons.lang.StringUtils isBlank returnObj watch org.apache.commons.lang.StringUtils isBlank '{params, target, returnObj}' -x 2 watch -bf *StringUtils isBlank params watch *StringUtils isBlank params[0] watch *StringUtils isBlank params[0] params[0].length==1 watch *StringUtils isBlank params '#cost>100' watch -E -b org\.apache\.commons\.lang\.StringUtils isBlank params[0] OPTIONS: -b, --before Watch before invocation -e, --exception Watch after throw exception -x, --expand Expand level of object (1 by default) -f, --finish Watch after invocation, enable by default -h, --help this help -n, --limits Threshold of execution times -E, --regex Enable regular expression to match (wildcard matching by default) -M, --sizeLimit Upper size limit in bytes for the result (10 * 1024 * 1024 by default) -s, --success Watch after successful invocation The full qualified class name you want to watch The method name you want to watch the content you want to watch, written by ognl. Examples: params params[0] 'params[0]+params[1]' '{params[0], target, returnObj}' returnObj throwExp target clazz method
如上面所示的EXAMPLES
,監(jiān)測(cè)時(shí)機(jī)分別是方法執(zhí)行前(-b
),方法執(zhí)行結(jié)束(-f
,默認(rèn)值),方法執(zhí)行成功(-s
)。監(jiān)測(cè)內(nèi)容包括:參數(shù)(params
),返回值(returnObj
),異常(throwExp
)等。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。