在linux上删除大量文件会占用CPU

Modified on: Sun, 27 Oct 2019 15:40:02 +0800

我在RHEL服务器上生成了超过50GB的缓存文件(典型文件大小为200kb,因此没有大量文件)。当我尝试删除这些文件时,需要8-10个小时。

然而,更大的问题是系统负载在这8-10小时内变得至关重要。无论如何,在删除期间我可以控制系统负载。

我尝试使用

nice -n19 rm -rf *

但这对系统负载没有帮助。

P.S。我在superuser.com上提出了同样的问题但是没有得到足够好的答案,所以在这里尝试。

作者:Community,Sanjay

最佳答案

以下是各种操作和文件系统的基准测试供您参考。 (在繁忙的系统上,你当然会得到不同的结果,但希望这会让你知道会发生什么)。

如果我在你的椅子上,我会尝试获得该场景的基线基准:

  • 确定操作将对裸机硬件隔离其他所有内容所需的时间(是的,它应该花费很多,甚至在相当旧的硬件上需要7-8小时)。
  • 尝试添加通常以受控方式发生的其他操作,并查看实际使其运行的内容

一些数字。

在5岁的笔记本上,
ext3安装了rw,noatime,运行顶级,没有更多
用shell脚本create10kdirs.sh

创建10k目录

#!/bin/bash for i in $(seq 10000) do mkdir $i done

sudo time ./create10kdirs.sh
24.59user
20.70system
0:47.04elapsed
96%CPU(0avgtext + 0avgdata 0maxresident)k80inputs + 8outputs(1major + 2735150minor)pagefaults 0swaps

删除10k目录
sudo time rm -rf
0.10user
19.75system
0:20.71elapsed
95%CPU(0avgtext + 0avgdata 0maxresident)k0inputs + 8outputs(0major + 222minor)pagefaults 0swaps

相同的硬件,ext4已安装rw,noatime
用shell脚本创建10k目录
sudo时间create10kdirs.sh
23.96user
22.31system
0:49.26elapsed
93%CPU(0avgtext + 0avgdata0maxresident)k1896inputs + 8outputs(20major + 2715174minor)pagefaults 0swaps

删除10k目录
sudo time rm -rf
0.13user
16.96system
0:28.21elapsed
60%CPU(0avgtext + 0avgdata0maxresident)k10160inputs + 0outputs(1major + 219minor)pagefaults0swaps

4岁的笔记本,xfs安装了rw,relatime,nobarrier on USB
sudo时间create10kdirs.sh
14.19user
13.86system
0:29.75elapsed
94%CPU(0avgtext + 0avgdata0maxresident)k432inputs + 0outputs(1major + 2735243minor)pagefaults 0swaps


删除10k目录
sudo time rm -rf
0.13user
2.65system
0:08.20elapsed 强>
33%CPU(0avgtext + 0avgdata 0maxresident)k120inputs + 0outputs(1major + 222minor)pagefaults 0swaps

结论:
这个旧硬件将在大约21s * 40 = 12m40s内擦除ext3上的400k小文件+文件夹。在xfs(与nobarriers)上,它将在大约5分20秒内完成。
在两个测试用例中,测试机器都没有负载很重,但对我而言,您的问题似乎与您选择的文件系统没有严格关系。

EDIT2
此外,在运行上面的基准测试后,我去尝试删除
找 。 -mindepth 1 -maxdepth 1 -delete

和结果!:

EXT3
删除10k目录
sudo时间找到。 -mindepth 1 -maxdepth 1 -delete
0.04user
0.44system
0:00.88elapsed 强>
55%CPU(0avgtext + 0avgdata 0maxresident)k516inputs + 8outputs(1major + 688minor)pagefaults0swaps

EXT4

删除10k目录
sudo时间找到。 -mindepth 1 -maxdepth 1 -delete
0.05user
0.66system
0:01.02elapsed 强>
70%CPU(0avgtext + 0avgdata 0maxresident)k568inputs + 0outputs(1major + 689minor)pagefaults交换

XFS

删除10k目录
sudo时间找到。 -mindepth 1 -maxdepth 1 -delete
0.06user
0.84system
0:04.55elapsed
19%CPU(0avgtext + 0avgdata 0maxresident)k416inputs + 0outputs(3major + 685minor)pagefaults 0swaps

真正的结论是rm -rf不是很聪明,而且它对大树的表现不佳。 (假设我的测试用例非常具有代表性。)

注意:我也测试了xargs变体并且速度很快,但速度不如上面那么快。

作者:,Unreason

相关问答

添加新评论