概述
对于分布式系统的调试不知道大家有什么好的方法?在知道远程调试这个方法之前就是在代码中打各种log,然后重新部署,上线,调试,这样比较费时。今天咱们来了解了解Java远程调试这个牛逼的功能,本文以Intellij IDEA为例讲解怎么使用远程调试。
服务端程序运行在一台远程服务器上,我们可以在本地服务端的代码(前提是本地的代码必须和远程服务器运行的代码一致)中设置断点,每当有请求到远程服务器时时能够在本地知道远程服务端的此时的内部状态。
下面按照步骤介绍怎么远程debug。
使用特定JVM参数运行服务端代码
要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数,这些参数是:
-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=${debug_port}
其中的${debug_port}是用户自定义的,为debug端口,本例以5005端口为例。
为了不影响别人使用服务,可以把服务端口,别名改成自己特定的,就相当在服务器上启动一套同样的服务了
然后idea打包,
把 .jar文件上传部署的服务器上,在所在的目录执行下面命令启动:
java -Xms256m -Xmx800m -Dspring.profiles.active=testxia -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5005 -jar aflc-common-service-1.0.2.jar
-Xms256m -Xmx800m 指定启动jvm内存的大小
-Dspring.profiles.active=testxia 指定自定义的配置文件
等Eureka里面注册成功
本地连接远程服务器debug端口
打开Intellij IDEA,在顶部靠右的地方选择”Edit Configurations…”,进去之后点击+号,选择”Remote”,按照下图的只是填写红框内的内容,其中host为远程代码运行的机器的ip/hostname,port为上一步指定的debug_port,本例是5005
然后点击Apply,最后点击OK即可
启动debug模式
现在在上一步选择”Edit Configurations…”的下拉框的位置选择上一步创建的remote的名字,然后点击右边的debug按钮(长的像臭虫那个),看控制台日志,如果出现类似**“Connected to the target VM, address: ‘xx.xx.xx.xx:5005’, transport: ‘socket’”**的字样,就表示连接成功过了。
设置断点,开始调试
远程debug模式已经开启,现在可以在需要调试的代码中打断点了,
操作跟本地断点是一样的了。