前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IntelliJ IDEA远程调试Elasticsearch6.1.2

IntelliJ IDEA远程调试Elasticsearch6.1.2

作者头像
程序员欣宸
发布2019-05-29 17:15:26
8510
发布2019-05-29 17:15:26
举报
文章被收录于专栏:实战docker

在深入学习elasticsearch的过程中,遇到有疑惑的源码时,如果能打断点单步调试,往往会取得事半功倍的效果,今天的实战内容就是通过IntelliJ IDEA远程连接运行中的elasticsearch服务,然后单步运行代码;

环境信息

本次实战会用到两台电脑,一台Ubuntu运行着elasticsearch6.1.2版本,另一台Win10运行着IntelliJ IDEA,详细的版本信息如下:

  1. 操作系统:Ubuntu 18.04.2 LTS
  2. JDK:1.8.0_191
  3. Gradle:4.6
  4. elasticsearch:6.1.2
  5. IntelliJ IDEA: 2018.2.4 (Ultimate Edition)

当然,您也可以将elasticsearch和IntelliJ IEDA运行在同一台电脑上,并没有什么差别;

Ubuntu上的操作

在Ubuntu上做以下设置:

  1. 打开elasticsearch-6.1.2/config/jvm.options文件,在尾部增加以下一行内容,注意5678是个没有被占用的端口:
代码语言:javascript
复制
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5678
  1. 正常启动elasticsearch,如果没有选择后台启动,可以在控制台看到如下信息,可见已经开始监听5678端口了:
代码语言:javascript
复制
Listening for transport dt_socket at address: 5678
[2019-04-20T07:10:36,449][INFO ][o.e.n.Node               ] [] initializing ...
[2019-04-20T07:10:36,570][INFO ][o.e.e.NodeEnvironment    ] [stNJgHX] using [1] data paths, mounts [[/ (/dev/sda2)]], net usable_space [93.5gb], net total_space [109gb], types [ext4]
[2019-04-20T07:10:36,570][INFO ][o.e.e.NodeEnvironment    ] [stNJgHX] heap size [990.7mb], compressed ordinary object pointers [true]
[2019-04-20T07:10:36,572][INFO ][o.e.n.Node               ] node name [stNJgHX] derived from node ID [stNJgHXSQZObhO-ze917hA]; set [node.name] to override

IntelliJ IDEA上的操作

elasticsearch启动成功后,回到要运行IntelliJ IDEA的电脑上,执行以下操作:

  1. 下载elasticsearch6.1.2源码,地址是:https://github.com/elastic/elasticsearch/releases
  2. 上述网站中有各个版本的release,找到我们需要 的6.1.2版本,然后下载压缩包,如下图:
  1. 下载完毕后,解压得到elasticsearch-6.1.2目录,打开命令行进入该目录,执行gradle idea,将源码生成IntelliJ IDEA工程:
代码语言:javascript
复制
gradle idea
  1. 打开IntelliJ IDEA,用import的方式导入上述工程,注意选择类型为Gradle,如下图:
  1. 注意Gradle的版本号,推荐4.6版本,如下图:
  1. 等待IDEA导入依赖和构建完成,如下图:
  1. 源码导入成功后开始远程调试,菜单操作如下图:
  1. 新增一个远程配置,如下图:
  1. 在新配置项的设置窗口,按照下图所示进行配置,输入合适的配置名称,elasticsearch服务所在机器的IP地址,端口号5678,然后点击底部的OK按钮:
  1. 如下图,这时候在工具栏上可以看见上面配置的elastic6.1.2,选中后点击红框2中的debug按钮,即可开始远程连接:
  1. 如果网络连接正常,会提示远程连接成功,如下图:
  1. 来试试断点的效果吧,打开类org.elasticsearch.rest.RestController,这是elasticsearch处理web请求的入口类,在dispatchRequest方法中打个断点,位置是调用tryAllHandlers方法那一行,如下图红框所示:
  1. 向elasticsearch发起一次PUT请求,创建名为"index101"的索引,url是"http://192.168.50.75:9200/index101",此时断点会立即生效,如下图,线程调用栈一目了然,是基于netty的server服务,变量值也应有尽有,对我们阅读源码很有帮助:

至此,IntelliJ IDEA远程调试elasticsearch的实战就完成了,在您学习elasticsearch的过程中,希望本文能给您带来一些参考。

建议

除了远程调试,自己修改和编译elasticsearch源码也是有效的学习手段,推荐您参考文章《Elasticsearch6.1.2源码下载和编译构建》。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年04月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境信息
  • Ubuntu上的操作
  • IntelliJ IDEA上的操作
  • 建议
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档