Arthas 使用的各类方式
作者 | Montos(一個(gè)在后端道路上摸爬滾打的內(nèi)卷人)
來源|阿里巴巴云原生公眾號(hào)
Arthas 是阿里巴巴開源的 Java 診斷工具。讓我們能夠在線排查項(xiàng)目發(fā)生的問題。除了知道它的存在之外,我們也需要知道我們?nèi)绾稳グ惭b使用它,以便于提高我們?nèi)粘i_發(fā)解決 BUG 的效率。
方案介紹
方案一:本地直接運(yùn)行
往往最簡(jiǎn)單的方法實(shí)際是最有效的,它本身就是一個(gè)可運(yùn)行的程序,所以我們可以直接運(yùn)行即可。
-
我們可以直接通過官網(wǎng)下載對(duì)應(yīng)的 jar,然后運(yùn)行再進(jìn)行 jar,執(zhí)行對(duì)應(yīng)的命令。
-
命令如下:
- 演示如下:
方案二:Web Console實(shí)現(xiàn)
我們可以不通過每次進(jìn)入 ssh 中進(jìn)行執(zhí)行程序,我們也可通過 web 方式進(jìn)行訪問操作.通過官網(wǎng)上面的介紹 arthas 的 Web Console,能了解到大致的搭建思路。
- 通過下載 arthas-tunnel-server。我們可以拿到對(duì)應(yīng)的 arthas 的 server 端。下載完畢之后直接運(yùn)行即可(我是將其在 ECS 上直接運(yùn)行)。
- 在客戶端對(duì)應(yīng)的啟動(dòng) arthas-boot。并且通過啟動(dòng)參數(shù)附加上 server 的地址(我是將其在本地運(yùn)行)。
- 選擇對(duì)應(yīng)的進(jìn)程進(jìn)行 attach,會(huì)出現(xiàn)對(duì)應(yīng)的 agent-id,再將其填寫到對(duì)應(yīng)的 server 端 http 頁面中。
- 最后我們就可以再 server 端進(jìn)行操作,即 Web Console 實(shí)現(xiàn)完成。
方案三:項(xiàng)目依賴
基于 Spring 相關(guān)搭建的項(xiàng)目直接加入依賴(需要對(duì)應(yīng)的環(huán)境支持,例如不能缺少 tools.jar)。
- SpringBoot 項(xiàng)目依賴:
- 非 SpringBoot 項(xiàng)目依賴:
- 本地項(xiàng)目啟動(dòng)之后可以直接訪問:
- 當(dāng)然還可以結(jié)合上面介紹的 Web Console。例如配置文件中增加對(duì)應(yīng)的配置信息:
- 演示如下:
以上步驟就是先把 tunnel-server 啟動(dòng),然后本地配置連接 tunnel-server。然后輸入配置的 Id,即可完成對(duì)應(yīng)的調(diào)試。
方案四:容器配置
基于 docker 配置,目前上容器服務(wù)的企業(yè)不在少數(shù)。對(duì)于容器服務(wù),也是可以適用的。將 jar 下載下來之后進(jìn)行 ADD 操作,或者每次通過構(gòu)建 Dockerfile 則會(huì)產(chǎn)生對(duì)應(yīng)含有 arthas 的鏡像文件。
這里介紹下通過 Dockerfile 進(jìn)行構(gòu)建:
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 1367654518@qq.com上述是通過構(gòu)建 Dockerfile 來完成的,這里就直接將鏡像文件貼出來,這里是將當(dāng)前 arthas 中的文件復(fù)制到對(duì)應(yīng)的容器中,之后我們可以通過 exec -it 進(jìn)入執(zhí)行,步驟和方法一類似。
總結(jié)
通過上面的介紹,其實(shí)我更推薦使用 Web 接入的方式更好,原因如下:
-
在服務(wù)直接部署在服務(wù)器上或者 ECS 云服務(wù)器情況下。我們可以直接運(yùn)行在對(duì)應(yīng)的 client 端,但是我們?nèi)绾紊系礁鱾€(gè)服務(wù)所在的服務(wù)器上?通過跳板機(jī)?那么我們是不是操作的時(shí)候會(huì)有可能對(duì)應(yīng)服務(wù)器造成影響,直接連接服務(wù)器上是肯定不行的。
-
服務(wù)在所運(yùn)行的 pod 情況下。此時(shí)讓你連接服務(wù)是影響是比上面的情況會(huì)小很多,如果發(fā)生影響也只是影響到當(dāng)前運(yùn)行的 pod。但是如果你想直接連接 pod,那么需要的將對(duì)應(yīng)的 pod 端口需要映射到對(duì)應(yīng)的宿主機(jī)上,然后再提供外部訪問 ecs 的鏈接。這樣會(huì)使得每次 pod 需要映射出去的端口需要一定的規(guī)則,無疑是加大了運(yùn)維等工作,運(yùn)行則也消耗了當(dāng)前的資源(訪問頁面等等則走 http 接口請(qǐng)求,如果通過 ws 連接,減少 7 層方面消耗)。
-
如果通過上述方法,那么我們可以再一臺(tái)機(jī)器上運(yùn)行 server 即可,我們每次訪問都通過訪問 server 去連接到到對(duì)應(yīng)的 client 端,同時(shí)對(duì)應(yīng)的 agent-id 可以指定,我們可以每次 pod 進(jìn)行 client 運(yùn)行的時(shí)候指定當(dāng)前的 agent-id,讓其與當(dāng)前的 pod 進(jìn)行一個(gè)綁定,便于我們通過 server 進(jìn)行連接。
當(dāng)然上述觀點(diǎn)仁者見仁智者見智。以上介紹了幾種部署以及運(yùn)行 arthas 的方法,企業(yè)可以根據(jù)當(dāng)前的項(xiàng)目架構(gòu)選擇合適的部署進(jìn)行解決。為什么需要????就因?yàn)槟軒椭_發(fā)解決問題,不需要來回發(fā)版!
歡迎登陸 start.aliyun.com 知行動(dòng)手實(shí)驗(yàn)室體驗(yàn) Arthas 57 個(gè)動(dòng)手實(shí)驗(yàn):https://start.aliyun.com/handson-lab/#!category=arthas
Arthas 實(shí)驗(yàn)預(yù)覽
為了讓更多開發(fā)者開始用上 Arthas 這個(gè) Java 診斷神器,Arthas 社區(qū)聯(lián)合 JetBrains 推出 Arthas 有獎(jiǎng)?wù)魑幕顒?dòng):聊聊這些年你和 Arthas 之間的那些事兒?;顒?dòng)仍在火熱進(jìn)行中,點(diǎn)擊即可參與,歡迎大家踴躍投稿,參與即有可能獲獎(jiǎng)!
總結(jié)
以上是生活随笔為你收集整理的Arthas 使用的各类方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot 微服务性能下降九
- 下一篇: Serverless 场景下 Pod 创