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

前端之家收集整理的这篇文章主要介绍了在linux上删除大量文件会占用CPU前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在RHEL服务器上生成了超过50GB的缓存文件(典型文件大小为200kb,因此没有大量文件).当我尝试删除这些文件时,需要8-10个小时.

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

我试过用

nice -n19 rm -rf *

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

附:我在superuser.com问了同样的问题,但没有得到足够好的答案,所以在这里尝试.

解决方法

这里有一些 benchmarks用于各种操作和文件系统供您参考. (在繁忙的系统上,你当然会得到不同的结果,但希望这会让你知道会发生什么).

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

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

一些数字.

在5岁的笔记本上,
ext3安装rw,noatime,跑顶,没什么
使用shell脚本create10kdirs.sh创建10k目录

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

sudo时间./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在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 swaps

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变体并且速度很快,但速度不如上面那么快.

猜你在找的Linux相关文章