可以使“ du”程序的攻击性降低吗?


21

我们有一份常规工作,负责du汇总多个子目录,找出最严重的违规者,然后使用输出结果来查找是否有事情在迅速上升以发现潜在问题。我们使用diff快照来比较它们。

有一个顶级目录,其中包含许多(几百个)子目录,每个子目录可能包含十个(数千个)(或更多)文件。

du -s在这种情况下,“ ”可能会激增IO的侵略性,从而导致我们的服务器抢占其缓存,然后出现大量的IO峰值,这是非常不受欢迎的副作用。

可以使用什么策略来获取相同的数据,而不会产生不必要的副作用?


9
在德国,您可以将其替换为“ Sie”。
Federico Poloni

Answers:


28

看一看ionice。来自man ionice

该程序设置或获取程序的io调度类和优先级。如果未提供任何参数或仅给出-p,ionice将查询该进程的当前io调度类和优先级。

du使用最低优先级的“空闲” I / O类运行,可以执行以下操作:

ionice -c 3 du -s

这应该du避免干扰其他进程的I / O。您可能还需要考虑对程序进行重新设置以降低其CPU优先级,如下所示:

renice -n 19 "$duPid"

您也可以在初始化时同时执行这两项操作:

nice -n 19 ionice -c 3 du

5
要限制现有程序,您需要调用renice而不是nice。要du同时从ionice和nice 入手,可以链接两个程序:nice -n19 ionice -c3 du
jofel

nice本身也会影响I / O调度程序的优先级,而不仅仅是CPU。
约旦

1
就我所知(至少在Linux中),@ jordanm nice仅会影响CPU的美观程度(这可能间接影响I / O,但不应影响I / O调度程序的优先级)。您在哪里看到这种行为?是否记录在某处?
克里斯·

@ChrisDown-我记得在理解Linux内核
jordanm

@jordanm嗯,我有那本书。我快速浏览了一下,仅发现第263页提供了有关的明确详细信息nice,并且只讨论了CPU基本时间量。您知道这本书在哪里吗?我很想读权威人士透露,国家,它没有提到man niceman 2 niceman 2 setpriorityinfo niceinfo 'nice invocation'据我所知,这是因为一些去到相当多的细节,如何在陌生的nice电话工程及其作用。
克里斯·

4

如果单个目录中有大量文件,这可能是I / O尖峰的原因,因为许多文件系统不能很好地处理单个目录中的大文件树。将其拆分为更多的子目录可以为您提供帮助。如果单个目录中的文件超过10k,这会引起问题,则应将其拆分。

至于跟踪磁盘使用情况,您首先可以看一下df,如果那里的使用价值没有迅速上升,那么子目录也没有,您可以du完全跳过。

另一个选择是磁盘配额系统,如果文件系统支持的话,该配额系统会持续跟踪使用情况。


该系统是一个构建服务器场,因此目录中的文件数量实际上取决于我们构建的组件的开发人员。df不会很有效-问题是我们确实有清理脚本,因此我们可能看不到任何变化,但是却错过了自动作业的早期警告,因为该作业正在积极占用磁盘空间。我们使用zabbix监视整个磁盘的使用情况,但是了解运行情况有些困难的各个目录非常重要。
Danny Staple

0

除此以外,ionice您还可以尝试使磁盘访问更加高效。这可以通过执行尝试

find /du/root -printf ""
find /du/root -perm 777 -printf ""

首先(也许ionice也可以)。如果文件太多,它将不起作用。多少是多少取决于可用RAM的数量。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.