Java Debug调试远程服务的完整流程
要让远程Java服务支持调试,需通过JVM参数开启调试模式。不同场景的配置方式如下:
在启动命令中添加-agentlib:jdwp参数(推荐,适用于Java 5+):
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar your-service.jar
transport=dt_socket:使用Socket传输调试数据(跨机器首选);server=y:当前JVM作为调试服务器,等待客户端连接;suspend=n:启动时不暂停(若设为y,程序会等待调试器连接后才开始执行,适合调试启动失败问题);address=5005:监听的调试端口(需唯一且未被占用)。修改Tomcat启动脚本(bin/catalina.sh或catalina.bat),添加JVM参数:
# 在脚本开头或JAVA_OPTS定义处添加
export JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000"
或直接通过startup.sh的jpda模式启动(更便捷):
./catalina.sh jpda start
默认会使用JPDA_ADDRESS=8000(可通过set JPDA_ADDRESS=9000修改端口)。
docker run -d -p 5005:5005 --name my-service -e JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005" my-service-image
spec:
containers:
- name: my-service
ports:
- containerPort: 5005 # 容器内调试端口
args: ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"]
确保远程服务器开放调试端口(以CentOS为例):
# 开放端口(永久生效)
sudo firewall-cmd --zone=public --add-port=5005/tcp --permanent
# 重新加载防火墙规则
sudo firewall-cmd --reload
测试端口连通性(本地机器执行):
telnet <远程服务器IP> 5005
# 若显示空白终端,说明连接成功
Run -> Edit Configurations,点击+选择Remote JVM Debug;Remote-Debug-Prod);Socket(默认);Attach(附加到远程服务器);address端口一致(如5005);Apply -> OK保存配置。Run -> Debug Configurations,双击Remote Java Application创建新配置;Remote-Debug-Tomcat);Standard (Socket Attach);address端口一致(如8000);Apply -> Debug启动调试会话。Remote JVM Debug(如IntelliJ IDEA点击绿色虫子图标);Connected to the target VM, address: 'xxx.xxx.xxx.xxx:5005', transport: 'socket',表示连接成功;System.out.println()),或单步执行(F6/F5)。suspend=y(启动时暂停),待调试器连接后再继续执行。免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。