`find -delete` 的奇怪行为

`find -delete` 的奇怪行为

我在软件 RAID1 中使用 Ubuntu 12.04 和 2 x 2TB SATA3 硬盘。文件系统是 ext4 data=writeback

当使用find . -maxdepth 1 -name '*' -delete删除目录中的大量文件时,df间隔地执行表明:

最初大量文件被删除,并iotop显示该find操作占用了大部分 IO。

在此处输入图片描述

之后 df显示文件数量保持不变,并iotop显示 IO 使用率现在由jbd2和主导md4_raid1

在此处输入图片描述

几分钟后df显示文件数量再次下降。

有人能解释一下这种现象吗?这是正常的吗?还是我的服务器出了问题?另外,为什么 3 个进程的 IO 使用率同时达到 99.99%?

答案1

这正是我所期望的。Find 查找文件 - 即它从 VFS 读取,当数据不在缓存中时,需要从磁盘中获取。在处理每个文件时,它会将要写入的更改排入队列。在某个时候,写入缓冲区已满,必须将更改写入磁盘 - 此时,执行写入的进程将被阻止,从而发出进一步的写入或读取请求,直到有空间缓冲更多写入。

答案2

可以通过降低进程的I/O优先级来防止系统被阻塞:

ionice -c3 nice -15 find ... -delete

如果这还不够,那么您可以使用 chrt 将进程放入 SCHED_IDLE 类。

相关内容