我们有一个非常大的(多GB)Nginx缓存目录用于繁忙的站点,我们偶尔需要一次清除所有目录.我在过去通过将缓存文件夹移动到新路径,在旧路径上创建新缓存文件夹,然后rm -rfing旧缓存文件夹来解决这个问题.
然而,最近,当我需要在忙碌的早晨清除缓存时,来自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
解决方法
All data gathered from this page.以下是删除大型文件目录的一些选项.查看有关如何生成详细信息的文章.
Command Elapsed System Time %cpu cs1* (Vol/Invol) rsync -a –delete empty/ a 10.60 1.31 95% 106/22 find b/ -type f -delete 28.51 14.46 52% 14849/11 find c/ -type f | xargs -L 100 rm 41.69 20.60 54% 37048/15074 find d/ -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是自愿和非自愿的上下文切换