org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentExceptio

本文详细记录了在安装Elasticsearch过程中可能遇到的各种错误及其解决方案,包括内存锁定失败、文件描述符限制、用户权限、内核版本及Java版本不兼容等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是我转载的一片文章,解决了我的问题,所以记录一下。

话不多说,见正文吧!

elasticsearch安装踩过的那些坑:

坑1: 

[***]failed to send join request to master 

原因:你复制了某个节点的elasticsearch文件夹,但是这里面包含了该节点的data文件
解决:删除elasticsearch文件夹下data目录的内容

坑2:

ERROR: bootstrap checks failed
memory locking requested for elasticsearch process but memory is not locked

原因:锁定内存失败
解决:vim /etc/security/limits.conf 添加下面两行

  • soft memlock unlimited
  • hard memlock unlimited
    tips:* 代表的是linux内所有的用户

坑3:
ERROR: bootstrap checks failed
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

原因:无法创建本地文件,用户最大可创建文件数不够
解决:vim /etc/security/limits.conf

  •            hard    nofile          65536
    
  •            soft    nofile          65536
    
  •            soft    nproc           65536
    
  •            hard    nproc           65536
    

    坑4:
    max number of threads [1024] for user [es] is too low, increase to at least [2048]

原因:无法创建本地线程问题,用户最大可创建线程数太小
解决:vim /etc/security/limits.d/90-nproc.conf

  • soft nproc 2048(这边原本是1024)

    坑5:
    max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

原因:最大虚拟内存太小
解决:vim /etc/sysctl.conf 添加下面这一行
vm.max_map_count=262144
并执行命令:sysctl -p

坑6:
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

原因:Centos6不支持SecComp
解决:vim elasticsearch.yml 切记在内存锁的下面加
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

  坑7:
    uncaught exception in thread [main]
    org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root

原因:elasticsearch不能使用root用户启动
解决:创建新用户(useradd elasticsearch)并 chown -R elasticsearch:elasticsearch elasticsearch-5.2.2 [更改elasticsearch文件夹的用户以及所属组]

坑8:
unable to install syscall filter:
java.lang.UnsupportedOperationException: seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER compiled in
        at org.elasticsearch.bootstrap.SystemCallFilter.linuxImpl(SystemCallFilter.java:350) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.SystemCallFilter.init(SystemCallFilter.java:638) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.JNANatives.tryInstallSystemCallFilter(JNANatives.java:215) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Natives.tryInstallSystemCallFilter(Natives.java:99) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:111) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:204) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:360) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:123) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:114) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.cli.Command.main(Command.java:88) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) [elasticsearch-5.4.0.jar:5.4.0]

原因:linux内核版本太低
解决:凉凉,换个新版本的linux系统吧。

坑9:
Unsupported major.minor version 52.0

原因:java版本太低
解决:更换jdk版本,ElasticSearch5.0.0支持jdk1.8.0以上

坑10:
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: Property [elasticsearch.version] is missing for plugin [head]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.cli.SettingCommand.execute(SettingCommand.java:54) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.cli.Command.main(Command.java:88) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:89) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:82) ~[elasticsearch-5.2.2.jar:5.2.2]
Caused by: java.lang.IllegalArgumentException: Property [elasticsearch.version] is missing for plugin [head]
        at org.elasticsearch.plugins.PluginInfo.readFromProperties(PluginInfo.java:104) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.plugins.PluginsService.getPluginBundles(PluginsService.java:292) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:131) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.node.Node.<init>(Node.java:297) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.node.Node.<init>(Node.java:232) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Bootstrap$6.<init>(Bootstrap.java:241) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:241) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:121) ~[elasticsearch-5.2.2.jar:5.2.2]
        ... 6 more

原因:elasticsearch新版本是不允许安装插件在文件目录plugins下面的
解决:将plugins下面的插件目录放到其他目录即可

作者:chenyn911
来源:优快云
原文:https://blog.youkuaiyun.com/u013753225/article/details/78753399
版权声明:本文为博主转载,想看原文请点击原文链接!

[root@192 elasticsearch]# docker logs 69 OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release. [2025-08-13T14:03:30,792][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [unknown] uncaught exception in thread [main] org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: Failed to create node environment at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:140) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.5.4.jar:6.5.4] at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) ~[elasticsearch-6.5.4.jar:6.5.4] Caused by: java.lang.IllegalStateException: Failed to create node environment at org.elasticsearch.node.Node.<init>(Node.java:299) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.node.Node.<init>(Node.java:265) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:212) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:212) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-6.5.4.jar:6.5.4] ... 6 more Caused by: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes at sun.nio.fs.UnixException.translateToIOException(UnixException.java:90) ~[?:?] at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) ~[?:?] at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116) ~[?:?] at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:385) ~[?:?] at java.nio.file.Files.createDirectory(Files.java:689) ~[?:?] at java.nio.file.Files.createAndCheckIsDirectory(Files.java:796) ~[?:?] at java.nio.file.Files.createDirectories(Files.java:782) ~[?:?] at org.elasticsearch.env.NodeEnvironment.lambda$new$0(NodeEnvironment.java:270) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:203) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:267) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.node.Node.<init>(Node.java:296) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.node.Node.<init>(Node.java:265) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:212) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:212) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-6.5.4.jar:6.5.4] ... 6 more
最新发布
08-14
<think>我们有两个主要问题需要解决: 1. Docker中运行Elasticsearch时,由于宿主机目录权限不足导致的`java.nio.file.AccessDeniedException`错误。 2. 使用已弃用的GC选项(UseConcMarkSweepGC)的警告。 根据引用[1]和[2],我们知道错误原因是宿主机挂载目录的权限不足,导致容器内Elasticsearch进程无法写入数据目录。 解决方案步骤: 一、解决权限问题(宿主机目录权限) 1. 确保宿主机上用于挂载的目录(例如`/data/elasticsearch`)存在,并且具有合适的权限。 2. 由于Elasticsearch在容器内以`elasticsearch`用户运行(UID为1000),我们需要将宿主机目录的所有权改为UID 1000(或者使用其他方式确保该用户有写权限)。 二、更新GC配置(解决警告) 在Elasticsearch 7.x及以上版本中,建议使用G1GC替代已弃用的CMS。 三、调整Docker运行命令或Docker Compose配置,确保正确设置挂载目录和JVM选项。 具体操作: 步骤1:在宿主机上创建数据目录并设置权限 ```bash # 创建目录(如果不存在) sudo mkdir -p /path/to/your/elasticsearch/data # 更改目录所有权给UID 1000(容器内elasticsearch用户的UID) sudo chown -R 1000:1000 /path/to/your/elasticsearch/data # 确保目录具有读写权限 sudo chmod -R 755 /path/to/your/elasticsearch/data ``` 步骤2:修改JVM配置(通过环境变量或挂载自定义jvm.options文件) 方法一:通过环境变量(推荐,简单) 在运行容器时,设置环境变量`ES_JAVA_OPTS`来覆盖GC设置: ```bash -e ES_JAVA_OPTS="-XX:+UseG1GC -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30" ``` 方法二:挂载自定义jvm.options文件 1. 在宿主机上创建一个自定义的jvm.options文件,例如`/path/to/config/jvm.options`,内容如下: ``` ## JVM configuration ## IMPORTANT: JVM heap size ## You should always set the min and max JVM heap ## size to the same value. For example, to set ## the heap to 4 GB, set: ## ## -Xms4g ## -Xmx4g ## ## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html ## for more information ## -Xms1g -Xmx1g ## G1GC Configuration -XX:+UseG1GC -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 ## Prefer IPV4 -Djava.net.preferIPv4Stack=true ``` 2. 在运行容器时挂载这个文件: ```bash -v /path/to/config/jvm.options:/usr/share/elasticsearch/config/jvm.options.d/gc.options ``` 步骤3:运行Elasticsearch容器 使用Docker命令运行: ```bash docker run -d \ --name elasticsearch \ -p 9200:9200 \ -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-XX:+UseG1GC -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30" \ -v /path/to/your/elasticsearch/data:/usr/share/elasticsearch/data \ docker.elastic.co/elasticsearch/elasticsearch:7.17.10 ``` 或者使用Docker Compose(推荐): 创建`docker-compose.yml`文件: ```yaml version: '3.8' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.10 container_name: elasticsearch environment: - discovery.type=single-node - ES_JAVA_OPTS=-XX:+UseG1GC -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 volumes: - /path/to/your/elasticsearch/data:/usr/share/elasticsearch/data ports: - 9200:9200 - 9300:9300 ulimits: memlock: soft: -1 hard: -1 networks: - es-net networks: es-net: driver: bridge ``` 步骤4:启动容器 ```bash docker-compose up -d ``` 步骤5:验证 检查容器日志: ```bash docker logs elasticsearch ``` 应该不再出现权限错误和CMS弃用警告。 访问Elasticsearch: ```bash curl http://localhost:9200 ``` 总结: 1. 宿主机目录权限问题:确保挂载目录的UID为1000(或适当权限)。 2. GC警告:通过环境变量或自定义jvm.options文件配置G1GC。 参考引用: [^1]: 错误日志显示`java.nio.file.AccessDeniedException`,通常由宿主机挂载目录权限不足导致。 [^2]: 宿主机目录权限不足会导致容器内无法写入,需要正确设置宿主机目录权限。 如果问题仍然存在,请检查SELinux或AppArmor等安全模块是否阻止了访问。 相关问题: 1. 如何调整Elasticsearch容器的内存限制? 2. Docker中如何运行Elasticsearch集群? 3. 如何备份和恢复Elasticsearch数据?</think>### 解决 Docker 中 Elasticsearch 权限问题与 GC 警告 #### 问题核心原因分析 1. **权限问题** `java.nio.file.AccessDeniedException` 错误表明: - Elasticsearch 容器用户(UID 1000)无权访问宿主机挂载目录[^1][^2] - 宿主机目录权限不足导致容器内写入失败(错误日志具有误导性) 2. **GC 警告问题** `UseConcMarkSweepGC was deprecated` 是由于: - Elasticsearch 默认配置使用已弃用的 CMS 垃圾回收器 - JDK 9+ 版本中 CMS 已被标记为废弃 --- ### 完整解决方案(Docker 环境) #### 步骤 1:修复宿主机目录权限 ```bash # 创建数据目录(如果不存在) sudo mkdir -p /path/to/elasticsearch/data # 关键操作:授予 UID 1000 权限(Elasticsearch 容器用户) sudo chown -R 1000:1000 /path/to/elasticsearch/data # 验证权限 ls -ld /path/to/elasticsearch/data # 应显示 drwxr-xr-x 1000 1000 ``` #### 步骤 2:修正 Docker 运行命令 ```bash docker run -d \ --name elasticsearch \ -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e "ES_JAVA_OPTS=-Xms1g -Xmx1g -XX:+UseG1GC" \ # 关键:使用 G1GC 替代 CMS -v /path/to/elasticsearch/data:/usr/share/elasticsearch/data \ # 绑定修复后的目录 docker.elastic.co/elasticsearch/elasticsearch:7.17.10 # 指定版本 ``` #### 步骤 3:验证容器状态 ```bash # 检查容器是否运行 docker ps -a | grep elasticsearch # 查看启动日志(确认无错误) docker logs --tail 50 elasticsearch ``` #### 步骤 4:可选自定义配置 创建自定义 `jvm.options` 文件: ```ini ## /path/to/config/jvm.options -Xms2g -Xmx2g -XX:+UseG1GC -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 ``` 运行命令添加挂载: ```bash -v /path/to/config/jvm.options:/usr/share/elasticsearch/config/jvm.options.d/gc.options ``` --- ### 关键配置说明 | 配置项 | 作用 | 推荐值 | |--------|------|--------| | `chown 1000:1000` | 授予容器用户权限 | 必需 | | `-e ES_JAVA_OPTS` | 设置 JVM 参数 | `-XX:+UseG1GC` | | 数据目录权限 | 宿主机目录所有权 | `uid:gid = 1000:1000` | | 安全模块 | 禁用 SELinux/AppArmor | `setenforce 0` (临时) | > **重要提示**:Elasticsearch 容器使用固定 UID 1000 运行,宿主机目录必须匹配此 UID[^1][^2] --- ### 验证成功标准 1. 日志无权限错误: ```log [INFO ] [o.e.n.Node] [node-1] initialized [INFO ] [o.e.g.GatewayService] [node-1] recovered [0] indices ``` 2. API 响应正常: ```bash curl http://localhost:9200 # 应返回包含 "cluster_name" 的 JSON ``` 3. 无 GC 警告: ```log OpenJDK 64-Bit Server VM warning: ... # 此警告应消失 ``` ### 故障排查流程图 ```mermaid graph TD A[启动失败] --> B{查看日志} B -->|AccessDeniedException| C[检查宿主机目录权限] C -->|权限正确| D[检查SELinux/AppArmor] C -->|权限错误| E[chown 1000:1000] D -->|安全模块阻止| F[临时禁用并测试] D -->|无问题| G[检查磁盘空间] ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值