您好,登錄后才能下訂單哦!
java中arthas如何使用,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
下載Arthas
wget https://alibaba.github.io/arthas/arthas-boot.jar
把下載好的arthas-boot.jar
包放到想要監測的java應用所在服務器,跟Spring Boot
應用一樣,直接使用java命令運行即可。
java -jar arthas-boot.jar
注意:
第一次運行,下載慢可以使用--repo-mirror aliyun --use-http
啟動后,會列出當前的java應用列表(有點像jps -l
),輸出序號選擇想要監測的應用即可。
啟動后即進行Arthas
的命令行界面,可以使用Arthas
提供的命令來實現需要監測的功能。如下圖,需要監測的java應用是示例java-monitor-example
。
如果只是退出當前的連接,可以用quit
或者exit
命令。Attach到目標進程上的arthas還會繼續運行,端口會保持開放,下次連接時可以直接連接上。
如果想完全退出arthas,可以執行shutdown
命令。
Arthas
的使用就是需要學會使用它提供的命令功能,主要分為幾大類:
基本命令:help
、cat
、pwd
、history
,quit
等等,跟linux的命令差不多。
jvm相關:dashboard
、thread
、jvm
、sysenv
等等,主要是對JVM信息的監測,跟之前學習java命令行工具jinfo
、jmap
、jstack
等有異曲同工之妙。
class/classloader相關:sc
、sm
、jad
、dump
、classloader
等等。
monitor/watch/trace相關:monitor
、watch
、trace
、stack
等等,這些功能基本涵蓋了BTrace
中所實現的功能,包括定時檢測,方法參數,返回值,調用時長等。
下面對常用的幾個命令進行說明,詳細的命令列表請查閱官方文檔。
dashboard
啟動Arthas
后,-h
查看使用幫助:
$ dashboard -h USAGE: dashboard [-b] [-h] [-i <value>] [-n <value>] SUMMARY: Overview of target jvm's thread, memory, gc, vm, tomcat info. EXAMPLES: dashboard dashboard -n 10 dashboard -i 2000
相當于概覽,在一個界面中顯示線程、內存、gc情況,vm情況和tomcat信息。如下圖(官方文檔的示例圖):
這個概覽的信息默認5秒刷新一次,對于內存變化,線程占用情況,GC次數,一目了然。使用ctrl+c
退出。
thread
還記得jstack
嗎,我們需要先找出線程ID,使用它導出線程堆棧,然后使用線程ID查看。在Arthas
中就方便多了,像上面dashboard
中,已經有ID,直接使用thread id
即可。-h
查看幫助文檔:
$ thread -h USAGE: thread [-h] [-b] [-i <value>] [-n <value>] [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 <value> Specify the sampling interval (in ms) when calculating cpu usage. -n, --top-n-threads <value> The number of thread(s) to show, ordered by cpu utilization, -1 to show all. <id> Show thread stack
如上面所示的EXAMPLES
,使用thread
命令,可以找出占用CPU最高前N個線程(-n
),可以打印指定線程的運行堆棧(id
),找出當前阻塞其他線程的線程(-b
),由此來分析線程問題很方便。
jvm
jvm
命令很簡單,沒有參數,它輸出的信息包括運行參數,類加載信息, 內存情況,系統信息,線程數信息,文件描述符等。有點像jvisualvm
的中概述
,但比它更詳細。
jad
有時需要檢測線上運行的應用中,新的代碼是否有使用或者是否有更新到,可以把加載的類反編譯出來,查看源碼是否為最新的,這時jad
就很有用。-h
打印使用幫助:
$ jad -h USAGE: jad [-c <value>] [-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 <value> 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-pattern> Class name pattern, use either '.' or '/' as separator <method-name> method name pattern, decompile a specific method instead of the whole class
如上面所示的EXAMPLES
,jad可以反編譯類(class-pattern
),反編譯類的某個方法(method-name
),如果有多個classLoader
,還可以使用-c
來選擇顯示哪個等。
monitor
monitor
可以定時輸出方法的執行情況進行監控,包括調用次數,成功次數,失敗次數,平均時長,失敗率等,有點像BTrace
中的@Timer
,但是更方便。-h
查看使用幫助:
$ monitor -h USAGE: monitor [-c <value>] [-h] [-n <value>] [-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 <value> The monitor interval (in seconds), 60 seconds by default -h, --help this help -n, --limits <value> Threshold of execution times -E, --regex Enable regular expression to match (wildcard matching by default) <class-pattern> Path and classname of Pattern Matching <method-pattern> Method of Pattern Matching
如上面所示的EXAMPLES
,可以監測方法執行情況,默認是60s輸出一次,可以使用-c
來修改輸出間隔時間。
watch
類似于BTrace
的@OnMethod
,若想在線上的應用中把執行方法時的參數,返回值,異常信息,watch
命令就非常合適。-h
使用幫助:
$ watch -h USAGE: watch [-b] [-e] [-x <value>] [-f] [-h] [-n <value>] [-E] [-M <value>] [-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 <value> Expand level of object (1 by default) -f, --finish Watch after invocation, enable by default -h, --help this help -n, --limits <value> Threshold of execution times -E, --regex Enable regular expression to match (wildcard matching by default) -M, --sizeLimit <value> Upper size limit in bytes for the result (10 * 1024 * 1024 by default) -s, --success Watch after successful invocation <class-pattern> The full qualified class name you want to watch <method-pattern> The method name you want to watch <express> 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
,監測時機分別是方法執行前(-b
),方法執行結束(-f
,默認值),方法執行成功(-s
)。監測內容包括:參數(params
),返回值(returnObj
),異常(throwExp
)等。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。