Java分析神器 - Arthas

Arthas 簡介

Arthas 是Alibaba開源的Java診斷工具,深受開發者喜好。html

Arthas 支持 JDK 6+,支持 LinuxMacWindows,採用命令行交互模式,同時提供豐富的 Tab 自動補全功能,進一步方便進行問題的定位和診斷。java

Arthas 能幫你解決的問題

  • 一、這個類從哪一個 jar 包加載的?爲何會報各類類相關的 Exception?
  • 二、我改的代碼爲何沒有執行到?難道是我沒 commit?分支搞錯了?
  • 三、遇到問題沒法在線上 debug,難道只能經過加日誌再從新發布嗎?
  • 四、線上遇到某個用戶的數據處理有問題,但線上一樣沒法 debug,線下沒法重現!
  • 五、是否有一個全局視角來查看系統的運行情況?
  • 六、有什麼辦法能夠監控到JVM的實時運行狀態?
  • 七、怎麼快速定位應用的熱點,生成火焰圖?

Arthas 安裝

使用 as.sh

Arthas 支持在 Linux/Unix/Mac 等平臺上一鍵安裝,請複製如下內容,並粘貼到命令行中,敲 回車 執行便可:git

$ curl -L https://alibaba.github.io/arthas/install.sh | sh

上述命令會下載啓動腳本文件 as.sh當前目錄,你能夠放在任何地方或將其加入到 $PATH 中。github

直接在shell下面執行 ./as.sh ,就會進入交互界面。web

也能夠執行 ./as.sh -h 來獲取更多參數信息。docker

手動安裝

經過 rpm/deb 來安裝shell

在releases頁面下載rpm/deb包:https://github.com/alibaba/arthas/releasesbash

# 安裝deb
$ sudo dpkg -i arthas*.deb

# 安裝rpm
$ sudo rpm -i arthas*.rpm

# deb/rpm安裝的用法,在安裝後,能夠直接執行
$ as.sh

啓動 Arthas

在命令行下面執行(使用和目標進程一致的用戶啓動,不然可能attach失敗):微信

$ curl -O https://alibaba.github.io/arthas/arthas-boot.jar
$ java -jar arthas-boot.jar
  • 執行該程序的用戶須要和目標進程具備相同的權限。好比以admin用戶來執行: sudo su admin && java -jar arthas-boot.jarsudo -u admin -EH java -jar arthas-boot.jar
  • 若是attach不上目標進程,能夠查看 ~/logs/arthas/ 目錄下的日誌。
  • 若是下載速度比較慢,可使用aliyun的鏡像: java -jar arthas-boot.jar --repo-mirror aliyun --use-http
  • java -jar arthas-boot.jar -h 打印更多參數信息。

選擇應用java進程:網絡

$ $ java -jar arthas-boot.jar

* [1]: 35542
  [2]: 71560 arthas-demo.jar

Demo進程是第2個,則輸入2,再輸入 回車/enter。Arthas會attach到目標進程上,並輸出日誌:

[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

$

Dashboard

# 在上面基礎環境中執行 dashboard 命令
$ dashboard

在線演示

  • 基礎教程:https://alibaba.github.io/arthas/arthas-tutorials?language=cn&id=arthas-basics
  • 進階教程:https://alibaba.github.io/arthas/arthas-tutorials?language=cn&id=arthas-advanced

基於 Docker 診斷 Java 進程

診斷 Docker 裏的 Java 進程

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

診斷 k8s 裏容器裏的 Java 進程

$ kubectl exec -it ${pod} --container ${containerId} -- /bin/bash -c "wget https://alibaba.github.io/arthas/arthas-boot.jar && java -jar arthas-boot.jar"

把 Arthas 打包到基礎鏡像裏

FROM openjdk:8-jdk-alpine

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

若是想指定版本,能夠查看具體的tags:https://hub.docker.com/r/hengyunabc/arthas/tags

總結

Arthas 是一個強大的 Java 診斷工具,能夠分析 Java 代碼bug帶來的資源消耗等問題。

Arthas 詳細使用方法,公衆號後臺回覆 Arthas 獲取Arthas詳細參數思惟導圖。

Golang 微服務 1元 輕鬆購買

參考連接

  • Arthas 快速入門 https://alibaba.github.io/arthas/quick-start.html
  • https://github.com/alibaba/arthas/blob/master/README_CN.md

熱門文章推薦

最後

  • 歡迎您加我微信【 ypxiaozhan01】,拉您進技術羣,一塊兒交流學習...
  • 歡迎您關注【 YP小站】,學習互聯網最流行的技術,作個專業的技術人...

  【文章讓您有收穫,點個 在看 支持我吧】

本文分享自微信公衆號 - YP小站(ypxiaozhan)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索