美文网首页elasticsearch
玩转Elasticsearch源码-使用Intellij IDE

玩转Elasticsearch源码-使用Intellij IDE

作者: 左手java右手go | 来源:发表于2018-12-16 20:14 被阅读19次

    开篇

    学习源码第一步就是搭建调试环境,但是看了网上大部分Elasticsearch调试方式都是配置各种环境变量然后直接启动Main方法,而且还各种报错。今天提供新的方式--remote debug来避免这些麻烦。

    步骤

    环境

    首先要安装jdk8,gradle和Intellij IDEA

    源码下载

    拉取代码,checkout到想要调试的版本(这里切到v6.1.0,需要注意的是不同ES分支对gradle版本要求不一样,可以到README文件中查看对应到gradle版本要求)

    git clone git@github.com/elastic/elasticsearch
    cd elasticsearch
    git checkout v6.1.0
    

    导入到IDEA

    执行gradle idea,成功后会提示BUILD SUCCESSFUL,然后导入到IDEA

    :test:fixtures:hdfs-fixture:idea
    :test:fixtures:krb5kdc-fixture:ideaModule
    :test:fixtures:krb5kdc-fixture:idea
    :test:fixtures:old-elasticsearch:ideaModule
    :test:fixtures:old-elasticsearch:idea
    
    BUILD SUCCESSFUL
    
    Total time: 2 mins 2.159 secs
    

    使用gradle启动Elasticsearch

    gradle run --debug-jvm
    
    执行成功后是这样的,其中8000就是远程debug端口 image.png

    配置remote debug

    点击IDEA的Edit Configurations,再点击➕ image.png
    填写主机和端口,Name是配置名称,可以自定义(我这里就填es),点OK保存配置 image.png
    搜一下源码里面Elasticsearch类,,看到Main方法,先打个断点等会看效果 image.png
    最后再点下绿色小虫子启动debug image.png
    是不是在断点停下来了 image.png
    跳过断点再看下控制台,是不是启动日志都出来了 image.png
    再验证下是否启动成功 image.png

    原理

    一切源于被称作 Agent 的东西。JVM有一种特性,可以允许外部的库(Java或C++写的libraries)在运行时注入到 JVM 中。这些外部的库就称作 Agents, 他们有能力修改运行中 .class 文件的内容。
    这些 Agents 拥有的这些 JVM 的功能权限, 是在 JVM 内运行的 Java Code 所无法获取的, 他们能用来做一些有趣的事情,比如修改运行中的源码, 性能分析等。 像 JRebel 工具就是用了这些功能达到魔术般的效果。
    传递一个 Agent Lib 给 JVM, 通过添加 agentlib:libname[=options] 格式的启动参数即可办到。像上面的远程调试我们用的就是 -agentlib:jdwp=... 来引入 jdwp 这个 Agent 的。
    jdwp 是一个 JVM 特定的 JDWP(Java Debug Wire Protocol) 可选实现,用来定义调试者与运行JVM之间的通讯,它的是通过 JVM 本地库的 jdwp.so 或者 jdwp.dll 支持实现的。简单来说, jdwp agent 会建立运行应用的 JVM 和调试者(本地或者远程)之间的桥梁。既然他是一个Agent Library, 它就有能力拦截运行的代码。
    在 JVM 架构里, debugging 功能在 JVM 本身的内部是找不到的,它是一种抽象到外部工具的方式(也称作调试者 debugger)。这些调试工具或者运行在 JVM 的本地 或者在远程。这是一种解耦,模块化的架构。

    关于Agent还有很多值得研究的细节,甚至基于JVMTI自己实现。参考https://www.ibm.com/developerworks/cn/java/j-lo-jpda2/index.html

    相关文章

      网友评论

        本文标题:玩转Elasticsearch源码-使用Intellij IDE

        本文链接:https://www.haomeiwen.com/subject/hibxkqtx.html