91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java的Arthas命令有哪些

發布時間:2021-11-24 15:54:17 來源:億速云 閱讀:167 作者:iii 欄目:大數據

本篇內容介紹了“java的Arthas命令有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1、什么是Arthas?

Arthas 是Alibaba開源的Java診斷工具,深受開發者喜愛(截止2020.9.19 github star是23K)。通過Arthas我們可以在線排查問題,無需重啟;動態跟蹤Java代碼;實時監控JVM狀態。

2、Arthas有哪些特性

  • 實時查看系統的運行狀況

  • 查看函數調用的參數,返回值和異常

  • 代碼在線熱更新

  • 秒解類沖突問題,定位類加載路徑

  • 快速定位應用的熱點,生成火焰圖

  • 在線診斷,點開網頁診斷線上應用

3、Arthas能幫我們解決什么問題

當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:

  • 這個類從哪個 jar 包加載的?為什么會報各種類相關的 Exception?

  • 我改的代碼為什么沒有執行到?難道是我沒 commit?分支搞錯了?

  • 遇到問題無法在線上 debug,難道只能通過加日志再重新發布嗎?

  • 線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!

  • 是否有一個全局視角來查看系統的運行狀況?

  • 有什么辦法可以監控到JVM的實時運行狀態?

  • 怎么快速定位應用的熱點,生成火焰圖?

4、安裝

下載arthas-boot.jar,然后用java -jar的方式啟動:

curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

本文的示例項目是運行在docker,因此就采用了另外的方式

docker exec -it  ${containerId} /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"

不過在執行的過程中,可能會出現

/bin/bash: wget: command not found

解決方案如下

進入容器的/bin/bash
docker exec -it  ${containerId} /bin/bash
apt-get update
apt-get install wget

命令解讀

1、幫助命令相關

help(查看命令幫助信息

會列這個命令,源于個人習慣吧。每當學習一個新東西,都會習慣看下幫助,通讀一下 java的Arthas命令有哪些 當你想了解具體命令的詳細用法,以thread為例,輸入

help thread

java的Arthas命令有哪些 就會有詳細的thread參數、例子介紹。感覺本文的精華就是這個了,畢竟你想要其他命令,直接

help 命令

但為了水文,就再介紹幾類命令

2、jvm相關

dashboard(實時展示當前系統諸如線程、內存占用、GC等信息的面板,默認每個5秒刷新一下面板

java的Arthas命令有哪些 :按ctrl+c可以退出面板

jvm(查看當前JVM信息比如gc回收次數以及耗時等)

java的Arthas命令有哪些

thread(查看當前線程信息,查看線程的堆棧

a、 查看當前最忙的前N個線程并打印堆棧

thread -n 3

java的Arthas命令有哪些 上述的命令實現的效果就和我們以往輸入

top -H -p pid
printf '%x\n'pid
jstack pid |grep 'nid' -C5 –color

類似

b、 thread -b, 找出當前阻塞其他線程的線程

注: 目前只支持找出synchronized關鍵字阻塞住的線程, 如果是java.util.concurrent.Lock, 目前還不支持

c、 thread --state ,查看指定狀態的線程

java的Arthas命令有哪些

3、日志相關

logger(查看logger信息,更新logger level

3.1、 查看logger信息 java的Arthas命令有哪些 3.2、 動態更新logger level

修改日志級別步驟

a、 查找當前類的classloader hashcode

sc -d com.example.springdemo.user.service.impl.UserServiceImpl | grep classLoaderHash

b、 用OGNL獲取logger

ognl -c 31cefde0 '@com.example.springdemo.user.service.impl.UserServiceImpl@log'

java的Arthas命令有哪些 從上圖可以知道com.example.springdemo.user.service.impl.UserServiceImpl@log實際使用的是logback。 可以看到level=null,則說明實際最終的level是從root logger里來的。

c、 單獨設置UserServiceImpl的logger level 把日志級別變更為warn

ognl -c 31cefde0 '@com.example.springdemo.user.service.impl.UserServiceImpl@log.setLevel(@ch.qos.logback.classic.Level@WARN)'

java的Arthas命令有哪些 可以看出日志級別已經改為warn

4、class/classloader相關

jad(反編譯指定已加載類的源碼)

java的Arthas命令有哪些

sc(查看JVM已加載的類信息)

mc(內存編譯器,編譯.java文件生成.class)

redefine(加載外部的.class文件,redefine jvm已加載的類)

為啥介紹這幾個,因為這幾個組合起來就可以實現動態在線更新代碼了。其步驟如下

a、jad反編譯要更新的代碼

jad --source-only com.example.springdemo.user.service.impl.UserServiceImpl > /tmp/UserServiceImpl.java

b、sc查找加載要更新代碼的ClassLoader

sc -d com.example.springdemo.user.service.impl.UserServiceImpl | grep classLoaderHash

c、保存好/tmp/UserServiceImpl.java之后,使用mc(Memory Compiler)命令來編譯,并且通過--classLoaderClass參數指定ClassLoader

mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserServiceImpl.java -d /tmp

d、使用redefine命令重新加載新編譯好的UserServiceImpl.class

redefine /tmp/com/example/springdemo/user/service/impl/UserServiceImpl.class

5、監控相關

monitor(方法執行監控,可以監控方法的調用次數、成功次數、失敗次數、平均響應時間、失敗率)

注: 這是一個非實時返回命令,統計周期,默認值為120秒

monitor -c 5 com.example.springdemo.user.service.impl.UserServiceImpl getUserById

java的Arthas命令有哪些

watch(觀察指定方法的調用情況。能觀察到的范圍為:返回值、拋出異常、入參)

watch com.example.springdemo.user.service.impl.UserServiceImpl getUserById "{params,returnObj}" -x 2

java的Arthas命令有哪些 watch參數說明 java的Arthas命令有哪些

trace(方法內部調用路徑,并輸出方法路徑上的每個節點上耗時)

注: trace 能方便的幫助你定位和發現因 RT 高而導致的性能問題缺陷,但其每次只能跟蹤一級方法的調用鏈路。

trace com.example.springdemo.user.service.impl.UserServiceImpl getUserById

java的Arthas命令有哪些

stack(輸出當前方法被調用的調用路徑)

stack com.example.springdemo.user.service.impl.UserServiceImpl getUserById

java的Arthas命令有哪些

tt(方法執行數據的時空隧道,記錄下指定方法每次調用的入參和返回信息,并能對這些不同的時間下調用進行觀測)

這個命令的厲害之處在于記錄下當前方法的每次調用環境現場,并能進行重放

tt -t com.example.springdemo.user.service.impl.UserServiceImpl getUserById

java的Arthas命令有哪些 java的Arthas命令有哪些 b、選擇一個index進行重放

tt -i 1000 -p

java的Arthas命令有哪些 

:這些監控命令,都通過字節碼增強技術來實現的,會在指定類的方法中插入一些切面來實現數據統計和觀測,因此在線上、預發使用時,請盡量明確需要觀測的類、方法以及條件,診斷結束要執行 stop 或將增強過的類執行 reset 命令。

“java的Arthas命令有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南华县| 张家界市| 海兴县| 金秀| 含山县| 林口县| 什邡市| 新余市| 梨树县| 甘德县| 周口市| 布拖县| 昌平区| 通榆县| 平武县| 平凉市| 通道| 和龙市| 调兵山市| 福州市| 崇信县| 准格尔旗| 武宣县| 密云县| 通州市| 确山县| 蕲春县| 田阳县| 屏山县| 正宁县| 神木县| 荔波县| 白水县| 华阴市| 湾仔区| 岑溪市| 什邡市| 商城县| 新余市| 咸丰县| 城市|