自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

三年經(jīng)驗(yàn)憑啥碾壓五年老鳥?全靠 Arthas 這手神操作!

開發(fā) 前端
Arthas 的功能遠(yuǎn)不止本文介紹的這些,還有很多實(shí)用的命令和技巧等待你去探索和發(fā)現(xiàn)。比如tt命令的回放功能、mc和redefine命令結(jié)合實(shí)現(xiàn)代碼熱替換、dashboard命令的自定義擴(kuò)展等等。希望大家能夠親自去實(shí)踐,多在實(shí)際項(xiàng)目中使用 Arthas,讓它成為你開發(fā)路上的好幫手。

兄弟們,咱們?cè)诮匣欤l不想成為那個(gè)讓人眼前一亮的高手呢?尤其是那些工作了 3 年的小伙伴,看著身邊工作 5 年的老鳥,心里多少有點(diǎn)小羨慕,想著啥時(shí)候能追上甚至超越他們。今天咱就來聊聊一個(gè)神器 ——Arthas,掌握了它,3 年經(jīng)驗(yàn)還真能在某些方面碾壓 5 年老鳥!

一、初識(shí) Arthas:Java 開發(fā)者的瑞士軍刀

剛?cè)胄械臅r(shí)候,咱們要是碰到線上問題,那可真是抓耳撓腮。啥問題呢?比如說程序突然卡死了,或者接口響應(yīng)慢得像蝸牛,又或者內(nèi)存泄漏搞得服務(wù)器快撐不住了。這時(shí)候,老鳥們可能會(huì)用一些傳統(tǒng)的工具,像 JConsole、VisualVM 之類的,但是這些工具在面對(duì)復(fù)雜的線上環(huán)境時(shí),有時(shí)候就有點(diǎn)力不從心了。

而 Arthas 呢,就像是 Java 開發(fā)者的一把瑞士軍刀,功能強(qiáng)大到讓人驚嘆。它是阿里巴巴開源的一款 Java 診斷工具,專門針對(duì)線上問題診斷而設(shè)計(jì)。不管是類加載問題、內(nèi)存泄漏、方法調(diào)用追蹤,還是性能分析,它都能輕松搞定。而且,它不需要修改應(yīng)用代碼,也不需要重啟應(yīng)用,直接就能在生產(chǎn)環(huán)境中使用,這對(duì)于咱們來說簡(jiǎn)直就是福音??!

(一)安裝部署:簡(jiǎn)單到讓人懷疑人生

你可別以為這么厲害的工具安裝部署會(huì)很復(fù)雜,那你就大錯(cuò)特錯(cuò)了。Arthas 的安裝簡(jiǎn)直簡(jiǎn)單到飛起。你只需要在服務(wù)器上下載一個(gè) jar 包,然后用 java -jar 命令啟動(dòng)就可以了。就這么簡(jiǎn)單?沒錯(cuò),就是這么簡(jiǎn)單!比如說,你在服務(wù)器的某個(gè)目錄下,執(zhí)行wget https://arthas.aliyun.com/arthas-boot.jar,然后java -jar arthas-boot.jar,接下來就會(huì)列出當(dāng)前運(yùn)行的 Java 進(jìn)程,你選擇你要診斷的進(jìn)程,回車,就進(jìn)入 Arthas 的命令行界面了。就跟玩游戲一樣簡(jiǎn)單,有沒有?

(二)命令行界面:麻雀雖小,五臟俱全

進(jìn)入 Arthas 的命令行界面,你會(huì)發(fā)現(xiàn)它雖然看起來就是一個(gè)簡(jiǎn)單的命令行窗口,但是功能可一點(diǎn)都不少。這里有各種命令,分類清晰,比如基礎(chǔ)命令、JVM 相關(guān)命令、類相關(guān)命令、方法相關(guān)命令、監(jiān)控觀測(cè)命令、診斷命令等等。每個(gè)命令都有詳細(xì)的幫助信息,你只需要輸入命令加上--help,就能查看這個(gè)命令的用法和參數(shù)說明。比如說,你想查看dashboard命令的用法,就輸入dashboard --help,馬上就會(huì)顯示出這個(gè)命令的作用是顯示當(dāng)前系統(tǒng)的實(shí)時(shí)數(shù)據(jù)面板,包括線程、內(nèi)存、GC、CPU 等信息,以及各個(gè)參數(shù)的含義。

二、Arthas 神操作之:類加載問題診斷,讓老鳥刮目相看

在 Java 開發(fā)中,類加載問題是比較常見的,尤其是在使用了類加載器機(jī)制的框架中,比如 Spring Boot、Tomcat 等。類加載問題可能會(huì)導(dǎo)致各種奇怪的現(xiàn)象,比如類找不到、方法不存在、版本沖突等等。這時(shí)候,Arthas 的類相關(guān)命令就派上大用場(chǎng)了。

(一)查看類加載信息:一目了然

當(dāng)你遇到類找不到的問題時(shí),你可以用sc命令(search class)來搜索類的加載信息。比如說,你想查看com.example.UserService這個(gè)類是否被加載,以及它是被哪個(gè)類加載器加載的,你只需要輸入sc com.example.UserService,就會(huì)顯示出這個(gè)類的詳細(xì)信息,包括類名、加載器、加載位置、類的大小等等。如果這個(gè)類沒有被加載,它會(huì)提示找不到;如果被加載了,你就能清楚地看到它的加載情況。

還有一種情況,可能同一個(gè)類被多個(gè)類加載器加載了,這就會(huì)導(dǎo)致版本沖突的問題。這時(shí)候,你可以用sc -d com.example.UserService命令,來查看這個(gè)類的詳細(xì)加載信息,包括類加載器的 hash 值、類加載器的名稱等等。通過這些信息,你就能判斷是不是因?yàn)轭惣虞d器的問題導(dǎo)致的類沖突。

(二)查看類字節(jié)碼:追根溯源

有時(shí)候,你可能會(huì)懷疑自己修改的代碼沒有生效,或者想查看某個(gè)類在運(yùn)行時(shí)的字節(jié)碼到底是什么樣的。這時(shí)候,Arthas 的jad命令(反編譯)就可以幫你解決這個(gè)問題。你只需要輸入jad com.example.UserService,就會(huì)將這個(gè)類的字節(jié)碼反編譯成 Java 代碼,顯示在命令行界面中。你可以對(duì)比你編寫的代碼和反編譯出來的代碼,看看是不是一致的,從而判斷是不是代碼沒有正確部署或者類加載有問題。

比如說,你在開發(fā)環(huán)境中修改了UserService類的一個(gè)方法,但是部署到生產(chǎn)環(huán)境后,發(fā)現(xiàn)效果不對(duì)。這時(shí)候,你用jad命令反編譯生產(chǎn)環(huán)境中的UserService類,看看是不是你修改后的代碼,如果不是,那就可能是部署過程中出現(xiàn)了問題,比如打包錯(cuò)誤、部署的不是最新的包等等。

(三)重新加載類:無需重啟應(yīng)用

如果發(fā)現(xiàn)類加載有問題,比如類的版本不對(duì),這時(shí)候你可能需要重新加載類。傳統(tǒng)的做法是重啟應(yīng)用,但是在生產(chǎn)環(huán)境中,重啟應(yīng)用可是一件大事,可能會(huì)影響用戶的使用。而 Arthas 提供了redefine命令,可以在不重啟應(yīng)用的情況下,重新加載指定的類。

你需要先將正確的類文件上傳到服務(wù)器上,然后使用redefine命令加載這個(gè)類文件。比如說,你上傳了UserService.class到/tmp目錄下,然后輸入redefine /tmp/UserService.class,Arthas 就會(huì)重新加載這個(gè)類,新的類定義會(huì)立即生效。不過需要注意的是,redefine命令有一些限制,比如不能修改類的方法簽名、不能新增或刪除方法等,但是對(duì)于一般的代碼修復(fù)來說,已經(jīng)足夠用了。

三、Arthas 神操作之:方法調(diào)用追蹤,讓老鳥望塵莫及

在排查問題時(shí),方法調(diào)用追蹤是非常重要的一環(huán)。我們需要知道一個(gè)方法是怎么被調(diào)用的,調(diào)用過程中傳遞了什么參數(shù),各個(gè)子方法的調(diào)用耗時(shí)是多少,有沒有異常發(fā)生等等。Arthas 的方法相關(guān)命令可以讓我們輕松地追蹤方法的調(diào)用情況。

(一)追蹤方法調(diào)用路徑:層層遞進(jìn)

trace命令是 Arthas 中非常強(qiáng)大的一個(gè)方法追蹤命令,它可以追蹤方法的調(diào)用路徑和各個(gè)子方法的調(diào)用耗時(shí)。比如說,你想追蹤com.example.UserService.getUserById方法的調(diào)用情況,看看它在調(diào)用過程中調(diào)用了哪些其他方法,每個(gè)方法調(diào)用花了多長(zhǎng)時(shí)間,你只需要輸入trace com.example.UserService getUserById,然后觸發(fā)這個(gè)方法的調(diào)用,Arthas 就會(huì)顯示出詳細(xì)的調(diào)用路徑和耗時(shí)信息。

在顯示的結(jié)果中,你可以看到每個(gè)方法的調(diào)用層級(jí)、方法名、參數(shù)、返回值、耗時(shí)等信息。通過這些信息,你可以很容易地找到調(diào)用過程中耗時(shí)較長(zhǎng)的方法,或者出現(xiàn)異常的方法,從而定位問題所在。比如說,如果發(fā)現(xiàn)getUserById方法在調(diào)用dao.getUser方法時(shí)耗時(shí)特別長(zhǎng),那可能就是數(shù)據(jù)庫(kù)查詢有問題,需要優(yōu)化 SQL 語(yǔ)句或者增加索引。

(二)查看方法入?yún)⒑头祷刂担杭?xì)節(jié)決定成敗

有時(shí)候,我們需要查看方法的入?yún)⑹欠裾_,或者返回值是否符合預(yù)期。這時(shí)候,Arthas 的watch命令就可以派上用場(chǎng)了。watch命令可以監(jiān)控方法的調(diào)用,查看入?yún)?、返回值、異常信息等?/p>

比如說,你想查看com.example.UserService.saveUser方法的入?yún)ⅲ纯磦鬟f的用戶對(duì)象是否正確,你可以輸入watch com.example.UserService saveUser {params, returnObj},其中params表示入?yún)?,returnObj表示返回值。當(dāng)這個(gè)方法被調(diào)用時(shí),Arthas 就會(huì)顯示出入?yún)⒌木唧w內(nèi)容和返回值。如果發(fā)現(xiàn)入?yún)⒂姓`,那就可以追溯到調(diào)用這個(gè)方法的上層代碼,看看是不是參數(shù)傳遞錯(cuò)誤。

另外,你還可以通過-e參數(shù)來監(jiān)控方法拋出的異常,比如watch com.example.UserService saveUser {params, throwExp},這樣當(dāng)方法拋出異常時(shí),就會(huì)顯示出異常信息,方便你排查異常原因。

(三)統(tǒng)計(jì)方法調(diào)用次數(shù)和耗時(shí):數(shù)據(jù)說話

count命令可以統(tǒng)計(jì)方法的調(diào)用次數(shù),tt命令(time tunnel)可以記錄方法的調(diào)用信息,包括入?yún)?、返回值、耗時(shí)等,并可以對(duì)這些信息進(jìn)行分析。

比如說,你想知道在一段時(shí)間內(nèi),com.example.UserService.getUserList方法被調(diào)用了多少次,你可以輸入count com.example.UserService getUserList,Arthas 就會(huì)實(shí)時(shí)統(tǒng)計(jì)調(diào)用次數(shù)。而tt命令則更加強(qiáng)大,它可以為每次方法調(diào)用生成一個(gè)唯一的編號(hào),你可以通過這個(gè)編號(hào)來查看某次具體調(diào)用的詳細(xì)信息,甚至可以重新調(diào)用這個(gè)方法(回放),這對(duì)于重現(xiàn)問題非常有幫助。

比如,線上出現(xiàn)了一個(gè)偶爾發(fā)生的異常,你可以用tt命令記錄saveUser方法的調(diào)用,當(dāng)異常發(fā)生時(shí),通過編號(hào)找到對(duì)應(yīng)的調(diào)用記錄,查看當(dāng)時(shí)的入?yún)?、返回值和異常信息,從而分析出異常發(fā)生的原因。

四、Arthas 神操作之:性能分析,讓老鳥甘拜下風(fēng)

性能問題是每個(gè)開發(fā)者都必須面對(duì)的問題,尤其是在高并發(fā)的場(chǎng)景下,一點(diǎn)點(diǎn)性能瓶頸都可能導(dǎo)致系統(tǒng)崩潰。Arthas 在性能分析方面也有很多神操作,能夠幫助我們快速定位性能瓶頸。

(一)查看系統(tǒng)實(shí)時(shí)數(shù)據(jù):全局把控

前面提到的dashboard命令,就是一個(gè)非常好用的實(shí)時(shí)數(shù)據(jù)面板,它可以顯示當(dāng)前系統(tǒng)的各種實(shí)時(shí)數(shù)據(jù),包括線程、內(nèi)存、GC、CPU 等信息。通過這個(gè)面板,你可以快速了解系統(tǒng)的整體運(yùn)行狀況,比如 CPU 使用率是不是過高,內(nèi)存是不是快滿了,GC 是不是頻繁發(fā)生等等。

比如說,當(dāng)你發(fā)現(xiàn) CPU 使用率長(zhǎng)時(shí)間在 90% 以上,那就需要進(jìn)一步分析是哪個(gè)線程占用了大量的 CPU 資源。這時(shí)候,你可以結(jié)合thread命令來查看各個(gè)線程的詳細(xì)信息。

(二)定位 CPU 占用高的線程:精準(zhǔn)打擊

thread命令可以查看當(dāng)前 JVM 中的線程信息,包括線程 ID、狀態(tài)、CPU 占用率、線程名稱等。當(dāng)你發(fā)現(xiàn) CPU 使用率過高時(shí),可以先用top命令在服務(wù)器上找到占用 CPU 高的 Java 進(jìn)程,然后進(jìn)入 Arthas,使用thread命令查看該進(jìn)程下各個(gè)線程的 CPU 占用情況。

比如,找到 CPU 占用率最高的線程 ID(假設(shè)是 1234),然后輸入thread 1234,就可以查看這個(gè)線程的堆棧信息,看看它在執(zhí)行什么代碼,是不是在某個(gè)循環(huán)中不斷執(zhí)行,或者在等待某個(gè)鎖,從而定位到性能瓶頸所在的代碼位置。

(三)分析方法執(zhí)行耗時(shí):有的放矢

除了前面提到的trace命令可以分析方法的調(diào)用耗時(shí)外,Arthas 還有profiler命令可以對(duì)方法的執(zhí)行耗時(shí)進(jìn)行統(tǒng)計(jì)和分析。profiler命令可以生成方法的耗時(shí)火焰圖,讓你更直觀地看到各個(gè)方法的耗時(shí)情況。

你只需要輸入profiler start開始 profiling,然后觸發(fā)你要分析的業(yè)務(wù)操作,完成后輸入profiler stop,Arthas 就會(huì)生成一個(gè)火焰圖,顯示各個(gè)方法的調(diào)用關(guān)系和耗時(shí)比例。通過火焰圖,你可以很容易地看出哪個(gè)方法是最耗時(shí)的,哪個(gè)方法調(diào)用層級(jí)最深,從而有針對(duì)性地進(jìn)行優(yōu)化。

五、Arthas 神操作之:內(nèi)存問題排查,讓老鳥無話可說

內(nèi)存泄漏、內(nèi)存溢出是 Java 應(yīng)用中常見的問題,這些問題會(huì)導(dǎo)致系統(tǒng)性能下降,甚至崩潰。Arthas 在內(nèi)存問題排查方面也有很多實(shí)用的功能。

(一)查看內(nèi)存使用情況:心中有數(shù)

heapdump命令可以生成堆轉(zhuǎn)儲(chǔ)文件,然后你可以用 MAT(Eclipse Memory Analyzer)等工具來分析堆轉(zhuǎn)儲(chǔ)文件,查找內(nèi)存泄漏的原因。不過,在 Arthas 中,你也可以通過一些命令來初步查看內(nèi)存的使用情況。

比如,sc -a命令可以查看所有加載的類的實(shí)例數(shù)量和占用的內(nèi)存大小,object命令可以查看對(duì)象的詳細(xì)信息,包括對(duì)象的引用鏈等。通過這些命令,你可以快速定位到占用內(nèi)存較多的類或?qū)ο?,從而進(jìn)一步分析是否存在內(nèi)存泄漏。

(二)追蹤對(duì)象創(chuàng)建:順藤摸瓜

當(dāng)你發(fā)現(xiàn)某個(gè)類的實(shí)例數(shù)量異常多,可能存在內(nèi)存泄漏時(shí),你可以用watch命令來追蹤該類的構(gòu)造方法,查看對(duì)象是在哪里被創(chuàng)建的。比如說,你想追蹤com.example.User類的創(chuàng)建情況,你可以輸入watch com.example.User  '{params, ognl:ognl.getStack()}',這樣當(dāng)創(chuàng)建User對(duì)象時(shí),就會(huì)顯示出構(gòu)造方法的入?yún)⒑驼{(diào)用堆棧,你可以通過調(diào)用堆棧找到對(duì)象創(chuàng)建的源頭,看看是不是在某個(gè)循環(huán)中不斷創(chuàng)建對(duì)象而沒有釋放,或者存在不合理的對(duì)象引用。

(三)查看 GC 情況:知己知彼

gc命令可以查看 GC 的相關(guān)信息,包括 GC 的次數(shù)、耗時(shí)、各個(gè)內(nèi)存區(qū)域的使用情況等。通過gcutil命令,你可以實(shí)時(shí)查看 GC 的利用率,比如年輕代、老年代的內(nèi)存占用率,GC 的耗時(shí)比例等。如果發(fā)現(xiàn) GC 頻繁發(fā)生,或者耗時(shí)過長(zhǎng),那就需要分析是不是內(nèi)存分配不合理,或者存在大量的臨時(shí)對(duì)象沒有被及時(shí)回收。

六、3 年經(jīng)驗(yàn)如何靠 Arthas 碾壓 5 年老鳥?

看到這里,可能有些小伙伴會(huì)問,雖然 Arthas 功能很強(qiáng)大,但是 5 年老鳥難道不知道這些嗎?其實(shí),很多 5 年老鳥可能一直在用傳統(tǒng)的工具和方法,對(duì) Arthas 這樣的新興工具接觸較少。而作為 3 年經(jīng)驗(yàn)的開發(fā)者,如果你能熟練掌握 Arthas 的各種神操作,在排查問題時(shí)就能更加高效、精準(zhǔn),甚至在一些復(fù)雜的線上問題處理中,比老鳥更快地定位和解決問題,自然就能讓老鳥刮目相看。

(一)快速定位問題:時(shí)間就是金錢

在實(shí)際工作中,遇到線上問題時(shí),時(shí)間是非常寶貴的。老鳥可能需要花費(fèi)大量的時(shí)間去收集日志、分析日志,或者使用傳統(tǒng)工具一步步排查。而你掌握了 Arthas,可以在短時(shí)間內(nèi)通過各種命令快速定位到問題所在,比如用trace命令追蹤方法調(diào)用路徑,用thread命令定位 CPU 占用高的線程,用watch命令查看方法的入?yún)⒑头祷刂档鹊?。這樣就能在第一時(shí)間解決問題,減少問題對(duì)系統(tǒng)和用戶的影響,這種高效的工作能力可是很受領(lǐng)導(dǎo)和同事認(rèn)可的哦!

(二)深入分析問題:細(xì)節(jié)決定成敗

Arthas 不僅能幫你定位問題,還能讓你深入分析問題的本質(zhì)。比如,通過反編譯類字節(jié)碼,你可以查看代碼在運(yùn)行時(shí)的實(shí)際邏輯,判斷是不是代碼邏輯錯(cuò)誤;通過追蹤對(duì)象的創(chuàng)建和引用鏈,你可以分析內(nèi)存泄漏的原因;通過生成火焰圖,你可以直觀地看到方法的耗時(shí)情況,從而進(jìn)行有針對(duì)性的性能優(yōu)化。這些深入的分析能力,能讓你對(duì)問題的理解更加深刻,解決問題的方案更加合理,而不是僅僅停留在表面現(xiàn)象的處理上。

(三)提升自身能力:不斷學(xué)習(xí)進(jìn)步

掌握 Arthas 的過程,也是你不斷學(xué)習(xí)和提升自己技術(shù)能力的過程。Arthas 涉及到 Java 的類加載機(jī)制、線程管理、內(nèi)存管理、性能優(yōu)化等多個(gè)方面的知識(shí),在使用 Arthas 的過程中,你會(huì)不自覺地去了解這些底層知識(shí),從而提升自己的技術(shù)深度。而且,Arthas 的社區(qū)非?;钴S,不斷有新的功能和特性推出,你可以通過學(xué)習(xí)和使用這些新功能,保持自己的技術(shù)敏銳度,跟上技術(shù)發(fā)展的步伐。

七、總結(jié):Arthas,讓你彎道超車的神器

說了這么多 Arthas 的神操作,相信大家已經(jīng)對(duì)它有了一定的了解。它真的是一個(gè)非常強(qiáng)大的 Java 診斷工具,能夠幫助我們?cè)陂_發(fā)和運(yùn)維過程中解決各種復(fù)雜的問題。作為 3 年經(jīng)驗(yàn)的開發(fā)者,如果你能熟練掌握 Arthas,在面對(duì)線上問題時(shí)就能更加從容不迫,處理問題的效率和質(zhì)量也會(huì)大大提升,從而在技術(shù)能力上實(shí)現(xiàn)彎道超車,碾壓 5 年老鳥也不是不可能的事情。

當(dāng)然,Arthas 的功能遠(yuǎn)不止本文介紹的這些,還有很多實(shí)用的命令和技巧等待你去探索和發(fā)現(xiàn)。比如tt命令的回放功能、mc和redefine命令結(jié)合實(shí)現(xiàn)代碼熱替換、dashboard命令的自定義擴(kuò)展等等。希望大家能夠親自去實(shí)踐,多在實(shí)際項(xiàng)目中使用 Arthas,讓它成為你開發(fā)路上的好幫手。


責(zé)任編輯:武曉燕 來源: 石杉的架構(gòu)筆記
相關(guān)推薦

2013-07-17 09:13:19

2012-07-31 09:19:02

程序員

2021-08-08 11:10:23

Kubernetes工具容器

2010-07-29 11:04:09

跳槽

2010-02-26 10:22:11

IPv4

2019-09-18 15:00:18

電腦硬件內(nèi)存

2021-03-22 17:04:57

手機(jī)iPhone安卓

2022-05-27 12:20:18

微信智能手機(jī)

2009-03-19 10:40:02

職業(yè)分析經(jīng)驗(yàn)行業(yè)

2025-03-28 12:20:00

代碼C#異步編程

2012-11-05 13:55:21

Windows 8

2022-02-16 09:55:39

Elastic 8開源索引

2023-04-23 13:30:19

ERP廠商華為

2018-01-19 10:23:02

前端Web工作經(jīng)驗(yàn)

2019-12-16 09:38:07

人工智能機(jī)器學(xué)習(xí)技術(shù)

2020-05-14 09:50:24

前端業(yè)務(wù)團(tuán)隊(duì)

2015-08-26 11:29:53

程序員

2020-09-22 07:48:19

AI

2019-12-05 14:07:53

人工智能AI自動(dòng)駕駛

2024-06-26 09:59:55

登錄注冊(cè)系統(tǒng)程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)