当前位置: 首页 > article >正文

JVM远程调试原理剖析

一、如何开启JVM远程调试

        当一个 Java 应用启动时,JVM 会根据启动参数配置其运行环境。使用 -agentlib:jdwp 参数启动远程调试功能,JVM 会初始化调试代理。

agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar your_application.jar

        参数解释如下

        transport=dt_socket:使用套接字进行通信。

        server=y:JVM 作为服务器等待调试器连接。

        suspend=n:JVM 启动后不暂停应用。

        address=*:5005:监听所有 IP 地址的 5005 端口。

二、JVM远程调试原理

        远程调试 Java 应用的底层实现涉及多个技术层面,包括 Java 虚拟机(JVM)、Java 调试接口(JDI)、Java 调试线协议(JDWP)、和 Socket 网络通信。

        JVM远程调试架构图如下:

         

       1、相关概念:

        (1)Java 调试接口 (JDI)

        JDI 是一组 Java API,提供了与正在运行的 Java 应用交互的方式。它是开发调试工具的高级接口,允许调试器与 JVM 进行交互。

        JDI 主要通过 JDWP 发送请求。具体来说,调试器会通过 JDI 调用方法,这些方法会生成 JDWP 消息并通过网络发送到 JVM。

        (2)Java 调试线协议 (JDWP)

        JDWP 是用于调试的低级协议,定义了调试器与 JVM 之间的通信格式。它负责处理所有的调试请求和响应。

        JDWP 消息包括:

        请求:调试器向 JVM 发送的操作请求,例如设置断点、获取变量值等。

        响应:JVM 对请求的响应,包含结果或状态信息。

        事件:JVM 向调试器报告的事件,例如线程暂停、异常抛出等。

        (3)Socket 网络通信

        JDWP 使用 TCP 套接字进行数据传输。调试器和 JVM 之间的通信是基于 Socket 的,确保了数据的实时传输。

        调试器通过指定的 IP 地址和端口(如 localhost:5005)连接到运行中的 JVM。

        一旦建立连接,调试器和 JVM 之间就可以进行双向通信。

        (4)上下文切换

        在调试过程中,虽然调试器在本地,但所有的代码执行、内存管理和 JDK 调用都是在远程 JVM 上进行的。这意味着,调试器无法直接访问本地的系统资源,而是通过 JDWP 协议间接地与 JVM 交互。

        2、核心流程:

        【客户端(调试端)】

        (1)发起连接。调试器启动并连接到远程 JVM 监听的端口(默认:5005

        (2)发送请求。调试器通过 JDI 调用方法,生成 JDWP 请求(如:设置断点)并发送到 JVM。

        【服务端(线上环境/被调试端)】

        (3)处理请求。JVM 接收到 JDWP 请求后,解析请求并执行相应的操作(如在字节码中插入断点)。

        (4)发送响应。JVM 完成操作后,生成 JDWP 响应并通过 Socket 返回调试器。

        【客户端(调试端)】

       (5)事件响应。 若断点命中、异常抛出,接收特定事件,解析 JDWP响应数据,进入本地断点。


http://www.kler.cn/a/488394.html

相关文章:

  • 人工智能-数据分析及特征提取思路
  • 基于单片机的无线智能窗帘控制器的设计
  • 数据结构(Java版)第七期:LinkedList与链表(二)
  • 消息中间件类型介绍
  • STM32的存储结构
  • 1. npm 常用命令详解
  • Apache XMLBeans 一个强大的 XML 数据处理框架
  • 【LLM文本分类微调】骚扰邮件分类
  • day 36 tcp协议粘包问题 http协议
  • 定时器中断方式
  • VUE + pdfh5 实现pdf 预览,主要用来uniappH5实现嵌套预览PDF
  • openGauss系列 --启动和停止服务器
  • Garnet:微软官方基于.Net 8开源缓存系统,可无需任何改动直接替代Redis,而且还更高性能!
  • S变换matlab实现
  • 2025 最新React面试题
  • 【ASP.NET学习】Web Forms创建Web应用
  • Moq与xUnit在C#单元测试中的应用
  • 比亚迪夏直插家用MPV腹地,“迪王”开启全面销冠新征程
  • 观察者模式详解
  • HTTP-响应协议
  • React Context用法总结
  • Rancher运维三板斧:告警设置、日志管理与数据备份恢复
  • 走进 JavaScript 世界:掌握核心技能
  • Golang中使用 Mqtt
  • 计算机网络 笔记 数据链路层 2
  • docker(目录挂载、卷映射)