天天看點

Arthas 使用的各類方式方案介紹總結

Arthas 使用的各類方式方案介紹總結

作者 | Montos(一個在後端道路上摸爬滾打的内卷人)

來源|

阿裡巴巴雲原生公衆号

Arthas 是阿裡巴巴開源的 Java 診斷工具。讓我們能夠線上排查項目發生的問題。除了知道它的存在之外,我們也需要知道我們如何去安裝使用它,以便于提高我們日常開發解決 BUG 的效率。

方案介紹

方案一:本地直接運作

往往最簡單的方法實際是最有效的,它本身就是一個可運作的程式,是以我們可以直接運作即可。

  • 我們可以直接通過官網下載下傳對應的 jar,然後運作再進行 jar,執行對應的指令。
  • 指令如下:
java -jar arthas-boot.jar [option]           
  • 示範如下:
Arthas 使用的各類方式方案介紹總結

方案二:Web Console實作

我們可以不通過每次進入 ssh 中進行執行程式,我們也可通過 web 方式進行通路操作.通過官網上面的介紹 arthas 的 Web Console,能了解到大緻的搭建思路。

  • 通過下載下傳 arthas-tunnel-server。我們可以拿到對應的 arthas 的 server 端。下載下傳完畢之後直接運作即可(我是将其在 ECS 上直接運作)。
Arthas 使用的各類方式方案介紹總結
  • 在用戶端對應的啟動 arthas-boot。并且通過啟動參數附加上 server 的位址(我是将其在本地運作)。
Arthas 使用的各類方式方案介紹總結
  • 選擇對應的程序進行 attach,會出現對應的 agent-id,再将其填寫到對應的 server 端 http 頁面中。
Arthas 使用的各類方式方案介紹總結
Arthas 使用的各類方式方案介紹總結
  • 最後我們就可以再 server 端進行操作,即 Web Console 實作完成。
Arthas 使用的各類方式方案介紹總結

方案三:項目依賴

基于 Spring 相關搭建的項目直接加入依賴(需要對應的環境支援,例如不能缺少 tools.jar)。
  • SpringBoot 項目依賴:
<dependency>
            <groupId>com.taobao.arthas</groupId>
            <artifactId>arthas-spring-boot-starter</artifactId>
            <version>${arthas.version}</version>
        </dependency>           
  • 非 SpringBoot 項目依賴:
<dependency>
            <groupId>com.taobao.arthas</groupId>
            <artifactId>arthas-agent-attach</artifactId>
            <version>${arthas.version}</version>
        </dependency>
        <dependency>
            <groupId>com.taobao.arthas</groupId>
            <artifactId>arthas-packaging</artifactId>
            <version>${arthas.version}</version>
        </dependency>           
  • 本地項目啟動之後可以直接通路:
http://127.0.0.1:3658/           
  • 當然還可以結合上面介紹的 Web Console。例如配置檔案中增加對應的配置資訊:
arthas.agent-id=qwejqjnnnunnq
arthas.tunnel-server=ws://server位址:7777/ws           
  • 示範如下:
Arthas 使用的各類方式方案介紹總結
Arthas 使用的各類方式方案介紹總結
Arthas 使用的各類方式方案介紹總結

以上步驟就是先把 tunnel-server 啟動,然後本地配置連接配接 tunnel-server。然後輸入配置的 Id,即可完成對應的調試。

方案四:容器配置

基于 docker 配置,目前上容器服務的企業不在少數。對于容器服務,也是可以适用的。将 jar 下載下傳下來之後進行 ADD 操作,或者每次通過建構 Dockerfile 則會産生對應含有 arthas 的鏡像檔案。

這裡介紹下通過 Dockerfile 進行建構:

FROM openjdk:8-jdk-alpine
ADD target/*.jar app.jar
# copy arthas
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas
RUN apk add --no-cache tini
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
MAINTAINER Montos [email protected]           

上述是通過建構 Dockerfile 來完成的,這裡就直接将鏡像檔案貼出來,這裡是将目前 arthas 中的檔案複制到對應的容器中,之後我們可以通過 exec -it 進入執行,步驟和方法一類似。

總結

通過上面的介紹,其實我更推薦使用 Web 接入的方式更好,原因如下:

  • 在服務直接部署在伺服器上或者 ECS 雲伺服器情況下。我們可以直接運作在對應的 client 端,但是我們如何上到各個服務所在的伺服器上?通過跳闆機?那麼我們是不是操作的時候會有可能對應伺服器造成影響,直接連接配接伺服器上是肯定不行的。
  • 服務在所運作的 pod 情況下。此時讓你連接配接服務是影響是比上面的情況會小很多,如果發生影響也隻是影響到目前運作的 pod。但是如果你想直接連接配接 pod,那麼需要的将對應的 pod 端口需要映射到對應的主控端上,然後再提供外部通路 ecs 的連結。這樣會使得每次 pod 需要映射出去的端口需要一定的規則,無疑是加大了運維等工作,運作則也消耗了目前的資源(通路頁面等等則走 http 接口請求,如果通過 ws 連接配接,減少 7 層方面消耗)。
  • 如果通過上述方法,那麼我們可以再一台機器上運作 server 即可,我們每次通路都通過通路 server 去連接配接到到對應的 client 端,同時對應的 agent-id 可以指定,我們可以每次 pod 進行 client 運作的時候指定目前的 agent-id,讓其與目前的 pod 進行一個綁定,便于我們通過 server 進行連接配接。

當然上述觀點仁者見仁智者見智。以上介紹了幾種部署以及運作 arthas 的方法,企業可以根據目前的項目架構選擇合适的部署進行解決。為什麼需要????就因為能幫助開發解決問題,不需要來回發版!

歡迎登陸 start.aliyun.com 知行動手實驗室體驗 Arthas 57 個動手實驗:

https://start.aliyun.com/handson-lab/#!category=arthas
Arthas 使用的各類方式方案介紹總結

Arthas 實驗預覽

為了讓更多開發者開始用上 Arthas 這個 Java 診斷神器,Arthas 社群聯合 JetBrains 推出 

Arthas 有獎征文活動

:聊聊這些年你和 Arthas 之間的那些事兒。活動仍在火熱進行中,

點選即可參與

,歡迎大家踴躍投稿,參與即有可能獲獎!