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