用它調(diào)試線上 bug,真得勁 | webconsole
本文主要介紹用本地瀏覽器連接遠(yuǎn)程服務(wù)器進(jìn)行bug調(diào)試的兩種方法
webconsole
webconsole 是 arthas 提供的 web 頁(yè)面,它可以讓用戶(hù)在自己的電腦上,連接遠(yuǎn)程服務(wù)器的 arthas 執(zhí)行命令,命令的執(zhí)行方式和在服務(wù)器直接操作沒(méi)有任何區(qū)別
webconsole 連接遠(yuǎn)程服務(wù)器成功后是這樣的,是不是和服務(wù)器的界面一樣
因?yàn)樾枰L問(wèn)遠(yuǎn)程服務(wù)器,所以要在遠(yuǎn)程服務(wù)器上對(duì)本地網(wǎng)絡(luò)開(kāi)放 ip 和端口策略,否則無(wú)法使用 webconsole
在遠(yuǎn)程服務(wù)器上啟動(dòng) arthas,啟動(dòng)時(shí)要指定 ip 和端口
java?-jar?arthas-boot.jar?--target-ip 119.196.154.133?--http-port 8563 31178
java -jar arthas.jar:?jiǎn)?dòng)命令 --target-ip:指定 webconsole 連接的 ip,也就是服務(wù)器的外網(wǎng)ip --http-port:指定 webconsole 連接的端口,也就是服務(wù)器對(duì)外暴露的端口 31178:要監(jiān)聽(tīng)的 java 程序的進(jìn)程 id
遠(yuǎn)程服務(wù)器上 arthas 啟動(dòng)成功后,打開(kāi)本地瀏覽器,在地址欄輸入對(duì)應(yīng)的 ip 和端口即可打開(kāi) webconsole 頁(yè)面
第一次打開(kāi) webconsole 頁(yè)面,默認(rèn)會(huì)連接本機(jī)的 arthas,也就是 127.0.0.1:3658。需要改成遠(yuǎn)程服務(wù)器的 ip 和端口,然后點(diǎn)擊 Connect 按鈕,就可以連接到遠(yuǎn)程的 arthas 服務(wù)
其實(shí),如果遠(yuǎn)程服務(wù)器開(kāi)放了 ip 和端口策略,也可以在本地使用 telnet 命令進(jìn)行遠(yuǎn)程連接,不需要使用瀏覽器
使用 telnet 連接,遠(yuǎn)程服務(wù)器啟動(dòng) arthas 時(shí)需要使用 --telnet-port 參數(shù)指定端口
java?-jar?arthas-boot.jar?--target-ip 119.196.154.133?--telnet-port 3658 31178
當(dāng)然,也可以同時(shí)指定 telnet 端口和 http 端口,這樣本機(jī)既可以通過(guò) telnet 連接也可以通過(guò) webconsole 連接。
java?-jar?arthas-boot.jar?--target-ip 119.196.154.133?--http-port 8563 --telnet-port 3658 31178
webconsole 默認(rèn)使用 8563 端口,--http-port 參數(shù)可以修改 webconsole 端口
telnet 默認(rèn)使用 3658 端口,--telnet-port 可以修改 telnet 端口
注意:
webconsole 需要服務(wù)器暴露 ip 和端口,如果服務(wù)器是云端部署,需要考慮網(wǎng)絡(luò)安全的問(wèn)題,比如端口只開(kāi)放給某一個(gè)來(lái)源 ip
使用 arthas tunnel servel 連接遠(yuǎn)程 arthas
除了直接使用瀏覽器連接 arthas 進(jìn)行 webconsole 外,還有一種方式可以進(jìn)行 webconsole,那就是 tunnel servel
tunnel servel 最大的優(yōu)點(diǎn)在于支持分布式部署,它承擔(dān)注冊(cè)中心的功能,可以同時(shí)支持多個(gè)遠(yuǎn)程服務(wù)器的 arthas 注冊(cè)到 tunnel-server,用戶(hù)瀏覽器登錄上 tunnel server 后,可以選擇對(duì) 某一個(gè)arthas 進(jìn)行監(jiān)聽(tīng)
tunnel server 訪問(wèn)的原理如下
#?說(shuō)明: 1.遠(yuǎn)程服務(wù)器的 arthas 會(huì)向 tunnel-server 注冊(cè)服務(wù),注冊(cè)成功后每個(gè) arthas 會(huì)得到一個(gè) agentid 2.瀏覽器訪問(wèn) tunnel-server 服務(wù),選擇 aegnt-id 后通過(guò) tunnel-server 代理到對(duì)應(yīng)的 arthas 服務(wù)
下面介紹 tunnel-server 服務(wù)的搭建。首先,需要下載 arthas-tunnel-server.jar,可以直接去 github 下載
#?github下載地址 https://github.com/alibaba/arthas/releases
將 arthas-tunnel-server.jar 上傳到服務(wù)器,該服務(wù)器需要和 arthas 所在的服務(wù)器集群網(wǎng)絡(luò)互通。
arthas-tunnel-server.jar 是一個(gè) spring-boot 項(xiàng)目,可以通過(guò) java -jar 啟動(dòng),啟動(dòng)成功后如下圖
java?-jar?arthas-tunnel-server-3.4.1.jar
arthas-tunnel-server 默認(rèn)使用 8080 和 7777 兩個(gè)端口,如果啟動(dòng)報(bào)錯(cuò)端口被占用,可以對(duì)這兩個(gè)端口進(jìn)行修改
8080 是服務(wù)的 web 端口,瀏覽器通過(guò)該端口連接 tunnel-server 服務(wù),啟動(dòng)時(shí)通過(guò)-Dserver.port 參數(shù)修改
//?將默認(rèn)的8080端口修改為8081 java?-jar?-Dserver.port=8081 arthas-tunnel-server-3.4.1.jar
7777 是注冊(cè)端口,遠(yuǎn)程服務(wù)器的 arthas 通過(guò)該端口注冊(cè)到 tunnel-server。使用壓縮工具打開(kāi)arthas-tunnel-server.jar包,在application.properties配置文件中可以修改該端口
tunnel-server 啟動(dòng)成功后,打開(kāi)本地瀏覽器輸入 tunnel-server 的 ip 和端口進(jìn)行連接,連接成功后如下圖
此時(shí),需要輸入 AgentId 才能對(duì)遠(yuǎn)程 arthas 進(jìn)行監(jiān)控。每個(gè) arthas 注冊(cè)到 tunnel-server 成功后,會(huì)生成一個(gè) AgentId,所以要拿到 AgentId 需要先啟動(dòng) arthas 服務(wù)
在遠(yuǎn)程服務(wù)器上啟動(dòng) arthas,并注冊(cè)到 tunnel-server,使用 --tunnel-server 參數(shù)指定注冊(cè)的地址
java?-jar?arthas-boot.jar?--tunnel-server 'ws://119.196.154.132:7777/ws'
arthas 啟動(dòng)成功后日志中最后一行的 id 就是我們需要的 AgentId
回到瀏覽器輸入 AgentId,就可以連接遠(yuǎn)程 arthas 服務(wù)愉快的進(jìn)行調(diào)試了
AgentId 是隨機(jī)生成的,每次啟動(dòng)時(shí)都不相同,所以在瀏覽器中輸入的時(shí)候需要到服務(wù)器上查看日志,比較麻煩。使用 --agent-id 參數(shù)可以指定 AgentId,建議把 arthas 所在服務(wù)器的 ip 作為 AgentId 來(lái)使用,方便記憶
java?-jar?arthas-boot.jar?--tunnel-server 'ws://119.196.154.132:7777/ws' --agent-id 119.196.154.133
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!