logging - "tail -f"使磁盘已满?

标签 logging disk tail sunos

我们的应用程序服务器 (sunOS) 总是磁盘满了。我们的基础设施团队说这是由太多的“tail -f”进程引起的。因为app频繁轮转日志文件,导致死链接,没有磁盘空间?
我以前从未听说过这个。该命令真的会导致磁盘已满吗?

最佳答案

在对该文件的所有引用都消失之前,无法回收文件占用的空间。因此,任何打开该文件的进程都将阻止该文件从磁盘中删除。

一个活跃的tail -f例如,跟随文件。

如果需要删除这些文件以释放磁盘空间(例如,因为它们非常大,或者它们的数量非常多),那么周围存在保存对它们的引用的进程将阻止它们被删除,并最终导致磁盘填满向上。

编辑以回应对另一个答案的评论:

您报告的诊断结果正是您在 Adam 和我所描述的情况下所期望看到的。 df报告 56G的磁盘正在使用中,并且 du报告只有 10G在文件夹中可见。差异是因为有46G已从文件夹中删除但无法从磁盘物理删除的文件,因为某些进程持有对它们的引用。

自己试验这个很容易:找到一个可以安全使用的文件系统,然后创建一个庞大的文件。编写一个 C 程序,打开文件并进入无限循环。现在,请执行以下操作:

  • 启动程序
  • 检查 df 的输出
  • rm文件
  • 检查 df 的输出再次
  • 停止你的程序
  • 检查 df 的输出再次

  • 您将看到 df 的输出rm后不变ing 文件,但一旦停止程序就会改变(从而删除对文件的最后一个引用)。

    如果您需要更多证据证明这就是正在发生的事情,您可以从 /proc 获取信息。文件系统,如果你有的话。具体来说,找到 tail -f 之一的 PID进程(或您认为可能是原因的其他进程),然后查看目录 /proc/<pid>/fd查看它打开的所有文件。

    (我家里没有 *nix,所以在这种情况下,我实际上无法查看您会看到的内容 /proc/<pid>/fd)

    关于logging - "tail -f"使磁盘已满?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9799451/

    相关文章:

    backup - rsync 日志中的 f++++++++++ 是什么意思?

    sql - 如何将查询记录到数据库驱动程序?

    algorithm - C-SCAN(电梯)算法如何导致饥饿?

    mysql - 具有 MEMORY 存储引擎的 MySQL 数据库是否会持久保存到磁盘上?

    linux - tail 和 grep 文件以及按 IP 地址的独特颜色

    c++ - 消除类模板中基类名称的歧义

    linux - Bash 监控磁盘使用情况

    linux - 使用 unix 命令通过 http 流式传输日志文件数据。尾部和 curl 的组合

    java - Wildfly 日志记录模块排除不适用于大型 Web 应用程序