Linux

如何防止子樹刪除(rm -rf)使其他程序無法獲得磁碟 I/O?

  • October 22, 2013

我們有一個非常大(多 GB)的 Nginx 記憶體目錄,用於一個繁忙的站點,我們有時需要一次性清除所有目錄。我過去通過將記憶體文件夾移動到新路徑,在舊路徑上創建新記憶體文件夾,然後rm -rfing 舊記憶體文件夾來解決此問題。

然而,最近,當我需要在一個忙碌的早晨清除記憶體時,來自 I/O 的 I/Orm -rf使我的伺服器程序無法訪問磁碟,因為 Nginx 和它所面向的伺服器都是讀取密集型的。當 CPU 處於空閒狀態並rm -rf佔用 98-99% 的磁碟 IO 時,我可以看到負載平均攀升iotop

ionice -c 3在呼叫時嘗試過rm,但它似乎對觀察到的行為沒有明顯的影響。

有什麼辦法可以馴服rm -rf更多的共享磁碟?我是否需要使用一種不同的技術來從中獲取線索ionice

更新:

有問題的文件系統是 AWS EC2 實例儲存(主磁碟是 EBS)。/etc/fstab條目如下所示:

/dev/xvdb       /mnt    auto    defaults,nobootwait,comment=cloudconfig 0       2

從此頁面收集的所有數據。 以下是刪除大型文件目錄的一些選項。查看文章以了解其製作方式的詳細資訊。

命令經過的系統時間 %CPU cs1* (Vol/Invol)
rsync -a –delete empty/a 10.60 1.31 95% 106/22
查找 b/ -type f -delete 28.51 14.46 52% 14849/11
查找 c/ -type f | xargs -L 100 rm 41.69 20.60 54% 37048/15074
查找 d/ -type f | xargs -L 100 -P 100 rm 34.32 27.82 89% 929897/21720
rm -rf 31.29 14.80 47% 15134/11

*cs1 是上下文切換自願和非自願

引用自:https://serverfault.com/questions/546177