Remote JVM Debug(几乎用不到)
项目在idea开发,直接打包上传启动服务
在本地192.168.0.12开发 部署到192.168.0.110上
idea remote jvm debug
command line arguments for remote JVM:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
我自己电脑运行idea 在 192.168.0.12 ,host:192.168.0.110 port 5005
一、确保网络互通和idea代码和远程服务器代码一致
你的电脑 (开发机) 防火墙/网络 目标服务器
192.168.0.12:5005 ←--- 网络互通 ---→ 192.168.0.110:5005
IDEA 调试客户端 JVM 调试服务端
二、参数解析

三、验证服务器端调试端口
# 在 192.168.0.110 服务器上检查
# 1. 查看JVM进程是否启动
ps aux | grep java
# 或
jps -l
# 2. 检查5005端口是否监听
netstat -tlnp | grep 5005
# 输出示例:tcp6 0 0 :::5005 :::* LISTEN 12345/java
# 3. 测试端口连通性(从服务器自身)
telnet 127.0.0.1 5005
# 或
nc -zv 127.0.0.1 5005
# 4. 查看防火墙规则
sudo firewall-cmd --list-ports # CentOS/RHEL
sudo ufw status # Ubuntu
# 或者临时关闭防火墙测试
sudo systemctl stop firewalld # CentOS
四、docker部署远程监听
本地配置
remote jvm debug host:10.168.9.22 端口是5003
debugger mode:attach to remote JVM
transport:socket
command line arguments for remote jvm
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5003
远程docker配置
docker-compose.yml
kms-admin-dev:
container_name: kms-admin-dev
image: kms/kms-admin:${KMS_VERSION:-latest}
build:
context: ./kms-admin
dockerfile: dockerfile
environment:
- TZ=Asia/Shanghai
- SPRING_PROFILES_ACTIVE=prod
- DB_PASSWORD=${MYSQL_ROOT_PASSWORD:-123456}
- JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5002
privileged: true
pid: host
devices:
- /dev/ttyAMA1:/dev/ttyAMA1
volumes:
- ./cert:/dataVolume/kms/cert
- ./kms-admin/dataVolume/kms:/dataVolume/kms
- ./kms-admin/temp:/dataVolume/temp
- ./kms-admin/log:/usr/local/skms/logs
- ./kms-admin/lib/libsgd.so:/usr/lib/libsgd.so
- ./kms-admin/lib/libsgd.so:/usr/lib64/libsgd.so
- ./kms-admin/lib/libQRNG.so:/usr/lib/libQRNG.so
- ./kms-admin/lib/libQRNG.so:/usr/lib64/libQRNG.so
- ./kms-admin/lib/libbusiness.so:/usr/lib/libbusiness.so
- ./kms-admin/lib/libbusiness.so:/usr/lib64/libbusiness.so
- ./kms-admin/lib/libplatform.so:/usr/lib/libplatform.so
- ./kms-admin/lib/libplatform.so:/usr/lib64/libplatform.so
- ./kms-admin/lib/libsdf_api.conf:/etc/libsdf_api/libsdf_api.conf
- ./kms-admin/jar/skms-admin.jar:/dataVolume/kms/skms-admin.jar # 测试用于经常更新jar包的情况
- ./kms-admin/jar/application.yml:/dataVolume/kms/application.yml # 测试用于经常更新application.yml的情况
- /etc/sysconfig/network-scripts:/etc/sysconfig/network-scripts
- /usr/sbin/ifconfig:/usr/sbin/ifconfig
- /usr/bin/cd:/usr/bin/cd
- /usr/local/bin/docker-compose:/usr/bin/docker-compose
- /usr/bin/docker:/usr/bin/docker
- /var/run/docker.sock:/var/run/docker.sock
- ./:/usr/kms
- /dev:/dev
ports:
- 0.0.0.0:9087:9088
- 0.0.0.0:5002:5002
depends_on:
- kms-mysql-dev
- kms-redis-dev
links:
- kms-mysql-dev
- kms-redis-dev
restart: always
远程监听端口是:5002
在你的 docker-compose.yml 中,ports 配置是这样的:
ports:
- 0.0.0.0:9087:9088 # 应用端口
- 0.0.0.0:5002:5002 # 调试端口
这行配置的意思是:将容器内的 5002 端口,映射到宿主机的 5002 端口。
JVM 调试参数是通过 JAVA_TOOL_OPTIONS 设置的
environment:
- JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5002
这行配置的意思是:告诉 JVM 在容器内部监听 5002 端口(0.0.0.0:5002 表示监听容器内所有网络接口的 5002 端口)。
所以,完整的连接链路是:
你的本地 IDE (10.168.9.22:5002) → 宿主机端口 5002 → 容器内端口 5002 → 容器内的 JVM 调试服务。
远程的 java_tool_options 和本地command line arguments for remote jvm 有啥关系
更多推荐




所有评论(0)