最近有不少小伙伴私信小編,問小編能不能講一個Java開發(fā)中常用的診斷工具。你們知道,小編是很寵大家的。所以,今天就帶大家來學習一下我們在日常工作中常用的診斷工具,Arthas(阿爾薩斯)。
一.現(xiàn)有問題
在我們的日常開發(fā)中,如果在代碼中遇到問題,我們可以使用DEBUG進行調(diào)試,追蹤方法的執(zhí)行過程,查看參數(shù)及返回值和報錯信息等,并可以進行定位和解決問題。
但如果是在服務器上,或者是在進行前后端聯(lián)調(diào)、預發(fā)及線上,沒有IDE的環(huán)境,我們遇到了問題,又如何排查定位問題呢?
有的小伙伴會說,我們可以查看線上的項目日志!但如果是數(shù)據(jù)有問題呢?日志文件中也不可能全部都有記錄。
另外如果某個接口執(zhí)行過慢,該如何定位是哪個服務?哪個方法?那行代碼的問題?處于整個請求鏈中哪一環(huán)?
有的小伙伴會說,可以在每個方法中都添加AOP切面,使用StopWatch來記錄時間。但這就需要修改代碼了,不方便!
有時代碼明明修改了,但運行的結果卻還是舊的,代碼修復后似乎沒有生效怎么辦?
我們查看線上的倉庫代碼,發(fā)現(xiàn)代碼確實是新的,但執(zhí)行的似乎是舊的代碼?如何確定運行的代碼不一致?
或者現(xiàn)在線上出現(xiàn)了緊急問題,但又不能或沒有權限立即上線更新,這該如何立即處理?
雖然Python、PHP等腳本語言可以直接修改線上代碼,但Java如何做到熱更新呢?
以上這些問題,想想都很頭疼,如果你不知道該怎么解決,到了公司里面真的很難混的下去哦。
所以針對上面的問題,小編要給大家介紹一款解決這些問題的利器--Arthas!那么Arthas具體能做什么呢?
二.Arthas概述
Arthas是Alibaba開源的Java診斷工具,也是目前最火的診斷工具之一。當我們遇到以下類似問題而束手無策時,Arthas都可以幫我們解決:
這個類是從哪個 jar包加載的?為什么會產(chǎn)生與各種類相關的 Exception?
我修改的代碼為什么沒有執(zhí)行?難道是我沒 commit?分支搞錯了?
遇到問題無法在線上debug,難道只能通過加日志查看再重新發(fā)布嗎?
線上遇到某個用戶的數(shù)據(jù)處理有問題,但線上同樣無法debug,線下無法重現(xiàn)!
是否有一個全局視角來查看系統(tǒng)的運行狀況?
有什么辦法可以監(jiān)控到JVM的實時運行狀態(tài)?
怎么快速定位應用的熱點,生成火焰圖?
怎樣直接從JVM內(nèi)查找某個類的實例?
Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同時提供了豐富的 Tab 自動補全功能,方便進行問題的定位和診斷。
總之一句話:簡單,好用,用俺們河南話就是得勁,真中!
三.Arthas能做什么