hdfs 磁盘占用 文件夹_占用磁盘的文件

hdfs 磁盘占用 文件夹

上个月,我介绍了质量破坏者系列,该系列从企业的运营环境和非功能性需求的角度探讨了对应用程序质量的常见影响。 解决这些影响只是权衡问题,没有一个解决方案可以解决所有问题。 这个月我将研究一个奇怪但并非罕见的困境。

应用失败的麻烦

操作服务台已通知SHEEP Web开发人员,用户抱怨消息没有传递到旧系统。 开发人员开始研究问题; 他们检查了WebSphere®MQ组件,它似乎运行正常。 他们检查WebSphere Application Server组件,它是否正常工作。 然后,他们查看其应用程序的日志文件,没有看到任何错误。 他们继续查看消息日志,其中记录了每条消息的副本,但找不到所需的消息。 一名团队成员开始调试应用程序,以了解发生了什么。 几个小时后,另一位成员指出:“嘿,您是否注意到磁盘驱动器只有大约10 KB的可用空间?”

那就是问题所在。 该应用程序的消息部分尝试创建其消息日志条目,但由于磁盘空间不足而无法创建。 当它尝试在日志文件中报告此错误时,由于磁盘空间不足,它也无法显示。 但是程序是在磁盘空间不受限的情况下编写的,因此可以通过不发送消息继续进行处理来恢复程序。

SHEEP Web团队对系统上的日志文件和临时文件的数量感到惊讶。 其中一些文件大小各为数百MB。 当团队意识到他们必须关闭某些组件以截断日志文件时,又产生了另一个挫败感。 在删除了大多数日志文件并重新启动应用程序之后,团队可以将其释放回用户。

一般副产品

几乎每个应用程序,程序产品或操作系统都会创建某种类型的副产品。 这些副产品无法为用户社区提供任何直接价值。 副产品是具有短暂但使用寿命长的瞬态对象,它是程序在其处理过程中创建的,通常会记录临时结果,记录进度或记录错误。 在大多数情况下,这些临时对象是文件或数据库表。

输出类型

以下列表是可能产生的临时文件或数据库表的示例。

  • 日志文件(事件日志)记录了程序执行过程中发生的事件和错误。
  • 安装文件将安装程序或记录在安装过程中修改的组件。
  • 程序创建的临时文件包含在不同处理步骤或不同组件之间传递的中间信息。
  • 调试文件是程序执行的详细跟踪。
  • 事务日志是存储有关用户事务的详细信息的文件。
  • 回滚映像是包含替换的组件或数据的详细信息或快照的文件,以便可以恢复以前的系统状态。

副产品寿命

临时对象的生存期很短,一旦用户会话结束或程序结束,大多数临时对象就没有价值或目的。 创建了许多临时对象以使开发人员能够诊断问题。 创建一些临时对象以支持程序恢复和执行恢复。 不管目的如何,瞬态物体的使用寿命都是有限的,通常以小时或天为单位。

副产品位置

在大多数情况下,应用程序会创建并维护自己的目录或数据库架构集,以在其中存储临时对象。 通常,该应用程序使用多个位置而不是一个位置。 这意味着您必须监视多个位置。

副产品的内容和格式

临时对象的内容是特定于应用程序的。 对象的格式可以是人类可读的文本,二进制,压缩的,甚至可以是数据库表中的格式。

瞬态如何继续

临时对象是大多数应用程序中必不可少的部分。 但是,处理它们以使它们以后不会引起操作问题可能很困难。 由于没有完美的单一解决方案,架构师会选择最接近满足要求的解决方案,并创建支持结构来填补空白。

您可以采用几种方法来管理临时文件,例如日志文件。 每种都有其优点和缺点。 其中的一些方法受代码包(例如log4j)支持。

唯一命名,然后左

该应用程序创建瞬态对象的唯一命名实例,然后将其保留。 许多语言或操作系统API提供了可以返回唯一文件名的功能。

优点:

  • 该模块易于编写。
  • 程序的多个实例可以运行,并且不会与彼此的临时对象冲突。

缺点:

  • 必须提供单独的设施来清理物体。
  • 在清除发生之前可能会创建大量对象。

唯一命名和删除

该应用程序创建瞬态对象的唯一命名实例,然后在程序结束时将其删除。 您可以选择两种删除对象的方法-立即删除或在程序退出时删除。 即时方法利用了某些操作系统(例如UNIX)的优势,该操作系统允许程序取消链接文件但仍保持文件打开状态。 当程序关闭文件时,文件系统立即释放磁盘空间。 程序退出方法在关闭文件后执行删除操作,通常是程序退出处理的一部分。

优点:

  • 采用直接方法,该模块易于编写; 它涉及执行open()然后执行unlink()操作。
  • 使用程序退出方法,模块变得更加复杂。 它要求程序始终调用退出处理模块,以确保关闭对象然后将其删除。
  • 您可能不需要单独的清理工具。

缺点:

  • 立即方法导致临时对象被隐藏; 结果,显示目录的另一个用户将看不到该文件。 在诊断磁盘空间利用率问题时,这可能会导致问题,因为这些命令将显示空间已被占用,但无法识别文件或拥有进程。
  • 如果程序异常终止,则可能不会调用退出处理方法。 因此,您仍然可能需要单独的清理工具。

通用名称和附加

该程序将打开一个特定文件,例如stdout.log,并追加条目。 该文件在该程序的生命期内始终保持锁定状态。 如果程序的多个实例正在运行,则每个实例都将附加到同一文件。

优点:

  • 该模块易于编写; 它打开用于写入和附加的对象。
  • 由于多个实例写入同一文件,因此有可能研究可能跨越程序一个或多个实例的问题。
  • 您仅管理对象的单个实例。

缺点:

  • 该文件可以非常快地增大。
  • 截断文件的唯一方法是关闭所有正在写入文件的程序。
  • 需要单独的清理工具来定期截断文件。

通用名称和环绕

该程序将打开一个特定文件(例如stdout.log),并写入条目。 一旦文件达到指定的大小,程序将环绕到文件的开头,并覆盖较早的条目。 数据以维护所有条目的方式组织; 在某种程度上,文件的行为类似于循环链表数据结构。

这种方法的一种变体是循环赛 。 代替使用具有复杂链表结构的单个文件,而是使用两个或多个文件。 当一个文件达到指定大小时,程序将关闭它并打开系列中的下一个文件。 当关闭系列中的最后一个文件时,程序将返回到系列的开头并打开第一个文件。

优点:

  • 文件将增长到固定大小,并且不会更大。 结果,更容易确保存在足够的容量来支持文件。

缺点:

  • 支持文件中链表结构的模块很难编写。
  • 当您尝试同步写入同一文件的多个进程时,模块变得更加复杂
  • 如果将其用于日志文件,则很可能以二进制格式(人类不可读)进行编码。
  • 如果以二进制格式存储,则将需要单独的工具来读取文件。
  • 如果用于日志文件并且出现循环错误情况,则循环错误可能会覆盖原始错误事件。

一个普通的名字和超脱

这种方法类似于上面列出的通用名称和附加方法,但有一个更改:程序会定期关闭文件并打开一个新实例。 重命名文件的分离实例,通常是为了反映创建或分离文件时的时间戳。

优点:

  • 当前文件比使用common和append方法小。

缺点:

  • 该模块具有中等复杂度; 必须添加其他逻辑以强制定期关闭和打开瞬态文件。
  • 如果需要在程序的多个实例之间进行同步,则将复杂度添加到模块中。
  • 您需要单独的工具来清理分离的对象。
  • 如果将这种方法用于日志文件,则用于研究问题的信息可能会涉及多个文件。

共享文件服务

共享文件服务是一个单独的进程,所有其他应用程序进程都使用该进程来处理临时文件。 一个示例是Windows中提供的事件日志服务,该服务提供了一组API,应用程序可以使用这些API将事件提交给事件服务。 然后,事件服务将写入事件日志对象。 应用程序使用某种进程间通信机制(例如套接字或队列)将信息传输到共享文件服务。 将这种机制包装在可重用的模块和公共API中是一个好主意。 通常,共享文件服务不需要响应。

优点:

  • 应用程序中的每个程序都使用一致的API来处理瞬态文件,这对日志文件特别有用。
  • 所有事件都记录在一个位置,这有助于解决问题和管理文件。

缺点:

  • 程序取决于单独的过程。 如果该过程不可用,则信息可能会丢失。
  • 与进程间通信机制相关的问题可能包括锁定,会话建立,连接限制,同步等。
  • 您可能需要一些工具来监视共享文件服务并确保其正在运行。
  • 您可能还需要一些工具来管理由共享文件服务创建的一个或多个文件。 共享文件服务可能会使用上面列出的方法之一来管理临时对象。
  • 共享文件服务和接口API可以是自定义开发的,也可以基于未完全满足所需要求的可用程序产品。

供您考虑

通过管理瞬态对象的方法多种多样,作为架构师,您如何决定使用哪种对象?

正如优点和缺点所显示的那样,没有一种方法是完美的。 每个应用程序都需要某些级别的附加功能,这些功能通常超出了应用程序的范围,但是必须实施才能使应用程序正常运行。

以下是在决定最佳使用方法时要问自己的一些问题:

  • 哪种类型的信息写入瞬态对象? 事件日志文件比事务日志更易于使用。
  • 对于瞬态对象来说,直接使人可读是多么重要? 这将确定将使用ASCII文件格式还是二进制格式。 二进制格式通常可以导致文件更小。
  • 您可以创建一种工具来管理和清理应用程序遗留的瞬态对象吗? 这是基本应用程序本身以外的其他功能。
  • 由于新的记录保存法律(例如2002年的《萨班斯-奥克斯利法案》)的缘故,应用程序是否必须在较长时间内保留任何瞬态信息? 在这种情况下,临时对象管理必须包含存档功能。
  • 暂态对象的保留期是多少? 日志文件可能需要保留几天,以帮助解决任何问题。 事务日志可能需要保留几个月,以协助进行业务研究。 间歇性文件可以立即删除。
  • 应用程序涉及多少个流程和系统? 与在单个处理器上运行的独立应用程序相比,分布式应用程序对瞬态对象的要求不同。
  • 几个进程会共享临时对象吗? 共享文件需要同步和锁定支持,而非共享文件则不需要。
  • 是否要求应​​用程序中的所有进程都与瞬态对象一致地工作? 例如,XML可能是所有临时对象的指定格式。 或者,每个瞬态对象可能具有特定于其用法的高度调整的结构。
  • 临时对象是否包含应保护的信息? 有时,临时对象包含机密信息。 这种情况需要额外的工作,以确保仅受授权的流程和代理保护和使用数据。
  • 发生磁盘空间异常时,应用程序应如何处理? 在某些情况下,应用程序可以继续运行,但在其他情况下,应停止运行。

综上所述

应用程序如何使用有限的系统资源(例如管理日志文件)应成为应用程序非功能性需求的容量部分的一部分。

每个应用程序都会产生副产品。 其中包括日志文件,事务日志,临时对象等。 如果不理会这些副产品,则它们可能会占用有限的磁盘空间并引起应用程序问题。 您可以选择几种管理这些副产品的方法。 没有一种方法适合所有情况。 同样,业务和外部力量也会影响副产品的管理方式。


翻译自: https://www.ibm.com/developerworks/web/library/wa-qualbust2/index.html

hdfs 磁盘占用 文件夹

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值