阿里巴巴開源性能監控神器Arthas

線上經常遇到MQ消費速度忽高忽低,但是線下測試卻沒有問題。那會是哪一個問題引起的呢?因爲影響MQ消費速度的因素太多了,如下因素只要任何一種出現問題,就會影響MQ消費速度。

  1. JVM內存過高,一直在Full GC。
  2. Redis連接堵塞,導致Redis操作一直延遲。
  3. 第三方接口響應時間過長。
  4. 服務器cpu/帶寬/IO受限。
  5. Mysql出現慢sql,查詢過慢。
  6. 程序本身問題(例如異常循環)。

解決方案:

爲了排除具體原因,但是線上又不能進行錯誤調式,所以博主只能用最笨的辦法,每一行關鍵代碼,都寫上log日誌,然後通過輸出每一行代碼的執行時間,來確定到底是哪裏出錯。

方案問題:

但是打印日誌的方式需要修改代碼,有一定的風險,修改完又需要重新發布才能生效。最重要的是,MQ消費需要跑大量的數據,大部分數據都是正常的,少部分數據是異常的,針對於這種情況,打印日誌的方式就很難發現問題點。

尋求更優解:

那到底有沒有這麼一個工具可以不用修改任何代碼,就可以排查線上問題呢?今天就給大家推送一款神器Arthas,這是阿里巴巴開源的一款性能監控工具。

image

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

  1. 這個類從哪個 jar 包加載的?爲什麼會報各種類相關的 Exception?
  2. 我改的代碼爲什麼沒有執行到?難道是我沒 commit?分支搞錯了?
  3. 遇到問題無法在線上 debug,難道只能通過加日誌再重新發布嗎?
  4. 線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!
  5. 是否有一個全局視角來查看系統的運行狀況?
  6. 有什麼辦法可以監控到JVM的實時運行狀態?

Arthas入門:

Arthas本質其實就是一個jar包,所以只需要去官網下載對應的jar就可以了,然後通過java -jar的方式啓動,例如:

1
2
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar

啓動成功之後可以看到Arthas啓動標誌,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[INFO] Try to attach process 71560
[INFO] Attach process 71560 success.
[INFO] arthas-client connect 127.0.0.1 3658
  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.
 /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'
 
wiki: https://alibaba.github.io/arthas
version: 3.0.5.20181127201536
pid: 71560
time: 2018-11-28 19:16:24
$

Arthas也提供了Docker模式下的監控,我們只需要在DockerFile中增加如下代碼,就可以嵌入Arthas了。

1
2
# copy arthas
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas

MQ消費過慢終極解決方案:

針對於上面提出的問題,MQ消費速度過慢,我們可以採用trace命令來解決,例如我們可以輸入:

1
trace -j com.fourkmiles.advertisement.service.impl.CampaignsV2ApiMethodServicelmpl getSearchTermReport '#cost > 1000'

這個命令的意思是,CampaignsV2ApiMethodServicelmpl類的getSearchTermReport方法中,打印出執行時間超過1000的方法。

如下圖所示,它可以打印這個方法中每一行代碼所花費的時間。

image

它還可以監測:線程、jvm、方法、方法執行路徑、服務運行情況、反編譯代碼、獲取方法返回值等功能,Arthas都給我們提供了方便的命令來查詢這些指標。

image

總結:

總體來說Arthas功能還是非常強大的,對應線上bug排查可謂雪中送炭。但是Arthas本質還是一個jar服務,所以對服務器是有一定性能損耗的,在不監控的時候一定要關閉Arthas對應的服務。

官網地址https://alibaba.github.io/arthas/install-detail.html

想要更多幹貨、技術猛料的孩子,快點拿起手機掃碼關注我,我在這裏等你哦~

林老師帶你學編程https://wolzq.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章