Logstash生成大量jruby临时目录占满磁盘空间,求原因分析
问题原因及解决办法
核心原因:JRuby临时目录未自动清理
Logstash基于JRuby运行,默认会在/tmp下创建以jruby-为前缀的临时目录,用来存放JRuby的编译缓存、临时脚本或插件运行时的临时文件。出现大量残留的情况,通常有以下具体诱因:
- 插件资源泄漏:你使用的OpenSearch输出插件(7.16.3版本)可能存在资源未正确释放的问题,导致JRuby无法触发临时目录的自动清理机制。尤其是插件频繁建立/断开连接、处理大量数据时,容易留下未回收的临时文件。
- Logstash异常退出:如果Logstash不是正常停止(比如强制kill、崩溃),JRuby的清理钩子没机会执行,这些临时目录就会残留下来。
- 系统tmp目录清理规则失效:Ubuntu 18.04默认的
systemd-tmpfiles清理服务可能配置出问题,或者因故未正常运行,导致超过保留期限的临时文件没被删除。
快速解决&长期优化方案
- 手动清理残留目录:先释放空间,执行命令:
sudo rm -rf /tmp/jruby-* - 配置Logstash使用自定义临时目录:修改Logstash的
jvm.options文件,添加JVM参数指定专属临时目录,避免和系统tmp混在一起,也方便单独管理:
记得创建这个目录并设置Logstash用户的读写权限:-Djava.io.tmpdir=/var/logstash/tmpsudo mkdir -p /var/logstash/tmp sudo chown logstash:logstash /var/logstash/tmp - 检查插件更新:虽然系统包已更新,但OpenSearch插件可能有独立的bug修复版本,尝试升级到对应分支的最新兼容版本,解决资源泄漏问题。
- 修复系统tmp清理机制:检查
systemd-tmpfiles配置,确保/tmp目录的清理规则正常。查看/usr/lib/tmpfiles.d/tmp.conf,确认有类似如下配置:
这个配置表示D /tmp 1777 root root 10d/tmp下超过10天的文件会被自动清理,若缺失或异常,修复后重启服务:sudo systemctl restart systemd-tmpfiles-clean.timer
内容的提问来源于stack exchange,提问作者MaGaroo
相关产品推荐
相关产品推荐

