1. 程式人生 > >如何使用IDEA遠端除錯跳板機背後的Java服務

如何使用IDEA遠端除錯跳板機背後的Java服務

如果可以除錯執行在跳板機(防火牆)後的Java服務,那麼可快速定位Java服務問題的本質原因,從而解決這個問題。本篇分享的就是這樣的一個方法。

背景

開發微信生態的後臺服務時,要求後臺服務必須部署在公網可訪問的伺服器上。這就要求我們在本機開發,然後在公網部署。為了定位問題原因,我們需要不停的在程式碼中加日誌然後提交程式碼,然後在伺服器上拉程式碼重新部署,效率十分低下。

有一種解決辦法是在連到伺服器的終端上使用jdb直接除錯java程序,但是使用jdb打斷點的效率很低,因為每次都要找到類全名以及程式碼行號來打斷點,看變數值也很不方便。

最高效的解決辦法還是使用idea來除錯執行在伺服器上的java程序,如果能直接訪問伺服器的所有埠,那還比較容易操作,但是如果伺服器是躲在跳板機後,或者防火牆後,那就比較蠻煩。

本篇會告訴你如何利用ssh的本地埠轉發來除錯躲在跳板機後的伺服器上的Java程序

原理

idea_debug_remote_java

步驟

1. 登入跳板機時新增本地埠轉發引數

ssh -l $JUMP_SERVER_USER -L 5005:$SERVER_IP:5005 -p $JUMP_SERVER_PORT $JUMP_SERVER_IP 

其中

  1. JUMP_SERVER_USER是跳板機賬號,
  2. SERVER_IP是伺服器的ip,跳板機通過該ip可連線到伺服器
  3. JUMP_SERVER_PORT 是指跳板機的ssh埠
  4. JUMP_SERVER_IP 是指跳板機的ip

開發機不可直接訪問伺服器,必須通過跳板機才能連線上

2. 登入Java服務所在的伺服器

ssh -l $USER_NAME $SERVER_IP

其中:

  1. USER_NAME是指Java服務所在的伺服器的使用者名稱

  2. SERVER_IP是指伺服器的ip 一般都是區域網ip

3. 使用除錯的方式啟動Java程序

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005  -jar ./build/libs/XXX.jar

只有使用除錯的方式啟動java程序,才能使用偵錯程式連線到這個java程序,本篇示例是在5005埠監聽除錯請求

4. 在idea建立遠端除錯的profile

idea_new_remote_debug_profile

idea_new_remote_debug_profile2

5. 除錯

idea_new_remote_debug_profile3

可以看到除錯視窗變成了這樣: idea_debug_remote_java2

參考資料

如果可以除錯執行在跳板機(防火牆)後的Java服務,那麼可快速定位Java服務問題的本質原因,從而解決這個問題。本篇分享的就是這樣的一個方法。