项目的部署方式有在本地搭建服务器进行部署,或是将项目在远程服务器上面部署。一般如果在本地搭建服务器的时候,可以直接选择启动或是debug,但是如果项目部署在远程的服务器上面的时候, 我们该如何进行调试呢?
1. 启动jar
在服务器中,通过以下命令启动可执行jar包
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=80 -jar health-test-1.0-SNAPSHOT.jar &
参数含义:
-XDebug 启用调试
-Xnoagent 禁用默认sun.tools.debug调试器
-Djava.compiler=NONE 禁止 JIT 编译器的加载
-Xrunjdwp 加载JDWP的JPDA参考执行实例
transport 用于在调试程序和 JVM 使用的进程之间通讯
dt_socket 套接字传输
server=y/n JVM是否需要作为调试服务器执行
address=2345 调试服务器监听的端口号
suspend=y/n 是否在调试客户端建立连接之后启动 JVM
注意:-jar参数不能写到-XDebug参数前
2. 配置IDEA
在idea中按顺序打开Run => Edit Configurations => +Remote => Configuration,设置 远程调试的项目名字name、远程需要调试机器的IP地址host、对应的端口号port,且与上面保持一致。Transport、Debugger mode保持默认。
3. 开始调试
在本地项目中设置断点,然后访问远程机器上面的IP和端口,然后就可以在本地debug调试了
4. 问题汇总
(1)No executable code found at line
被调试的服务器需要开启调试模式,服务器端的代码和本地代码必须保持一致,则会造成断点无法进入的问题。
(2)java.net.ConnectException "Connection refused: connect"
ping服务器ip,telnet服务器ip port,如果能ping通但telnet不通,是由于端口无访问权限导致,需要开放80端口访问权限。如果ping不通,考虑是代理、hosts、dns等问题。
(3)centOS7 防火墙关闭但是远程端口无法访问问题
RedHat7的系统即便是关闭防火墙,端口也只开放22,所以在关闭防火墙后,通过物理机仍无法访问虚拟机的80和8080端口,可以通过firewall启用其他端口的远程访问权限。
添加80端口的访问权限,这里添加后永久生效
#firewall-cmd --zone=public --add-port=80/tcp --permanent
#firewall-cmd --reload
查看80端口访问权限情况
#firewall-cmd --zone=public --query-port=80/tcp
关闭80访问权限
#firewall-cmd --zone=public --remove-port=80/tcp –permanent