我们有一个非常大的(多GB)Nginxcaching目录,对于一个繁忙的站点,我们偶尔需要一次清除所有的内容。 我已经通过将caching文件夹移动到新path,在旧path上创build新的caching文件夹,然后在旧caching文件夹中解决了这个问题。
但最近当我需要在繁忙的早晨清除caching时,来自rm -rf的I / O正在让我的服务器进程受到磁盘访问的困扰,因为Nginx和它前面的服务器都是读取密集型的。 我可以看到负载平均攀升,而CPU空闲, rm -rf在iotop占98-99%的磁盘IO。
我在调用rm时已经尝试了ionice -c 3 ,但是它对于观察到的行为似乎没有明显的影响。
有没有办法驯服rm -rf来分享磁盘? 我是否需要使用不同的技术来从ionice获取线索?
更新:
相关文件系统是AWS EC2实例存储(主磁盘是EBS)。 /etc/fstab条目如下所示:
/dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
从此页面收集的所有数据。 以下是一些删除大文件目录的选项。 检查了这是如何产生的细节writeup。
命令已用系统时间%CPU cs1 *(Vol / Invol) rsync -a -delete空/ a 10.60 1.31 95%106/22 findb / -type f -delete 28.51 14.46 52%14849/11 findc / -type f | xargs -L 100 rm 41.69 20.60 54%37048/15074 findd / -type f | xargs -L 100 -P 100 rm 34.32 27.82 89%929897/21720 rm -rf f 31.29 14.80 47%15134/11
* cs1是上下文开关自愿和非自愿的
删除文件只对文件系统执行元数据操作,不受ionice的影响。
最简单的方法是,如果您现在不需要磁盘空间,那么在非高峰时段执行rm 。
MIGHT工作的更复杂的方式是随着时间推移删除。 你可以尝试下面的东西(注意,它假设你的path和文件名不包含任何空格!):
while find dir -type f | head -n 100 | xargs rm; do sleep 2; done while find dir -type d -depth | head -n 100 | xargs rmdir; do sleep 2; done
另外请注意,你不能在第一个命令中使用rm -f ,因为那么循环不会停止(当没有参数时,它依赖于rm的错误退出代码)。
您可以通过修改每个周期的删除次数(本例中为100)和睡眠持续时间来调整它。 它可能不是真正的工作,因为文件系统可能仍然会堆积元数据更新,使您的IO负载出现问题。 你只需要尝试。
您可以将它与“nice”命令配对。 ionice -c 3 nice -19 rm -rf /some/folder
这改变了机器上进程的优先级。