中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

dw做網(wǎng)站鼠標經(jīng)過圖像seo優(yōu)化團隊

dw做網(wǎng)站鼠標經(jīng)過圖像,seo優(yōu)化團隊,深圳工商,推軟件一、概述 Arthas(阿爾薩斯)是阿里巴巴開源的一款Java診斷工具,用于實時檢測、診斷Java應用程序的性能問題。它是一個命令行工具,提供了豐富的功能,包括查看類加載信息、方法執(zhí)行耗時、線程堆棧、內(nèi)存分析等。Arthas 的…

一、概述

Arthas(阿爾薩斯)是阿里巴巴開源的一款Java診斷工具,用于實時檢測、診斷Java應用程序的性能問題。它是一個命令行工具,提供了豐富的功能,包括查看類加載信息、方法執(zhí)行耗時、線程堆棧、內(nèi)存分析等。Arthas?的設計目標是在生產(chǎn)環(huán)境中實時診斷和解決Java應用程序的問題。

以下是?Arthas?的一些主要特點和功能:

  • 實時性:?Arthas?可以在運行中的?Java?進程中實時進行診斷,無需重新啟動應用。
  • 豐富的命令: 提供了眾多的命令,涵蓋了類加載、方法執(zhí)行、線程、內(nèi)存、GC?等多個方面。
  • 動態(tài)追蹤: 支持實時動態(tài)追蹤方法調(diào)用、線程堆棧等信息,方便定位問題。
  • 內(nèi)存分析: 提供了?Heap Dump、Histogram、Classloader Stats?等命令,幫助進行內(nèi)存分析。
  • 多種環(huán)境支持: 支持?Linux、Mac?和?Windows?操作系統(tǒng),支持?HotSpot?和?OpenJ9 JVM。
  • 在線幫助: 提供了豐富的在線幫助,用戶可以通過 help 命令查看每個命令的詳細說明。

請注意,Arthas?的使用可能需要一些對 Java 應用程序的基本了解。在生產(chǎn)環(huán)境中使用?Arthas?時,需要謹慎操作,以免對應用程序產(chǎn)生影響。詳細的使用方法和命令說明可以參考?Arthas?的官方文檔:

  • https://arthas.aliyun.com/doc/
  • https://github.com/alibaba/arthas。


二、Arthas 安裝

全量安裝

wget https://arthas.aliyun.com/download/latest_version?mirror=aliyun -O arthas-packaging-3.7.1-bin.zipunzip arthas-packaging-3.7.1-bin.zip


三、Arthas 主要組成結構


主要有以下幾大組件:

  • arthas-core.jar?是服務器端的啟動入口類,調(diào)用?VirtualMachine#attach?到目標進程,并加載?arthas-agent.jar?作為?agent?包。
  • arthas-agent.jar?既可以使用?premain?方式(在目標進程啟動之前,通過-agent參數(shù)靜態(tài)指定),也可以通過?agentmain?方式(在進程啟動之后attach上去)。arthas-agent會使用自定義的classloader(ArthasClassLoader)加載arthas-core.jar里面的Configure類以及ArthasBootstrap。 同時程序運行的時候會使用arthas-spy.jar。
  • arthas-spy.jar?里面只包含Spy類,目的是為了將Spy類使用BootstrapClassLoader來加載,從而使目標進程的java應用可以訪問Spy類。通過ASM修改字節(jié)碼,可以將Spy類的方法ON_BEFORE_METHOD,?ON_RETURN_METHOD等編織到目標類里面。
  • arthas-client.jar?是客戶端程序,用來連接arthas-core.jar啟動的服務端代碼,使用telnet方式。一般由arthas-boot.jar和as.sh來負責啟動。

四、Arthas 通信主要流程

Arthas?應用是基于C/S的通信架構來設計的,支持?Telnet?和?Http?的客戶端協(xié)議通信。

  • 在服務器端的啟動過程中會調(diào)用?ArthasBootstrap#bind?中, 會啟動?Telnet?和?Http?通信協(xié)議的服務器實例并接收請求。
  • 服務器端接收到客戶端連接后都會為每個連接生成會話窗口,并會將發(fā)過來的請求內(nèi)容解析后生成命令交由任務控制去完成響應。
  • 其中每個客戶端通信都對應唯一的?ShellImpl?實現(xiàn),里面包括了唯一的Session?實例,并持有JobControllerImpl?和?InternalCommandManager?對象用于組裝出異步任務去執(zhí)行這個命令。
  • InternalCommandManager?類記錄了所有命令,通過名字可搜索到對應的命令實現(xiàn)類,這里Command類會被包裝?AnnotatedCommand?類放入列表中。


五、Arthas 快速入門講解

5.1 啟動 Arthas

# 第一重方式
./as.sh# 第二種方式(推薦)
java -jar arthas-boot.jar


5.2 基礎命令介紹

# 啟動服務
java -jar arthas-boot.jar
# 查看幫助
help 
  • base64?:base64 編碼轉換,和 linux 里的 base64 命令類似
  • cat?:打印文件內(nèi)容,和 linux 里的 cat 命令類似
  • cls:清空當前屏幕區(qū)域
  • echo:打印參數(shù),和 linux 里的 echo 命令類似
  • grep:匹配查找,和 linux 里的 grep 命令類似
  • help:查看命令幫助信息
  • history:打印命令歷史
  • keymap:Arthas 快捷鍵列表及自定義快捷鍵
  • pwd:返回當前的工作目錄,和 linux 命令類似
  • quit:退出當前 Arthas 客戶端,其他 Arthas 客戶端不受影響
  • reset:重置增強類,將被 Arthas 增強過的類全部還原,Arthas 服務端關閉時會重置所有增強過的類
  • session:查看當前會話的信息
  • stop:關閉 Arthas 服務端,所有 Arthas 客戶端全部退出
  • tee: 復制標準輸入到標準輸出和指定的文件,和 linux 里的 tee 命令類似
  • version:輸出當前目標 Java 進程所加載的 Arthas 版本號

5.3 jvm 相關命令行

# 啟動服務
java -jar arthas-boot.jar
# 查看幫助
help 
  • dashboard:當前系統(tǒng)的實時數(shù)據(jù)面板
  • getstatic:查看類的靜態(tài)屬性
  • heapdump:dump java heap, 類似 jmap 命令的 heap dump 功能
  • jvm:查看當前 JVM 的信息
  • logger:查看和修改 logger
  • mbean:查看 Mbean 的信息
  • memory:查看 JVM 的內(nèi)存信息
  • ognl:執(zhí)行 ognl 表達式
  • perfcounter:查看當前 JVM 的 Perf Counter 信息
  • sysenv:查看 JVM 的環(huán)境變量
  • sysprop:查看和修改 JVM 的系統(tǒng)屬性
  • thread:查看當前 JVM 的線程堆棧信息
  • vmoption:查看和修改 JVM 里診斷相關的 option
  • vmtool:從 jvm 里查詢對象,執(zhí)行 forceGc

1、dashboard(實時數(shù)據(jù)面板)

dashboard

數(shù)據(jù)說明:

  • ID:Java級別的線程ID,注意這個ID不能跟jstack中的nativeID一一對應
  • NAME:線程名
  • GROUP:線程組名
  • PRIORITY:線程優(yōu)先級,?1~10之間的數(shù)字,越大表示優(yōu)先級越高
  • STATE:線程的狀態(tài)
  • CPU%:線程消耗的cpu占比,采樣100ms,將所有線程在這100ms內(nèi)的cpu使用量求和,再算出每個線程的cpu使用占比。
  • TIME:線程運行總時間,數(shù)據(jù)格式為分:秒
  • INTERRUPTED:線程當前的中斷位狀態(tài)
  • DAEMON:是否是daemon線程

GC區(qū)域說明:

  • gc.ps_scavenge.count:從應用程序啟動到當前采樣時間年輕代gc次數(shù)
  • gc.ps_scavenge.time(ms):從應用程序啟動到當前采樣時間年輕代gc所用的總時間(毫秒)
  • gc.ps_marksweep.count:從應用程序啟動到當前采樣時間老年代gc次數(shù)
  • gc.ps_marksweep.time(ms):從應用程序啟動到當前采樣時間老年代gc所用的總時間(毫秒)

Memory?區(qū)域主要參數(shù)說明:

  • heap:堆內(nèi)存使用情況(ps_eden_space+ps_survivor_space+ps_old_gen)
  • ps_eden_space:伊甸園區(qū)內(nèi)存使用情況
  • ps_survivor_space:幸存區(qū)內(nèi)存使用情況
  • ps_old_gen?:老年代內(nèi)存使用情況
  • nonheap:非堆內(nèi)存使用情況

輸入?q?或者?Ctrl+C?可以退出dashboard命令

2、Thread(線程相關堆棧信息)

參數(shù)說明:

  • 數(shù)字:線程id
  • [n:]:指定最忙的前N個線程并打印堆棧
  • [b]:找出當前阻塞其他線程的線程
  • [i ]?:指定cpu占比統(tǒng)計的采樣間隔,單位為毫秒

Arthas支持管道,可以用?thread 1 | grep 'main('?查找到main class。

thread 1 | grep 'main('thread				#	顯示所有線程的信息
thread 1			#	顯示1號線程的運行堆棧
thread -b			#	查看阻塞的線程信息
thread -n 3			#	查看最忙的3個線程,并打印堆棧
thread -i 1000 -n 3	#	指定采樣時間間隔,每過1000毫秒采樣,顯示最占時間的3個線程# 查看處于等待狀態(tài)的線程(WAITING、BLOCKED)
thread --state WAITING


死鎖線程查看

thread		# 查看線程狀態(tài)
thread -b	#	查看阻塞的線程信息

3、jvm(查看當前 JVM 的信息)

jvm

THREAD相關

  • COUNT:JVM當前活躍的線程數(shù)
  • DAEMON-COUNT: JVM當前活躍的守護線程數(shù)
  • PEAK-COUNT:從JVM啟動開始曾經(jīng)活著的最大線程數(shù)
  • STARTED-COUNT:從JVM啟動開始總共啟動過的線程次數(shù)
  • DEADLOCK-COUNT:JVM當前死鎖的線程數(shù)

文件描述符相關

  • MAX-FILE-DESCRIPTOR-COUNT:JVM進程最大可以打開的文件描述符數(shù)
  • OPEN-FILE-DESCRIPTOR-COUNT:JVM當前打開的文件描述符數(shù)

4、memory(查看 JVM 的內(nèi)存信息)

memory

5、sysprop(查看/修改屬性)

sysprop						#	查看所有屬性
sysprop java.version		#	查看單個屬性,支持通過tab補全

修改某個屬性

sysprop user.country
user.country=US

6、sysenv(查看當前JVM的環(huán)境屬性)

# 查看所有環(huán)境變量
sysenv
# 查看單個環(huán)境變量
sysenv USER

7、vmoption(查看JVM中選項)

# 查看所有的選項
vmoption
# 查看指定的選項
vmoption PrintGCDetails
# 更新指定的選項
vmoption PrintGCDetails true

8、getstatic(獲取靜態(tài)成員變量)

#	語法
getstatic 類名 屬性名
# 顯示demo.MathGame類中靜態(tài)屬性random
getstatic demo.MathGame random

9、ognl(執(zhí)行ognl表達式)

執(zhí)行ognl表達式,這是從3.0.5版本新增的功能。

參數(shù)說明:

  • express:執(zhí)行的表達式
  • [c:]:執(zhí)行表達式的 ClassLoader 的 hashcode,默認值是SystemClassLoader
  • [x]:結果對象的展開層次,默認值1

舉例:
調(diào)用靜態(tài)函數(shù)

#	獲取系統(tǒng)變量中值,并且打印(只會打印有返回值函數(shù))
ognl '@java.lang.System@out.println("hello")'

獲取靜態(tài)類的靜態(tài)字段

#	獲取代碼中的運行返回值
ognl '@demo.MathGame@random'

執(zhí)行多行表達式,賦值給臨時變量,返回一個List

#	計算value1、value2值,并存在List集合中
ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("java.runtime.name"), {#value1, #value2}'

5.4 類和類加載器(class/classLoader)

  • classloader:查看 classloader 的繼承樹,urls,類加載信息,使用 -?classloader:去 getResource
  • dump:dump 已加載類的 byte code 到特定目錄
  • jad:反編譯指定已加載類的源碼
  • mc:內(nèi)存編譯器,內(nèi)存編譯.java文件為.class文件
  • redefine:加載外部的.class文件,redefine 到 JVM 里
  • retransform:加載外部的.class文件,retransform 到 JVM 里
  • sc:查看 JVM 已加載的類信息
  • sm:查看已加載類的方法信息

1、sc(查看類信息)

查看類的信息(sc: Search Class)

  • 查看JVM已加載的類信息,“Search-Class” 的簡寫,這個命令能搜索出所有已經(jīng)加載到 JVM 中的 Class 信息
  • sc 默認開啟了子類匹配功能,也就是說所有當前類的子類也會被搜索出來,想要精確的匹配,請打開options disable-sub-class true開關。

參數(shù)說明:

  • class-pattern:類名表達式匹配,支持全限定名,如com.taobao.test.AAA,也支持com/taobao/test/AAA這樣的格式,這樣,我們從異常堆棧里面把類名拷貝過來的時候,不需要在手動把/替換為.啦。
  • method-pattern:方法名表達式匹配
  • [d]:輸出當前類的詳細信息,包括這個類所加載的原始文件來源、類的聲明、加載的ClassLoader等詳細信息。 如果一個類被多個ClassLoader所加載,則會出現(xiàn)多次
  • [E]:開啟正則表達式匹配,默認為通配符匹配
  • [f]:輸出當前類的成員變量信息(需要配合參數(shù)-d一起使用)
#	模糊搜索,demo包下所有的類
sc demo.*
#	打印類的詳細信息
sc -d demo.MathGame

2、sm(查看已加載方法信息)

查看已加載方法信息(“Search-Method” )

  • 查看已加載類的方法信息“Search-Method” 的簡寫,這個命令能搜索出所有已經(jīng)加載了 Class 信息的方法信息。
  • sm 命令只能看到由當前類所聲明 (declaring) 的方法,父類則無法看到。

參數(shù)說明:

  • class-pattern:類名表達式匹配
  • method-pattern:方法名表達式匹配
  • [d]:展示每個方法的詳細信息
  • [E]:開啟正則表達式匹配,默認為通配符匹配
#	顯示String類加載的方法
sm java.lang.String
# 	查看方法信息
sm demo.MathGame
# 	查看方法信息(詳細信息-d)
sm -d demo.MathGame

3、編譯與反編譯jad、mc、redefine

  • jad:反編譯字節(jié)碼文件得到java的源代碼
  • mc:在內(nèi)存中將源代碼編譯成字節(jié)碼
  • redefine:將字節(jié)碼文件重新加載到內(nèi)存中執(zhí)行

【示例】jad 反編譯已加載類源碼

#	反編譯MathGame方法
jad demo.MathGame
#	反編繹時只顯示源代碼(排除ClassLoader信息)。
#	默認情況下,反編譯結果里會帶有ClassLoader信息,通過--source-only選項,可以只打印源代碼。方便和mc/redefine命令結合使用。
jad --source-only demo.MathGame
#	反編譯到指定文件中
jad --source-only demo.MathGame > Hello.java
#	只反編譯mathGame類型中main方法
jad demo.MathGame main

【示例】mc 編譯Java代碼

#	在內(nèi)存中編譯Hello.java為Hello.class
mc /root/Hello.java
#	可以通過-d命令指定輸出目錄
mc -d /root/bbb /root/Hello.java

【示例】redefine 加載外部.class文件

redefine的限制

  • 不允許新增加field/method
  • 正在跑的函數(shù),沒有退出不能生效,比如下面新增加的System.out.println,只有run()函數(shù)里的會生效。
#	1. 使用jad反編譯demo.MathGame輸出到/root/MathGame.java
jad --source-only demo.MathGame > /root/MathGame.java
#	2.按上面的代碼編輯完畢以后,使用mc內(nèi)存中對新的代碼編譯
mc /root/MathGame.java -d /root
#	3.使用redefine命令加載新的字節(jié)碼
redefine /root/demo/MathGame.class

4、dump(保存已加載字節(jié)碼文件到本地)

將已加載類的字節(jié)碼文件保存在特定目錄:logs/arthas/classdump

  • 不同的類加載器放在不同的目錄下。
  • dump作用:將正在JVM中運行的程序的字節(jié)碼文件提取出來,保存在logs相應的目錄下。

參數(shù)說明:

  • class-pattern:類名表達式匹配
  • [c:]:類所屬 ClassLoader 的 hashcode
  • [E]:開啟正則表達式匹配,默認為通配符匹配
#	把String類的字節(jié)碼文件保存到~/logs/arthas/classdump/目錄下
dump java.lang.String
#	把demo包下所有的類的字節(jié)碼文件保存到~/logs/arthas/classdump/目錄下
dump demo.*

5、classloader(獲取類加載器的信息)

作用:

  • classloader?命令將?JVM?中所有的?classloader?的信息統(tǒng)計出來,并可以展示繼承樹,urls等。
  • 可以讓指定的?classloader?去?getResources,打印出所有查找到的resources的?url。對于ResourceNotFoundException異常比較有用。

參數(shù)說明:

  • [l]:按類加載實例進行統(tǒng)計
  • [t]:打印所有ClassLoader的繼承樹
  • [a]:列出所有ClassLoader加載的類,請謹慎使用
  • [c:]:ClassLoader的hashcode
  • [c: r:]:用ClassLoader去查找resource
  • [c: load:]:用ClassLoader去加載指定的類
#	默認按類加載器的類型查看統(tǒng)計信息
classloader
#	按類加載器的實例查看統(tǒng)計信息,可以看到類加載的hashCode
classloader -l
#	查看ClassLoader的繼承樹
classloader -t
#	通過類加載器的hash,查看此類加載器實際所在的位置
classloader -c 680f2737
#	使用ClassLoader去查找指定資源resource所在的位置
classloader -c 680f2737 -r META-INF/MANIFEST.MF
#	使用ClassLoader去加載類
classloader -c 70dea4e --load java.lang.String

classloader命令主要作用有哪些?

  • 顯示所有類加載器的信息
  • 獲取某個類加載器所在的jar包
  • 獲取某個資源在哪個jar包中
  • 加載某個類

5.5 monitor/watch/trace 相關(核心監(jiān)視功能)

  • monitor?- 方法執(zhí)行監(jiān)控
  • stack?- 輸出當前方法被調(diào)用的調(diào)用路徑
  • trace?- 方法內(nèi)部調(diào)用路徑,并輸出方法路徑上的每個節(jié)點上耗時
  • tt?- 方法執(zhí)行數(shù)據(jù)的時空隧道,記錄下指定方法每次調(diào)用的入?yún)⒑头祷匦畔?#xff0c;并能對這些不同的時間下調(diào)用進行觀測
  • watch?- 方法執(zhí)行數(shù)據(jù)觀測

1、monitor(監(jiān)控方法的執(zhí)行情況)

監(jiān)控指定類中方法的執(zhí)行情況用來監(jiān)視一個時間段中指定方法的執(zhí)行次數(shù),成功次數(shù),失敗次數(shù),耗時等這些信息。

參數(shù)說明:

  • class-pattern:類名表達式匹配
  • method-pattern:方法名表達式匹配
  • [E]:開啟正則表達式匹配,默認為通配符匹配
  • [c:]:統(tǒng)計周期,默認值為120秒

監(jiān)控demo.MathGame類,并且每5S更新一次狀態(tài)。

monitor demo.MathGame primeFactors -c 5

監(jiān)控的維度說明:

  • timestamp:時間戳
  • class:Java類
  • method:方法(構造方法、普通方法)
  • total:調(diào)用次數(shù)
  • success:成功次數(shù)
  • fail:失敗次數(shù)
  • rt:平均耗時
  • fail-rate:失敗率

2、watch(檢測函數(shù)返回值)

方法執(zhí)行數(shù)據(jù)觀測,讓你能方便的觀察到指定方法的調(diào)用情況。能觀察到的范圍為:返回值、拋出異常、入?yún)?#xff0c;通過編寫OGNL 表達式進行對應變量的查看

參數(shù)說明:

  • class-pattern:類名表達式匹配
  • method-pattern?方法名表達式匹配
  • express?觀察表達式
  • condition-express?條件表達式
  • [b]:在方法調(diào)用之前觀察before
  • [e]:在方法異常之后觀察 exception
  • [s]:在方法返回之后觀察 success
  • [f]:在方法結束之后(正常返回和異常返回)觀察 finish
  • [E]:開啟正則表達式匹配,默認為通配符匹配
  • [x:]:指定輸出結果的屬性遍歷深度,默認為 1

這里重點要說明的是觀察表達式,觀察表達式的構成主要由ognl 表達式組成,所以你可以這樣寫"{params,returnObj}",只要是一個合法的 ognl 表達式,都能被正常支持。

特別說明:

  • watch?命令定義了4個觀察事件點,即?-b?方法調(diào)用前,-e?方法異常后,-s?方法返回后,-f?方法結束后
  • 4個觀察事件點-b、-e、-s?默認關閉,-f?默認打開,當指定觀察點被打開后,在相應事件點會對觀察表達式進行求值并輸出
  • 這里要注意方法入?yún)⒑头椒ǔ鰠⒌膮^(qū)別,有可能在中間被修改導致前后不一致,除了?-b?事件點?params?代表方法入?yún)⑼?#xff0c;其余事件都代表方法出參
  • 當使用?-b?時,由于觀察事件點是在方法調(diào)用前,此時返回值或異常均不存在
#	查看方法執(zhí)行的返回值
watch demo.MathGame primeFactors returnObj
#	觀察demo.MathGame類中primeFactors方法出參和返回值,結果屬性遍歷深度為2。
#	params:表示所有參數(shù)數(shù)組(因為不確定是幾個參數(shù))。
#	returnObject:表示返回值
watch demo.MathGame primeFactors "{params,returnObj}" -x 2# 查看執(zhí)行前參數(shù):
# -b 方法執(zhí)行前的參數(shù)
watch demo.MathGame primeFactors "{params,returnObj}" -x 2 -b#	查看方法中的屬性
watch demo.MathGame primeFactors "{target}" -x 2 -b# 查看某一屬性的值
watch demo.MathGame primeFactors "{target.illegalArgumentCount}" -x 2 -b# 檢測方法在執(zhí)行前-b、執(zhí)行后-s的入?yún)arams、屬性target和返回值returnObj
watch demo.MathGame primeFactors "{params,target,returnObj}" -x 2 -b -s -n 2# 輸入?yún)?shù)小于0的情況:
watch demo.MathGame primeFactors "{params[0],target}" "params[0]<0"

3、trace(根據(jù)路徑追蹤,并記錄消耗時間)

對方法內(nèi)部調(diào)用路徑進行追蹤,并輸出方法路徑上的每個節(jié)點上耗時。

  • trace?命令能主動搜索?class-pattern/method-pattern?對應的方法調(diào)用路徑,渲染和統(tǒng)計整個調(diào)用鏈路上的所有性能開銷和追蹤調(diào)用鏈路。
  • 觀察表達式的構成主要由ognl?表達式組成,所以你可以這樣寫"{params,returnObj}",只要是一個合法的?ognl?表達式,都能被正常支持。
  • 很多時候我們只想看到某個方法的rt大于某個時間之后的trace結果,現(xiàn)在Arthas可以按照方法執(zhí)行的耗時來進行過濾了,例如trace?*StringUtils isBlank '#cost>100'表示當執(zhí)行時間超過100ms的時候,才會輸出trace的結果。
  • watch/stack/trace?這個三個命令都支持#cost耗時條件過濾。

參數(shù)說明:

  • class-pattern:類名表達匹配
  • method-pattern:方法名表達式匹配
  • condition-express:條件表達式,使用OGNL表達式
  • [E]:開啟正則表達式匹配,默認是通配符匹配
  • [n:]:設置命令執(zhí)行次數(shù)
  • #cost:方法執(zhí)行耗時,單位是毫秒
#	trace函數(shù)指定類的指定方法
trace demo.MathGame run#	執(zhí)行1次后退出
trace demo.MathGame run -n 1#	默認情況下,trace不會包含jdk里的函數(shù)調(diào)用,如果希望trace jdk里的函數(shù)。
#	需要顯式設置--skipJDKMethod false。
trace --skipJDKMethod false demo.MathGame run#	據(jù)調(diào)用耗時過濾,trace大于0.5ms的調(diào)用路徑
trace demo.MathGame run '#cost > .5'#	可以用正則表匹配路徑上的多個類和函數(shù),一定程度上達到多層trace的效果。
trace -E com.test.ClassA|org.test.ClassB method1|method2|method3

4、stack(輸出當前方法被調(diào)用的調(diào)用路徑)

輸出當前方法被調(diào)用的調(diào)用路徑很多時候我們都知道一個方法被執(zhí)行,但這個方法被執(zhí)行的路徑非常多,或者你根本就不知道這個方法是從那里被執(zhí)行了,此時你需要的是?stack?命令。

參數(shù)說明:

  • class-pattern:類名表達式匹配
    method-pattern:方法名表達式匹配
    condition-express:條件表達式,OGNL
    [E]:開啟正則表達式匹配,默認為通配符匹配
    [n:]:執(zhí)行次數(shù)限制
#	獲取primeFactors的調(diào)用路徑
stack demo.MathGame primeFactors#	條件表達式來過濾,第0個參數(shù)的值小于0,-n表示獲取2次
stack demo.MathGame primeFactors 'params[0]<0' -n 2#	據(jù)執(zhí)行時間來過濾,耗時大于0.5毫秒
stack demo.MathGame primeFactors '#cost>0.5'

5、tt(時間隧道,記錄多個請求)

time-tunnel?時間隧道。記錄下指定方法每次調(diào)用的入?yún)⒑头祷匦畔?#xff0c;并能對這些不同時間下調(diào)用的信息進行觀測。

  • watch?雖然很方便和靈活,但需要提前想清楚觀察表達式的拼寫,這對排查問題而言要求太高,因為很多時候我們并不清楚問題出自于何方,只能靠蛛絲馬跡進行猜測。
  • 這個時候如果能記錄下當時方法調(diào)用的所有入?yún)⒑头祷刂怠伋龅漠惓φ麄€問題的思考與判斷非常有幫助。于是乎,TimeTunnel 命令就誕生了。
  • 作用:記錄指定方法每次調(diào)用的入?yún)⒑头祷刂?#xff0c;并后期還可以對這些信息進行觀測。

參數(shù)說明:

  • -t:記錄某個方法在一個時間段中的調(diào)用
  • -l:顯示所有已經(jīng)記錄的列表
  • -n:次數(shù) 只記錄多少次
  • -s:表達式 搜索表達式
  • -i:索引號 查看指定索引號的詳細調(diào)用信息
  • -p:重新調(diào)用:指定的索引號時間碎片
#	最基本的使用來說,就是記錄下當前方法的每次調(diào)用環(huán)境現(xiàn)場。
tt -t demo.MathGame primeFactors


字段說明:

  • INDEX?時間片段記錄編號,每一個編號代表著一次調(diào)用,后續(xù)tt還有很多命令都是基于此編號指定記錄操作,非常重要。
  • TIMESTAMP?方法執(zhí)行的本機時間,記錄了這個時間片段所發(fā)生的本機時間
  • COST(ms)?方法執(zhí)行的耗時
  • IS-RET?方法是否以正常返回的形式結束
  • IS-EXP?方法是否以拋異常的形式結束
  • OBJECT?執(zhí)行對象的hashCode(),注意,曾經(jīng)有人誤認為是對象在 JVM中的內(nèi)存地址,但很遺憾他不是。但他能幫助你簡單的標記當前執(zhí)行方法的類實體
  • CLASS?執(zhí)行的類名
  • METHOD?執(zhí)行的方法名
#	對現(xiàn)有記錄進行檢索
tt -l
#	需要篩選出 `primeFactors` 方法的調(diào)用信息
tt -s 'method.name=="primeFactors"'
#	查看某條記錄詳細信息
tt -i 1002

5.6 profiler 火焰圖

profiler?命令支持生成應用熱點的火焰圖。本質(zhì)上是通過不斷的采樣,然后把收集到的采樣結果生成火焰圖。

常用命令:

profiler

命令作用

profiler start

啟動profiler,默認情況下,生成cpu的火焰圖

profiler list

顯示所有支持的事件

profiler getSamples

獲取已采集的sample的數(shù)量

profiler status

查看profiler的狀態(tài),運行的時間

profiler stop

停止profiler,生成火焰圖的結果,指定輸出目錄和輸出格式:svg或html

啟動profiler

profiler start

默認情況下,生成的是cpu的火焰圖,即event為cpu??梢杂?-event參數(shù)來指定。

顯示支持的事件

profiler list

獲取已采集的sample的數(shù)量

profiler getSamples

查看profiler狀態(tài)(可以查看當前profiler在采樣哪種event和采樣時間。)

profiler status

停止profiler,并同步生成文件(默認在工作目錄下的arthas-output目錄。)

[arthas@99095]$ profiler stop
OK
profiler output file: /opt/arthas/arthas-output/20231203-171828.html

通過?--file?參數(shù)來指定輸出結果路徑

# 指定生成的文件名以及路徑
profiler stop --file /tmp/result.svg

可以用--format?指定生成格式

profiler stop --format html

生成的圖(把輸出的文件用瀏覽器打開):

火焰圖的含義:火焰圖是基于 perf 結果產(chǎn)生的SVG 圖片,用來展示 CPU 的調(diào)用棧。

  • y?軸表示調(diào)用棧,每一層都是一個函數(shù)。調(diào)用棧越深,火焰就越高,頂部就是正在執(zhí)行的函數(shù),下方都是它的父函數(shù)。
  • x?軸表示抽樣數(shù),如果一個函數(shù)在?x?軸占據(jù)的寬度越寬,就表示它被抽到的次數(shù)多,即執(zhí)行的時間長。注意,x?軸不代表時間,而是所有的調(diào)用棧合并后,按字母順序排列的。
  • 火焰圖就是看頂層的哪個函數(shù)占據(jù)的寬度最大。只要有"平頂"(plateaus),就表示該函數(shù)可能存在性能問題。
  • 顏色沒有特殊含義,因為火焰圖表示的是 CPU 的繁忙程度,所以一般選擇暖色調(diào)。
http://www.risenshineclean.com/news/49477.html

相關文章:

  • 云南網(wǎng)站建設營銷肇慶seo排名
  • 旅游類網(wǎng)站怎么做百度官方免費下載
  • linux網(wǎng)站服務器配置自媒體營銷代理
  • 大氣的外貿(mào)公司名字福州短視頻seo獲客
  • 欣賞別人做的網(wǎng)站網(wǎng)站免費搭建
  • 學習電子商務網(wǎng)站建設與管理的感想網(wǎng)站備案查詢
  • 手機網(wǎng)站免費模板下載整合營銷理論主要是指
  • wordpress注冊完成請檢查電子郵件網(wǎng)絡優(yōu)化排名培訓
  • 怎樣建立一個免費的網(wǎng)站桔子seo工具
  • 如何 建公司網(wǎng)站win10系統(tǒng)優(yōu)化
  • 建設政府網(wǎng)站網(wǎng)站建設是干什么的
  • 武漢網(wǎng)站制作誰家好優(yōu)化網(wǎng)站seo方案
  • 科技軟件公司網(wǎng)站模板下載廈門網(wǎng)站關鍵詞推廣
  • 高職院校高水平專業(yè)建設網(wǎng)站花都網(wǎng)站建設公司
  • wordpress 優(yōu)秀插件seo設置是什么
  • 哪個網(wǎng)站做外單出口好個人模板建站
  • wordpress rss錯誤四川seo快速排名
  • 關于網(wǎng)站建設公司大全上海app定制開發(fā)公司
  • 北京天海網(wǎng)站建設公司黃頁網(wǎng)站推廣app咋做廣告
  • 做網(wǎng)站的公司找客戶衡陽百度推廣
  • 深圳H5網(wǎng)站開發(fā)南寧seo專員
  • 上海網(wǎng)站建設網(wǎng)頁制作邢臺備案查詢網(wǎng)
  • 贛州市開發(fā)小程序搜索優(yōu)化整站優(yōu)化
  • 網(wǎng)站備案信息查詢百度seo營銷推廣多少錢
  • 彩票投注網(wǎng)站怎樣做安徽網(wǎng)站建設優(yōu)化推廣
  • 做百度手機網(wǎng)站優(yōu)化成都seo網(wǎng)絡優(yōu)化公司
  • 阜陽網(wǎng)站建設工作室營銷圖片素材
  • 扁平風網(wǎng)站哪家培訓機構學校好
  • 高校邦營銷型網(wǎng)站建設答案semifinal
  • 找人做網(wǎng)站注意哪些女教師遭網(wǎng)課入侵視頻大全播放