摘要:注意這個(gè)統(tǒng)計(jì)也會(huì)產(chǎn)生一定的開銷這個(gè)接口本身開銷比較大,因此會(huì)看到的線程占用一定的百分比,為了降低統(tǒng)計(jì)自身的開銷帶來的影響,可以把采樣間隔拉長一些,比如毫秒。
Arthas 能為你做什么?
這個(gè)類從哪個(gè) jar 包加載的?為什么會(huì)報(bào)各種類相關(guān)的 Exception?
我改的代碼為什么沒有執(zhí)行到?難道是我沒 commit?分支搞錯(cuò)了?
遇到問題無法在預(yù)發(fā) debug 一下,難道只能通過加日志再重新預(yù)發(fā)布嗎?
線上遇到某個(gè)用戶的數(shù)據(jù)處理有問題,但線上同樣無法 debug,線下無法重現(xiàn),怎么辦?
是否有一個(gè)全局視角來查看系統(tǒng)的運(yùn)行狀況?
有什么辦法可以監(jiān)控到容器和中間件的實(shí)時(shí)運(yùn)行狀態(tài)?
Arthas 是基于 Greys 進(jìn)行二次開發(fā)的全新在線診斷工具,利用Java6的Instrumentation特性,動(dòng)態(tài)增強(qiáng)你所指定的類,獲取你想要到的信息, 采用命令行交互模式,同時(shí)提供豐富的 Tab 自動(dòng)補(bǔ)全功能,讓你在定位、分析診斷問題時(shí)看每一個(gè)操作都看起來是那么的 666
PS:阿里已開源 https://github.com/alibaba/ar...
Arthas安裝及使用下載壓縮包,上傳到需要被診斷的機(jī)器, 解壓縮
安裝: 執(zhí)行 ./install.sh
啟動(dòng): 執(zhí)行 ./as.sh pid
常用命令dashboard
當(dāng)前系統(tǒng)的實(shí)時(shí)數(shù)據(jù)面板
thread
查看當(dāng)前 JVM 的線程堆棧信息
jvm
查看當(dāng)前 JVM 的信息
sc
查看JVM已加載的類信息
sm
查看已加載類的方法信息
jad
反編譯指定已加載類的源碼
classloader
查看classloader的繼承樹,urls,類加載信息,使用classloader去getResource
monitor
方法執(zhí)行監(jiān)控
watch
方法執(zhí)行數(shù)據(jù)觀測
trace
方法內(nèi)部調(diào)用路徑,并輸出方法路徑上的每個(gè)節(jié)點(diǎn)上耗時(shí)
stack
輸出當(dāng)前方法被調(diào)用的調(diào)用路徑
tt
方法執(zhí)行數(shù)據(jù)的時(shí)空隧道,記錄下指定方法每次調(diào)用的入?yún)⒑头祷匦畔ⅲ⒛軐@些不同的時(shí)間下調(diào)用進(jìn)行觀測
reset
重置增強(qiáng)類,將被 Arthas 增強(qiáng)過的類全部還原,Arthas 服務(wù)端關(guān)閉時(shí)會(huì)重置所有增強(qiáng)過的類
quit
退出當(dāng)前 Arthas 客戶端,其他 Arthas 客戶端不受影響
shutdown
關(guān)閉 Arthas 服務(wù)端,所有 Arthas 客戶端全部退出
dashboard參數(shù)解釋
ID: Java級(jí)別的線程ID,注意這個(gè)ID不能跟jstack中的nativeID一一對應(yīng)
NAME: 線程名
GROUP: 線程組名
PRIORITY: 線程優(yōu)先級(jí), 1~10之間的數(shù)字,越大表示優(yōu)先級(jí)越高
STATE: 線程的狀態(tài)
CPU%: 線程消耗的cpu占比,采樣100ms,將所有線程在這100ms內(nèi)的cpu使用量求和,再算出每個(gè)線程的cpu使用占比。
TIME: 線程運(yùn)行總時(shí)間
INTERRUPTE: 線程當(dāng)前的中斷位狀態(tài)
DAEMON: 是否是daemon線程
thread參數(shù)說明
id
線程id
-n
指定最忙的前N個(gè)線程并打印堆棧
b
找出當(dāng)前阻塞其他線程的線程
-i
指定cpu占比統(tǒng)計(jì)的采樣間隔,單位為毫秒
PS: 這里的cpu統(tǒng)計(jì)的是,一段采樣間隔內(nèi),當(dāng)前JVM里各個(gè)線程所占用的cpu時(shí)間占總cpu時(shí)間的百分比。其計(jì)算方法為: 首先進(jìn)行一次采樣,獲得所有線程的cpu的使用時(shí)間(調(diào)用的是java.lang.management.ThreadMXBean#getThreadCpuTime這個(gè)接口),然后睡眠一段時(shí)間,默認(rèn)100ms,可以通過-i參數(shù)指定,然后再采樣一次,最后得出這段時(shí)間內(nèi)各個(gè)線程消耗的cpu時(shí)間情況,最后算出百分比。注意: 這個(gè)統(tǒng)計(jì)也會(huì)產(chǎn)生一定的開銷(JDK這個(gè)接口本身開銷比較大),因此會(huì)看到as的線程占用一定的百分比,為了降低統(tǒng)計(jì)自身的開銷帶來的影響,可以把采樣間隔拉長一些,比如5000毫秒。
sc參數(shù)說明
class-pattern
類名表達(dá)式匹配
-d
輸出當(dāng)前類的詳細(xì)信息,包括這個(gè)類所加載的原始文件來源、類的聲明、加載的ClassLoader等詳細(xì)信息。如果一個(gè)類被多個(gè)ClassLoader所加載,則會(huì)出現(xiàn)多次
-E
開啟正則表達(dá)式匹配,默認(rèn)為通配符匹配
-f
輸出當(dāng)前類的成員變量信息(需要配合參數(shù)-d一起使用)
-x
指定輸出靜態(tài)變量時(shí)屬性的遍歷深度,默認(rèn)為 0,即直接使用 toString 輸出
PS: class-pattern支持全限定名,如com.test.AAA,也支持com/test/AAA這樣的格式,這樣,我們從異常堆棧里面把類名拷貝過來的時(shí)候,不需要在手動(dòng)把/替換為.啦,
sc 默認(rèn)開啟了子類匹配功能,也就是說所有當(dāng)前類的子類也會(huì)被搜索出來,想要精確的匹配,請打開options disable-sub-class true開關(guān)
參數(shù)說明
class-pattern
類名表達(dá)式匹配
method-pattern
方法名表達(dá)式匹配
-d
展示每個(gè)方法的詳細(xì)信息
-E
開啟正則表達(dá)式匹配,默認(rèn)為通配符匹配
PS:查看已加載類的方法信息, “Search-Method” 的簡寫,這個(gè)命令能搜索出所有已經(jīng)加載了 Class 信息的方法信息。
sm 命令只能看到由當(dāng)前類所聲明 (declaring) 的方法,父類則無法看到
monitor 命令是一個(gè)非實(shí)時(shí)返回命令,實(shí)時(shí)返回命令是輸入之后立即返回,而非實(shí)時(shí)返回的命令,則是不斷的等待目標(biāo) Java 進(jìn)程返回信息,直到用戶輸入 Ctrl+C 為止。服務(wù)端是以任務(wù)的形式在后臺(tái)跑任務(wù),植入的代碼隨著任務(wù)的中止而被不會(huì)被執(zhí)行,所以任務(wù)關(guān)閉后,不會(huì)對原有性能產(chǎn)生太大影響,而且原則上,任何 Arthas 的命令也不會(huì)引起任何原有業(yè)務(wù)邏輯的改變
參數(shù)說明
class-pattern
類名表達(dá)式匹配
method-pattern
方法名表達(dá)式匹配
-c
統(tǒng)計(jì)周期,默認(rèn)值為120秒
監(jiān)控項(xiàng)
timestamp 時(shí)間戳
class java類
method 方法(構(gòu)造方法、普通方法)
total 調(diào)用次數(shù)
success 成功次數(shù)
fail 失敗次數(shù)
rt 平均rt
fail-rate 失敗率
PS:方法執(zhí)行監(jiān)控, 對匹配 class-pattern/method-pattern的類、方法的調(diào)用進(jìn)行監(jiān)控。
trace方法內(nèi)部調(diào)用路徑,并輸出方法路徑上的每個(gè)節(jié)點(diǎn)上耗時(shí), trace 命令能主動(dòng)搜索 class-pattern/method-pattern 對應(yīng)的方法調(diào)用路徑,渲染和統(tǒng)計(jì)整個(gè)調(diào)用鏈路上的所有性能開銷和追蹤調(diào)用鏈路。
trace 能方便的幫助你定位和發(fā)現(xiàn)因 RT 高而導(dǎo)致的性能問題缺陷,但其每次只能跟蹤一級(jí)方法的調(diào)用鏈路
trace 在執(zhí)行的過程中本身是會(huì)有一定的性能開銷,在統(tǒng)計(jì)的報(bào)告中并未像 JProfiler 一樣預(yù)先減去其自身的統(tǒng)計(jì)開銷。所以這統(tǒng)計(jì)出來有些許的不準(zhǔn),渲染路徑上調(diào)用的類、方法越多,性能偏差越大。但還是能讓你看清一些事情的。
參數(shù)說明
class-pattern
類名表達(dá)式匹配
method-pattern
方法名表達(dá)式匹配
condition-express
條件表達(dá)式
-n
命令執(zhí)行次數(shù)
#cost
方法執(zhí)行耗時(shí)
PS: 很多時(shí)候我們只想看到某個(gè)方法的rt大于某個(gè)時(shí)間之后的trace結(jié)果,例如trace *StringUtils isBlank "$cost>100"表示當(dāng)執(zhí)行時(shí)間超過100ms的時(shí)候,才會(huì)輸出trace的結(jié)果。
stack輸出當(dāng)前方法被調(diào)用的調(diào)用路徑, 很多時(shí)候我們都知道一個(gè)方法被執(zhí)行,但這個(gè)方法被執(zhí)行的路徑非常多,或者你根本就不知道這個(gè)方法是從那里被執(zhí)行了,此時(shí)你需要的是 stack 命令。
參數(shù)說明
class-pattern
類名表達(dá)式匹配
method-pattern
方法名表達(dá)式匹配
condition-express
條件表達(dá)式
-n
執(zhí)行次數(shù)限制
watch方法執(zhí)行數(shù)據(jù)觀測, 讓你能方便的觀察到指定方法的調(diào)用情況。能觀察到的范圍為:返回值、拋出異常、入?yún)ⅲㄟ^編寫 groovy 表達(dá)式進(jìn)行對應(yīng)變量的查看。
參數(shù)說明
class-pattern
類名表達(dá)式匹配
method-pattern
方法名表達(dá)式匹配
express
觀察表達(dá)式
condition-express
條件表達(dá)式
-b
在方法調(diào)用之前觀察(默認(rèn)關(guān)閉)
-e
在方法異常之后觀察(默認(rèn)關(guān)閉)
-s
在方法返回之后觀察(默認(rèn)關(guān)閉)
-f
在方法結(jié)束之后(正常返回和異常返回)觀察 (默認(rèn)開啟)
-x
指定輸出結(jié)果的屬性遍歷深度,默認(rèn)為0
PS:這里重點(diǎn)要說明的是觀察表達(dá)式,觀察表達(dá)式的構(gòu)成主要由 groovy 表達(dá)式組成,只要是一個(gè)合法的 groovy 表達(dá)式,都能被正常支持。
觀察的維度也比較多,主要體現(xiàn)在參數(shù) advice 的數(shù)據(jù)結(jié)構(gòu)上。Advice 參數(shù)最主要是封裝了通知節(jié)點(diǎn)的所有信息。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69239.html
摘要:是什么鬼是一款阿里巴巴開源的線上診斷工具,功能非常強(qiáng)大,可以解決很多線上不方便解決的問題。診斷使用的是命令行交互模式,支持,操作系統(tǒng),命令還支持使用鍵對各種信息的自動(dòng)補(bǔ)全,診斷起來非常利索。顯示當(dāng)前系統(tǒng)的實(shí)時(shí)數(shù)據(jù)面板,按即可退出。 Arthas是什么鬼? Arthas是一款阿里巴巴開源的 Java 線上診斷工具,功能非常強(qiáng)大,可以解決很多線上不方便解決的問題。 Arthas診斷使用的是...
摘要:是什么摘自的介紹大意為是阿里開源的一個(gè)診斷工具,可以幫助開發(fā)人員在不修改代碼或重啟服務(wù)器的情況下快速定位線上問題。聽起來確實(shí)是我們的程序員的一大福利。參考資料使用手冊 1. Arthas是什么? 摘自Arthas的Github介紹: Arthas is a Java Diagnostic tool open sourced by Alibaba. Arthas allows deve...
摘要:診斷工具簡介是阿里開源的一個(gè)線上診斷工具,發(fā)現(xiàn)阿里還是挺喜歡開源一些技術(shù)的,造福人類。昨天試用了一下,發(fā)現(xiàn)真是強(qiáng)大,解決了我工作兩年的很多困擾,有點(diǎn)相見恨晚的感覺。每秒統(tǒng)計(jì)方法的調(diào)用次數(shù),成功失敗次數(shù)和平均響應(yīng)時(shí)間等。具體使用請見。 Java診斷工具Arthas 1. Arthas簡介 Arthas是阿里開源的一個(gè)線上java診斷工具,發(fā)現(xiàn)阿里還是挺喜歡開源一些技術(shù)的,造福人類。昨天試...
摘要:背景最近來了個(gè)實(shí)習(xí)僧小弟,安排他實(shí)現(xiàn)對目標(biāo)網(wǎng)站連通性檢測的小功能簡單講就是將下邊的腳本換成代碼來實(shí)現(xiàn)百度平臺(tái)狀態(tài)不正常,請注意功能實(shí)現(xiàn)使用開始執(zhí)行定時(shí)任務(wù),檢測百度網(wǎng)站連通性請求百度成功,返回報(bào)文請求異常百度執(zhí)行檢測百度網(wǎng)站連通 背景 最近來了個(gè)實(shí)習(xí)僧小弟,安排他實(shí)現(xiàn)對目標(biāo)網(wǎng)站 連通性檢測的小功能,簡單講就是將下邊的shell 腳本換成Java 代碼來實(shí)現(xiàn) #!/bin/bash UR...
摘要:背景最近來了個(gè)實(shí)習(xí)僧小弟,安排他實(shí)現(xiàn)對目標(biāo)網(wǎng)站連通性檢測的小功能簡單講就是將下邊的腳本換成代碼來實(shí)現(xiàn)百度平臺(tái)狀態(tài)不正常,請注意功能實(shí)現(xiàn)使用開始執(zhí)行定時(shí)任務(wù),檢測百度網(wǎng)站連通性請求百度成功,返回報(bào)文請求異常百度執(zhí)行檢測百度網(wǎng)站連通 背景 最近來了個(gè)實(shí)習(xí)僧小弟,安排他實(shí)現(xiàn)對目標(biāo)網(wǎng)站 連通性檢測的小功能,簡單講就是將下邊的shell 腳本換成Java 代碼來實(shí)現(xiàn) 1#!/bin/bash ...
閱讀 832·2021-11-22 11:59
閱讀 3248·2021-11-17 09:33
閱讀 2318·2021-09-29 09:34
閱讀 1948·2021-09-22 15:25
閱讀 1966·2019-08-30 15:55
閱讀 1327·2019-08-30 15:55
閱讀 539·2019-08-30 15:53
閱讀 3353·2019-08-29 13:55