首页 > 编程语言 >jdwp+rinetd 进行java 容器应用的远程调试

jdwp+rinetd 进行java 容器应用的远程调试

时间:2022-11-26 20:36:05浏览次数:88  
标签:rinetd java app sh https jdwp

实际上就是一个玩法,实际上因为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

标签:rinetd,java,app,sh,https,jdwp
From: https://www.cnblogs.com/rongfengliang/p/16928238.html

相关文章

  • 重点--自测可以----Java实现微信公众号自动回复
    背景最近准备搭建自己的博客系统,有些软件或资料的下载链接放在网盘中,为了方便下载,同时可以将用户导流到公众号上,因此准备用Java实现微信公众号自动回复的功能准备工作微信......
  • rinetd tcp/udp 端口重定向服务
    rinetd支持tcp以及udp协议的端口重定向,功能还是比较有用的,比如进行一些流量转发,配置上也是比较方便的,同时支持一些简单的访问控制处理构建 gitcloneht......
  • npm 打包报错JavaScript heap out of memory(亲测可行)
    解决办法:1.修改package.json加–max_old_space_size=81922.安装并执行increase-memory-limit//全局安装cnpminstall-gincrease-memory-limit//项目内运行increase-memory......
  • Java类加载过程
    ClassLoader的主要职责就是负责加载各种class文件到JVM中,ClassLoader是一个抽象的class,给定一个class的二进制文件名,ClassLoader会尝试加载并且在JVM中生成构成这个类的各个......
  • java如何获取线程id呢?
    转自:​​http://www.java265.com/JavaCourse/202204/3183.html​​线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条......
  • TypeScript/Javascript 泛型字典
    typescript是javaScript的超集,相当于把弱类型的js变成了强类型的语言,并且实现了封装(成员私有),更方便面向对象编程。然鹅,typescript并没有扩增原生JS的内容,比如:支持了import......
  • 启动java项目时出现 com.sun.xml.internal.bind.v2.ContextFactory 异常
    错误:[java.lang.ClassNotFoundException:com.sun.xml.internal.bind.v2.ContextFactory]atjavax.xml.bind.ContextFinder.newInstance(ContextFinder.java:241)atjavax.......
  • Java 注解和反射(三)获得反射对象
    Class类在Object类中定义了以下方法,此方法将被所有子类继承publicfinalClassgetClass()以上的方法返回值的类型是一个Class类,此类是Java反射的源头,实际上所谓反......
  • JAVA-动漫美女拼图—完结篇(重置业务实现)
    代码一packagecom.itheima_10;publicclassApp{publicstaticvoidmain(String[]args){PictureFramepf=newPictureFrame();}}代码二pa......
  • JAVA-动漫拼图图片移动业务遗留问题处理
    packagecom.itheima_09;publicclassApp{publicstaticvoidmain(String[]args){PictureFramepf=newPictureFrame();}}packagecom.ithe......