欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java的Arthas命令有哪些

本篇內(nèi)容介紹了“java的Arthas命令有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括青銅峽網(wǎng)站建設(shè)、青銅峽網(wǎng)站制作、青銅峽網(wǎng)頁制作以及青銅峽網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,青銅峽網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到青銅峽省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

1、什么是Arthas?

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

2、Arthas有哪些特性

  • 實(shí)時(shí)查看系統(tǒng)的運(yùn)行狀況

  • 查看函數(shù)調(diào)用的參數(shù),返回值和異常

  • 代碼在線熱更新

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

  • 快速定位應(yīng)用的熱點(diǎn),生成火焰圖

  • 在線診斷,點(diǎn)開網(wǎng)頁診斷線上應(yīng)用

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

當(dāng)你遇到以下類似問題而束手無策時(shí),Arthas可以幫助你解決:

  • 這個(gè)類從哪個(gè) jar 包加載的?為什么會(huì)報(bào)各種類相關(guān)的 Exception?

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

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

  • 線上遇到某個(gè)用戶的數(shù)據(jù)處理有問題,但線上同樣無法 debug,線下無法重現(xiàn)!

  • 是否有一個(gè)全局視角來查看系統(tǒng)的運(yùn)行狀況?

  • 有什么辦法可以監(jiān)控到JVM的實(shí)時(shí)運(yùn)行狀態(tài)?

  • 怎么快速定位應(yīng)用的熱點(diǎn),生成火焰圖?

4、安裝

下載arthas-boot.jar,然后用java -jar的方式啟動(dòng):

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

本文的示例項(xiàng)目是運(yùn)行在docker,因此就采用了另外的方式

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

不過在執(zhí)行的過程中,可能會(huì)出現(xiàn)

/bin/bash: wget: command not found

解決方案如下

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

命令解讀

1、幫助命令相關(guān)

help(查看命令幫助信息

會(huì)列這個(gè)命令,源于個(gè)人習(xí)慣吧。每當(dāng)學(xué)習(xí)一個(gè)新東西,都會(huì)習(xí)慣看下幫助,通讀一下 java的Arthas命令有哪些 當(dāng)你想了解具體命令的詳細(xì)用法,以thread為例,輸入

help thread

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

help 命令

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

2、jvm相關(guān)

dashboard(實(shí)時(shí)展示當(dāng)前系統(tǒng)諸如線程、內(nèi)存占用、GC等信息的面板,默認(rèn)每個(gè)5秒刷新一下面板

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

jvm(查看當(dāng)前JVM信息比如gc回收次數(shù)以及耗時(shí)等)

java的Arthas命令有哪些

thread(查看當(dāng)前線程信息,查看線程的堆棧

a、查看當(dāng)前最忙的前N個(gè)線程并打印堆棧

thread -n 3

java的Arthas命令有哪些 上述的命令實(shí)現(xiàn)的效果就和我們以往輸入

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

類似

b、thread -b, 找出當(dāng)前阻塞其他線程的線程

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

c、thread --state ,查看指定狀態(tài)的線程

java的Arthas命令有哪些

3、日志相關(guān)

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

3.1、查看logger信息 java的Arthas命令有哪些 3.2、動(dòng)態(tài)更新logger level

修改日志級(jí)別步驟

a、查找當(dāng)前類的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實(shí)際使用的是logback。 可以看到level=null,則說明實(shí)際最終的level是從root logger里來的。

c、單獨(dú)設(shè)置UserServiceImpl的logger level 把日志級(jí)別變更為warn

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

java的Arthas命令有哪些 可以看出日志級(jí)別已經(jīng)改為warn

4、class/classloader相關(guān)

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

java的Arthas命令有哪些

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

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

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

為啥介紹這幾個(gè),因?yàn)檫@幾個(gè)組合起來就可以實(shí)現(xiàn)動(dòng)態(tài)在線更新代碼了。其步驟如下

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參數(shù)指定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、監(jiān)控相關(guān)

monitor(方法執(zhí)行監(jiān)控,可以監(jiān)控方法的調(diào)用次數(shù)、成功次數(shù)、失敗次數(shù)、平均響應(yīng)時(shí)間、失敗率)

注:這是一個(gè)非實(shí)時(shí)返回命令,統(tǒng)計(jì)周期,默認(rèn)值為120秒

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

java的Arthas命令有哪些

watch(觀察指定方法的調(diào)用情況。能觀察到的范圍為:返回值、拋出異常、入?yún)?

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

java的Arthas命令有哪些 watch參數(shù)說明 java的Arthas命令有哪些

trace(方法內(nèi)部調(diào)用路徑,并輸出方法路徑上的每個(gè)節(jié)點(diǎn)上耗時(shí))

注:trace 能方便的幫助你定位和發(fā)現(xiàn)因 RT 高而導(dǎo)致的性能問題缺陷,但其每次只能跟蹤一級(jí)方法的調(diào)用鏈路。

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

java的Arthas命令有哪些

stack(輸出當(dāng)前方法被調(diào)用的調(diào)用路徑)

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

java的Arthas命令有哪些

tt(方法執(zhí)行數(shù)據(jù)的時(shí)空隧道,記錄下指定方法每次調(diào)用的入?yún)⒑头祷匦畔?,并能?duì)這些不同的時(shí)間下調(diào)用進(jìn)行觀測)

這個(gè)命令的厲害之處在于記錄下當(dāng)前方法的每次調(diào)用環(huán)境現(xiàn)場,并能進(jìn)行重放

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

java的Arthas命令有哪些 java的Arthas命令有哪些 b、選擇一個(gè)index進(jìn)行重放

tt -i 1000 -p

java的Arthas命令有哪些 

:這些監(jiān)控命令,都通過字節(jié)碼增強(qiáng)技術(shù)來實(shí)現(xiàn)的,會(huì)在指定類的方法中插入一些切面來實(shí)現(xiàn)數(shù)據(jù)統(tǒng)計(jì)和觀測,因此在線上、預(yù)發(fā)使用時(shí),請(qǐng)盡量明確需要觀測的類、方法以及條件,診斷結(jié)束要執(zhí)行 stop 或?qū)⒃鰪?qiáng)過的類執(zhí)行 reset 命令。

“java的Arthas命令有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

當(dāng)前文章:java的Arthas命令有哪些
新聞來源:http://chinadenli.net/article22/ppgecc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、企業(yè)網(wǎng)站制作、定制網(wǎng)站、自適應(yīng)網(wǎng)站服務(wù)器托管、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)