如何使用IDEA远程调试跳板机背后的Java服务

如果可以调试运行在跳板机(防火墙)后的Java服务,那么可快速定位Java服务问题的本质原因,从而解决这个问题。本篇分享的就是这样的一个方法。

背景

开发微信生态的后台服务时,要求后台服务必须部署在公网可访问的服务器上。这就要求我们在本机开发,然后在公网部署。为了定位问题原因,我们需要不停的在代码中加日志然后提交代码,然后在服务器上拉代码重新部署,效率十分低下。

有一种解决办法是在连到服务器的终端上使用jdb直接调试java进程,但是使用jdb打断点的效率很低,因为每次都要找到类全名以及代码行号来打断点,看变量值也很不方便。

最高效的解决办法还是使用idea来调试运行在服务器上的java进程,如果能直接访问服务器的所有端口,那还比较容易操作,但是如果服务器是躲在跳板机后,或者防火墙后,那就比较蛮烦。

本篇会告诉你如何利用ssh的本地端口转发来调试躲在跳板机后的服务器上的Java进程

原理

如何使用IDEA远程调试跳板机背后的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远程调试跳板机背后的Java服务

如何使用IDEA远程调试跳板机背后的Java服务

5. 调试

如何使用IDEA远程调试跳板机背后的Java服务

可以看到调试窗口变成了这样: 如何使用IDEA远程调试跳板机背后的Java服务

参考资料

玩转SSH端口转发

原文 

http://www.cloudchou.com/web/post-996.html

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 如何使用IDEA远程调试跳板机背后的Java服务

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址