jdwp+rinetd 进行java 容器应用的远程调试
实际上就是一个玩法,实际上因为jdwp 是基于tcp 协议的,我们可以使用任何合适的tcp lb 工具解决(iptables 也是可以的)只是rinetd
使用起来还是比较简单的,同时包含了一些简单的访问控制还是不错的
jdwp 使用玩法
集成参考图
环境&测试
一个spring boot 应用,启动的时候开启了jdwp 协议
- docker-compose
version: '3'
services:
app:
build: ./
ports:
- 8080:8080
- 9090:9090
networks:
app:
ipv4_address: 172.16.238.10
proxy:
build:
context: .
dockerfile: ./proxy-Dockerfile
ports:
- 19090:19090
networks:
app:
ipv4_address: 172.16.238.11
networks:
app:
ipam:
driver: default
config:
- subnet: "172.16.238.0/24"
spring boot app dockerfile
FROM eclipse-temurin:8-jdk-alpine
WORKDIR /app
COPY app.jar /app/
COPY app.sh /app/app.sh
RUN chmod +x /app/app.sh
ENTRYPOINT [ "/app/app.sh" ]
app.sh
#!/bin/sh
java -agentlib:jdwp=transport=dt_socket,address=9090,server=y,suspend=n -jar /app/app.jar
proxy dockerfile (基于centos 镜像)
FROM centos:centos7.9.2009
COPY rinetd /app/rinetd
COPY rinetd.conf /app/rinetd.conf
RUN chmod +x /app/rinetd
ENTRYPOINT [ "/app/rinetd","-c","/app/rinetd.conf","-f" ]
rinetd.conf 转发配置,添加如下就可以了
0.0.0.0 19090 172.16.238.10 9090
- 调试
idea 配置
效果
说明
完整代码在github 中,大家可以参考,实际上以上是一个玩法,基于haproxy,nginx (4层proxy),k8s 的nodeport 转发。。。。都是不多的选择
参考资料
https://dzone.com/articles/remote-debugging-java-applications-with-jdwp
https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/jdwp-spec.html
https://blog.aquasec.com/jdwp-misconfiguration-container-images
https://github.com/rongfengliang/rinetd-rpm
https://github.com/rongfengliang/rinetd-java-debug-learning
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2021-11-26 maven-default-http-blocker 问题
2020-11-26 使用go-fuse开发一个fuse 文件系统
2020-11-26 awesome-fuse-fs
2019-11-26 nexus php composer host 模式repo 试用
2018-11-26 Modern Data Lake with Minio : Part 2
2018-11-26 Modern Data Lake with Minio : Part 1
2018-11-26 使用rclone 进行minio 文件同步