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