You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch报No space left on device错误的原因及解决方法

Elasticsearch 8.4.1运行报java.io.IOException: No space left on device错误排查与解决

问题背景

在Ubuntu 22.04虚拟机中安装了Elasticsearch和Kibana 8.4.1,虚拟机配置为2G内存、50G磁盘空间、2核CPU,运行Elasticsearch时出现如下错误:

java.io.IOException: No space left on device

相关服务状态信息:

elastic@elqstic:~$ sudo systemctl status elasticsearch.service
[sudo] password for elastic:
● elasticsearch.service - Elasticsearch
     Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-09-15 11:10:54 UTC; 48min ago
       Docs: https://www.elastic.co
   Main PID: 1459 (java)
      Tasks: 91 (limit: 2196)
     Memory: 1005.3M
        CPU: 4min 46.879s
     CGroup: /system.slice/elasticsearch.service
             ├─1459 /usr/share/elasticsearch/jdk/bin/java -Xms4m -Xmx64m -XX:+UseSerialGC -Dcli.name=server -Dcli.script=/usr/share/elasticsearch/bin/elasticsearch -Dc>
             ├─1519 /usr/share/elasticsearch/jdk/bin/java -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -Djava.security.manager=allow -XX:>
             └─1540 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller

sept. 15 11:11:03 elqstic systemd-entrypoint[1519]:         at org.elasticsearch.ingest.geoip@8.4.1/org.elasticsearch.ingest.geoip.DatabaseNodeService.lambda$retrieveD>
sept. 15 11:11:03 elqstic systemd-entrypoint[1519]:         at org.elasticsearch.server@8.4.1/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingR>
sept. 15 11:11:03 elqstic systemd-entrypoint[1519]:         at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
sept. 15 11:11:03 elqstic systemd-entrypoint[1519]:         at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
sept. 15 11:11:03 elqstic systemd-entrypoint[1519]:         at java.base/java.lang.Thread.run(Thread.java:833)
sept. 15 11:11:03 elqstic systemd-entrypoint[1519]: Caused by: java.io.IOException: No space left on device
sept. 15 11:11:03 elqstic systemd-entrypoint[1519]:         at java.base/java.io.FileOutputStream.writeBytes(Native Method)
sept. 15 11:11:03 elqstic systemd-entrypoint[1519]:         at java.base/java.io.FileOutputStream.write(FileOutputStream.java:349)
sept. 15 11:11:03 elqstic systemd-entrypoint[1519]:         at org.apache.logging.log4j.core@8.4.1/org.apache.logging.log4j.core.appender.OutputStreamManager.writeToDe>

错误原因

虽然虚拟机分配了50G磁盘,但实际可用磁盘空间已耗尽,常见触发场景:

  • Elasticsearch日志未配置滚动策略,长期积累占用大量空间;或GeoIP数据库下载过程中占用临时空间未释放
  • 虚拟机磁盘扩容后未同步扩展系统分区,导致实际可用空间仍为初始小容量
  • 系统临时文件、其他应用占用了大量磁盘空间

解决步骤

1. 排查磁盘占用情况

  • 执行以下命令查看全部分区的空间使用情况,定位满额分区:
    df -h
    
  • 查看Elasticsearch核心目录(日志、数据)的占用情况:
    sudo du -sh /var/log/elasticsearch /var/lib/elasticsearch
    

2. 紧急释放磁盘空间

  • 删除Elasticsearch的旧日志归档文件(不要删除正在写入的.log文件):
    sudo rm -rf /var/log/elasticsearch/*.*.gz
    
  • 清理系统临时文件:
    sudo rm -rf /tmp/*
    

3. 优化Elasticsearch配置避免重复占用

  • 修改日志滚动策略:编辑/etc/elasticsearch/log4j2.properties,配置日志保留天数和单文件大小限制:
    appender.rolling.strategy.type = TimeBasedTriggeringPolicy
    appender.rolling.strategy.interval = 1
    appender.rolling.strategy.max = 7
    
  • 若不需要GeoIP功能,直接禁用对应插件以避免数据库下载占用空间:
    sudo elasticsearch-plugin remove ingest-geoip
    

4. 扩容磁盘空间(若确实容量不足)

  1. 先在虚拟机管理界面扩展磁盘容量至足够大小
  2. 在Ubuntu中扩展分区:
    # 假设磁盘为/dev/sda,分区为/dev/sda1
    sudo growpart /dev/sda 1
    sudo resize2fs /dev/sda1
    

内容的提问来源于stack exchange,提问作者morad della3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:50:27