У нас есть очень большой (несколько ГБ) каталог кеша Nginx для загруженного сайта, который нам иногда нужно очистить сразу. Я решил эту проблему в прошлом, переместив папку кеша на новый путь, создав новую папку кеша по старому пути, а затем rm -rf
в старой папке кеша.
Однако в последнее время, когда мне нужно очистить кеш в напряженное утро, ввод-вывод из rm -rf
истощает мои серверные процессы доступа к диску, поскольку и Nginx, и сервер, для которого он работает, интенсивно читают. Я могу наблюдать рост средней нагрузки, пока процессоры простаивают и rm -rf
занимает 98-99% дискового ввода-вывода в iotop
.
я пробовал ionice -c 3
при вызове rm
, но, похоже, не оказывает заметного влияния на наблюдаемое поведение.
Есть ли способ приручить rm -rf
расшарить диск больше? Нужно ли мне использовать другую технику, которая будет опираться на ionice
?
Обновить:
Рассматриваемая файловая система - это хранилище экземпляров AWS EC2 (основной диск - EBS). В /etc/fstab
запись выглядит так:
/dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
При удалении файлов в файловой системе выполняются только операции с метаданными, на которые ionice не влияет.
Самый простой способ - если вам прямо сейчас не нужно дисковое пространство, выполнить rm
в непиковые часы.
Более сложный способ, которым МОЖЕТ работать, - это распределение удалений по времени. Вы можете попробовать что-то вроде следующего (обратите внимание, что это предполагает, что ваши пути и имена файлов НЕ содержат пробелов!):
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 в примере) и продолжительность сна. Однако на самом деле это может не сработать, поскольку файловая система может по-прежнему накапливать обновления метаданных таким образом, что у вас возникают проблемы с загрузкой ввода-вывода. Надо просто попробовать.
Все данные собраны с этой страницы. Ниже приведены некоторые варианты удаления большого каталога файлов. Ознакомьтесь с описанием, чтобы узнать, как это было произведено.
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 - это произвольное и непроизвольное переключение контекста
Вы можете связать это с командой "nice". ionice -c 3 nice -19 rm -rf /some/folder
Это изменяет приоритет процесса на машине.