【ES源码探索-0001】- 如何编译和远程调试elasticsearch源码

目录

如何编译

    1. 下载最新elasticsearch源码,准备相关运行环境,将jdk8jdk11jdk17jdk21配置到环境变量,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export JAVA8_HOME=/home/es/openlogic-openjdk-8u422-b05-linux-x64
export JAVA11_HOME=/home/es/openlogic-openjdk-11.0.24+8-linux-x64
export JAVA17_HOME=/home/es/openlogic-openjdk-17.0.12+7-linux-x64
export JAVA21_HOME=/home/es/openlogic-openjdk-21.0.4+7-linux-x64
export JAVA_HOME=$JAVA21_HOME
export java="$JAVA_HOME/bin/java"
export ES_JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5007"

PATH=$PATH:$JAVA_HOME/bin
export PATH
    1. 编译打包,执行 ./gradlew localDistro 编译打包,es打包产物在 /elasticsearch/build/distribution/local/ 路径下
    1. 如果这里使用国内的机器,可能会打包失败或者打包时间非常久,建议大家购买香港的服务器,这样不会因为网络的问题导致打包失败。

如何调试

    1. 添加ES_JAVA_OPTS环境变量,elasticsearch 在运行时候会读取这个变量,这里就是jvm的参数,添加了调试的参数。
    1. 编辑 config/elasticsearch.yml,修改配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 设置主机
network.host: 0.0.0.0
# 设置主机
discovery.seed_hosts: ["0.0.0.0", "[::1]"]
# 设置安全检查
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
# 设置是否开启https
xpack.security.http.ssl:
enabled: false
keystore.path: certs/http.p12

# 设置是否开启ssl
xpack.security.transport.ssl:
enabled: false
verification_mode: certificate
keystore.path: certs/transport.p12
truststore.path: certs/transport.p12
# 设置主机
http.host: 0.0.0.0

遇到问题

    1. 启动报错:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144];
    • 这里是由于vm.max_map_count默认值太小导致的,使用root用户,编辑vi /etc/sysctl.conf,添加配置vm.max_map_count=655300 即可。
    1. 无法通过公网ip连接到主机
    • 2.1 防火墙端口未开启导致,在云厂商的安全组设置打开端口

【ES源码探索-0001】- 如何编译和远程调试elasticsearch源码
https://www.lewismind.site/2024/09/12/0001-es/
作者
lewis
发布于
2024年9月12日
许可协议