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