当需要调试远程服务器上的代码时,就需要进行远程debug。java远程调试功能可导致远程执行任意命令,默认情况下在生产禁止使用。如有需要在生产环境使用,则必须监听在127.0.0.1,避免被远程调用。
(1)开启远程调试参数:
修改远程服务器的tomcat配置文件startenv.sh,添加如下内容:
export JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=127.0.0.1:50001"
开启java debug服务有两种方式,启动时的参数参考以下其中一种即可:
命令1:java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=127.0.0.1:<port>
命令2:-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=127.0.0.1:<port>
注:port可随便写,只要和socat监听的端口号一致就行。
(2)登录服务器使用socat进行端口映射:
命令:socat TCP4-LISTEN:<listen_port>,fork,range=<source_ip>/32 TCP4:127.0.0.1:<dest_port>
例:socat TCP4-LISTEN:50002,fork,range=10.86.35.78/32 TCP4:127.0.0.1:50001
<listen_port>:socat监听端口
<source_ip>:本地ip,执行调试的客户机ip
<dest_port>:java debug监听的端口
若机器上没有socat程序,则使用下列命令安装:
sudo yum install socat
(3)设置idea远程调试Host:
在Run/Debug Configurations,将其host填写为需要远程debug服务器的ip,port为50002
(4)重启tomcat:
sudo /home/q/tools/bin/restart_tomcat.sh 项目路径
举个例子:
服务器的 ip 地址为192.168.254.198, 本机的ip地址为10.86.14.35,且服务器的java debug服务监听到 127.0.0.1:50001 端口。此时若想用本机连接服务器进行远程调试,需:
1、修改tomcat配置文件startenv.sh:
export JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=127.0.0.1:50001"
2、登陆服务器使用socat进行端口映射:
socat TCP4-LISTEN:50002,fork,range=10.86.14.35/32 TCP4:127.0.0.1:50001
3、在idea中设置远程调试的Host ip为192.168.254.198,端口为50002