解释:Close older closes the file handler for which were not modified for longer then close_older. Time strings like 2h (2 hours), 5m (5 minutes) can be used.
你是否碰见过 Linux 情况下,文件已江山除,然则空间未被释放的情况?这篇小文就会介绍一下,这种问题的一个场景,以及响应的解决筹划。
我们的一台应用办事器,操作体系是 Red Hat Linux,监控报警,/opt/applog文件体系应用率超阈值,整体容量为50G,但发明实际文件容量20G,剩下的30G空间是什么?
- force_close_files: false
- >lsof
- COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
- ...
- filebeat 111442 app 1r REG 253,3 209715229 1040407 /opt/applog/E.20171016.info.012.log
- filebeat 111442 app 2r REG 253,3 209715254 385080 /opt/applog/E.20171015.info.001.log (deleted)
表头各字段,含义如下:
- COMMAND:过程的名称
- PID:过程标识符
- USER:过程所有者
- FD:文件描述符,应用法度榜样经由过程文件描述符辨认该文件。如cwd、txt等
- TYPE:文件类型,如DIR、REG等
- DEVICE:指定磁盘的名称
- SIZE:文件的大年夜小
- NODE:索引节点(文件在磁盘上的标识)
- NAME:打开文件切实其实切名称
可以看出,有一些行中,NAME标识了(deleted)
他的含义,就是这文件已被删除,但打开文件的句柄,并未封闭,再看 COMMAND 的名称是 filebeat,USER 过程所有者是 app,这是我们的日记采集过程,app 用户开启了 filebeat 过程。
我们知道,Linux 情况下,任何事物,都是以文件的情势存在,体系在后台,为每个应用法度榜样,分派了一个文件描述符,他为应用法度榜样和操作体系之间的交互操作供给了通用的接口,既然是文件,就会占用空间,此时可以应用 lsof 指令,他可以列出,当前体系正在打开的文件。
插播一下日记采集平台
传统的开源日记平台,即 ELK,由 ElasticSearch、Logstash 和 Kiabana 三个开源对象构成,个中:
- Elasticsearch 是个开源分布式搜刮引擎,分布式,零设备,主动发明,索引主动分片,索引副本机制,restful 风格接口,多半据源,主动搜刮负载等。
- Logstash 是一个开源的采集对象,他可以对日记进行收集、过滤,并将其存储供今后应用。
- Kibana 是一个开源的图形 Web 对象,可认为 Logstash 和 ElasticSearch 供给日记分析友爱的 Web 界面,可以汇总、分析和搜刮重要数据日记。
常见的安排图,如下所示
对于膳绫擎提到的 filebeat 又是什么?和 ELK 有什么接洽?
因为 logstash 是 jvm 跑的,资本消费比较大年夜,所今后来作者又用 golang 写了一个功能较少然则资本消费也小的轻量级的 logstash-forwarder。不过作者只是一小我,参加http://elastic.co公司今后,因为 es 公擅本身还收购了另一个开源项目 packetbeat,而这个项目专门就是用 golang 的,有全部团队,所以 es 公司干脆把 logstash-forwarder 的开辟工作也归并到同一个 golang 团队来搞,于是新的项目就叫 filebeat 了。
简单来讲,filebeat 就是日记采集的过程 agent,负责采集应用日记文件。
对于我膳绫擎的┞封个问题,之所以有大年夜量的(deleted),未释放文件句柄,还有个背景,就是因为磁盘空间异常有限,临时加了义务,每小时删除12小时前的日记,换句话说,准时义务会主动删除此时 filebeat 正在打开着的一些文件,于是这些文件,就变为了未释放的文件,是以实际文件删除了,但空间未被释放。
解决筹划1:
为了敏捷释放空寄┞芳用,最直接的办法,就是 kill -9 filebeat 过程,此时空间会释放。但并不是大年夜根本解决,准时义务还会删除这些,filebeat 打开的文件,导致空间满。
解决筹划2:
filebeat 的设备文件 filebeat.yml,其实有两个参数: