Arthas 使用的四种方式
作者 | Montos(一個(gè)在后端道路上摸爬滾打的內(nèi)卷人)
來(lái)源|阿里巴巴云原生公眾號(hào)
Arthas?是阿里巴巴開(kāi)源的 Java 診斷工具。讓我們能夠在線排查項(xiàng)目發(fā)生的問(wèn)題。除了知道它的存在之外,我們也需要知道我們?nèi)绾稳グ惭b使用它,以便于提高我們?nèi)粘i_(kāi)發(fā)解決 BUG 的效率。
方案介紹
方案一:本地直接運(yùn)行
往往最簡(jiǎn)單的方法實(shí)際是最有效的,它本身就是一個(gè)可運(yùn)行的程序,所以我們可以直接運(yùn)行即可。
- 我們可以直接通過(guò)官網(wǎng)下載對(duì)應(yīng)的 jar,然后運(yùn)行再進(jìn)行 jar,執(zhí)行對(duì)應(yīng)的命令。
- 命令如下:
- 演示如下:
方案二:Web Console實(shí)現(xiàn)
我們可以不通過(guò)每次進(jìn)入 ssh 中進(jìn)行執(zhí)行程序,我們也可通過(guò) web 方式進(jìn)行訪問(wèn)操作.通過(guò)官網(wǎng)上面的介紹?arthas 的 Web Console,能了解到大致的搭建思路。
- 通過(guò)下載?arthas-tunnel-server。我們可以拿到對(duì)應(yīng)的 arthas 的 server 端。下載完畢之后直接運(yùn)行即可(我是將其在 ECS 上直接運(yùn)行)。
- 在客戶端對(duì)應(yīng)的啟動(dòng) arthas-boot。并且通過(guò)啟動(dòng)參數(shù)附加上 server 的地址(我是將其在本地運(yùn)行)。
- 選擇對(duì)應(yīng)的進(jìn)程進(jìn)行 attach,會(huì)出現(xiàn)對(duì)應(yīng)的 agent-id,再將其填寫(xiě)到對(duì)應(yīng)的 server 端 http 頁(yè)面中。
- 最后我們就可以再 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)之后可以直接訪問(wèn):
- 當(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 下載下來(lái)之后進(jìn)行 ADD 操作,或者每次通過(guò)構(gòu)建 Dockerfile 則會(huì)產(chǎn)生對(duì)應(yīng)含有 arthas 的鏡像文件。這里介紹下通過(guò) 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上述是通過(guò)構(gòu)建 Dockerfile 來(lái)完成的,這里就直接將鏡像文件貼出來(lái),這里是將當(dāng)前 arthas 中的文件復(fù)制到對(duì)應(yīng)的容器中,之后我們可以通過(guò) exec -it 進(jìn)入執(zhí)行,步驟和方法一類似。
總結(jié)
通過(guò)上面的介紹,其實(shí)我更推薦使用 Web 接入的方式更好,原因如下:
- 在服務(wù)直接部署在服務(wù)器上或者 ECS 云服務(wù)器情況下。我們可以直接運(yùn)行在對(duì)應(yīng)的 client 端,但是我們?nèi)绾紊系礁鱾€(gè)服務(wù)所在的服務(wù)器上?通過(guò)跳板機(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ī)上,然后再提供外部訪問(wèn) ecs 的鏈接。這樣會(huì)使得每次 pod 需要映射出去的端口需要一定的規(guī)則,無(wú)疑是加大了運(yùn)維等工作,運(yùn)行則也消耗了當(dāng)前的資源(訪問(wèn)頁(yè)面等等則走 http 接口請(qǐng)求,如果通過(guò) ws 連接,減少 7 層方面消耗)。
- 如果通過(guò)上述方法,那么我們可以再一臺(tái)機(jī)器上運(yùn)行 server 即可,我們每次訪問(wèn)都通過(guò)訪問(wèn) 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è)綁定,便于我們通過(guò) server 進(jìn)行連接。
當(dāng)然上述觀點(diǎn)仁者見(jiàn)仁智者見(jiàn)智。以上介紹了幾種部署以及運(yùn)行 arthas 的方法,企業(yè)可以根據(jù)當(dāng)前的項(xiàng)目架構(gòu)選擇合適的部署進(jìn)行解決。為什么需要????就因?yàn)槟軒椭_(kāi)發(fā)解決問(wèn)題,不需要來(lái)回發(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ù)覽
為了讓更多開(kāi)發(fā)者開(kāi)始用上 Arthas 這個(gè) Java 診斷神器,Arthas 社區(qū)聯(lián)合 JetBrains 推出?Arthas 有獎(jiǎng)?wù)魑幕顒?dòng):聊聊這些年你和 Arthas 之間的那些事兒。活動(dòng)仍在火熱進(jìn)行中,點(diǎn)擊即可參與,歡迎大家踴躍投稿,參與即有可能獲獎(jiǎng)!
原文鏈接:https://developer.aliyun.com/article/781776?
版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開(kāi)發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《阿里云開(kāi)發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開(kāi)發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫(xiě)侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
以上是生活随笔為你收集整理的Arthas 使用的四种方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: DataX在数据迁移中的应用
- 下一篇: RISC-V应用创新大赛开放报名啦!