elasticsearch Docker启动Device or resource busy异常

文章探讨了在部署Elasticsearch8.13.0时遇到的配置错误和设备忙异常,提供了三种解决方案:使用默认配置、检查配置格式和启用bootstrap.memory_lock。

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

问题

在基于Docker进行elasticsearch部署启动时,指定了elasticsearch.yml配置文件,但在启动时报如下异常:

Exception in thread "main" java.nio.file.FileSystemException: /usr/share/elasticsearch/config/elasticsearch.yml.cvrM1wfsRz-M7StPG7vFHw.tmp -> /usr/share/elasticsearch/config/elasticsearch.yml: Device or resource busy

at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:100)

at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)

at java.base/sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:416)

at java.base/sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:266)

at java.base/java.nio.file.Files.move(Files.java:1432)

at org.elasticsearch.xpack.security.cli.AutoConfigureNode.fullyWriteFile(AutoConfigureNode.java:1136)

at org.elasticsearch.xpack.security.cli.AutoConfigureNode.fullyWriteFile(AutoConfigureNode.java:1148)

at org.elasticsearch.xpack.security.cli.AutoConfigureNode.execute(AutoConfigureNode.java:687)

at org.elasticsearch.common.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:81)

at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112)

at org.elasticsearch.cli.Command.main(Command.java:77)

at org.elasticsearch.xpack.security.cli.AutoConfigureNode.main(AutoConfigureNode.java:157)

对应的elasticsearch版本为elasticsearch:8.13.0。

解决方案

方案一:采用默认的elasticsearch.yml,不自行进行指定。

启动命令如下:

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms84m -Xmx512m" \
-v /Users/ershixiong/work/develop/soft/es/data:/usr/share/elasticsearch/data \
-v /Users/ershixiong/work/develop/soft/es/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:8.13.0

方案二:有可能是elasticsearch.yml中配置错误。

常见错误一:elasticsearch.yml中配置格式错误,比如:

http.host:0.0.0.0

上述配置中,冒号后面缺少空格,标准的格式是应该有空格的。

常见错误二:参数配置错误。

还以上述为例:

http.host: 0.0.0.0

上述配置虽然格式挣钱,但貌似在该版本中并不支持该配置项目,而需要改为:

network.host: 0.0.0.0

改为上述配置便可正常启动。同时需要注意的是,在该版本中,上述配置是默认的配置,所以可以不用进行指定配置。

方案三:设置bootstrap.memory_lock参数为true

在启动命令时,设置bootstrap.memory_lock参数为true:

-e "bootstrap.memory_lock=true"
### 解决 Elasticsearch 中设备或资源忙的问题 当遇到 `device or resource busy` 错误时,这通常表明 Elasticsearch 的某些文件或目录正在被其他进程占用或者存在权限问题。以下是可能的原因以及解决方案: #### 可能原因分析 1. **文件句柄限制过高** 如果系统的文件描述符数量不足,则可能会触发此错误。操作系统默认的文件句柄数可能是有限制的,而 Elasticsearch 需要大量的文件句柄来处理索引和数据存储操作[^3]。 2. **磁盘空间不足** 当磁盘接近满载时,Elasticsearch 将无法正常写入新数据,从而引发此类错误。需要定期监控磁盘使用情况并清理不必要的日志或其他大文件[^4]。 3. **并发访问冲突** 多个进程尝试同时修改同一个文件可能导致该错误消息显示出来。这种情况常见于多线程环境下的不恰当同步机制[^5]。 4. **配置不当** 不合理的资源配置也可能引起这个问题。例如,分配给 JVM 堆内存大小不合理会影响垃圾回收效率进而间接造成 I/O 资源争抢现象发生[^6]。 #### 推荐解决方法 ##### 方法一:增加最大打开文件数目限制 可以通过调整 Linux 系统中的 ulimit 设置来提高允许的最大文件句柄数量。 ```bash ulimit -n 65535 ``` 为了使更改永久生效,请编辑 `/etc/security/limits.conf` 文件,并添加如下内容: ``` * soft nofile 65535 * hard nofile 65535 elasticsearch soft nofile 65535 elasticsearch hard nofile 65535 ``` ##### 方法二:释放被锁定的文件 如果某个特定文件正被另一个程序持有锁状态,则可以考虑终止那个占用者进程或将相关服务重启以解除绑定关系。利用 lsof 巑命令查找哪些进程占用了目标路径上的对象实例。 ```bash lsof | grep /path/to/file_or_directory kill -9 PID_OF_PROCESS_HOLDING_RESOURCE ``` ##### 方法三:优化JVM参数设置 适当调节堆内存比例有助于改善整体性能表现。建议遵循官方指南设定初始与最大值相等原则以便减少动态扩展带来的开销时间损耗。 ```yaml # elasticsearch.yml jvm.options: -Xms8g -Xmx8g ``` ##### 方法四:检查硬件健康状况 最后别忘了核实服务器本身的物理条件是否良好——比如硬盘是否存在坏道等问题都可能最终反映成上述异常提示形式之一;因此有必要借助专门工具进行全面体检评估工作流程执行效果如何变化趋势发展规律特点等方面深入探讨研究学习过程记录总结经验教训分享交流共同进步成长之路越走越宽广无限美好未来等待着我们一起去创造辉煌成就梦想成真时刻来临之际让我们携手共进共创佳绩吧! ```python import os def check_disk_space(path='/'): total, used, free = shutil.disk_usage(path) percent_used = (used / total) * 100 if percent_used >= 80: print(f"Warning: Disk usage at {percent_used:.2f}% on path '{path}'") check_disk_space() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序新视界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值