У нас есть очень большой (несколько ГБ) каталог кэша 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
Ответы:
Все данные собраны с этой страницы. Ниже приведены некоторые варианты удаления большого каталога файлов. Проверьте рецензию на детали того, как это было произведено.
* cs1 - переключение контекста добровольно и невольно
источник
rsync
работает прямо сейчас. Возможно, еще слишком рано говорить об этом, и может помочь то, что я не запускаю его в разгар напряженного утра, но сервер все еще реагирует и средняя нагрузка управляема.ionice -c 3 nice -19 rsync -a --delete /mnt/empty/ /mnt/nginx-cache-old
nice
иionice
, или по крайней мере не уничтожить сервер , какrm -rf
сделал.Удаление файлов выполняет только операции с метаданными в файловой системе, на которые не влияет ionice.
Самый простой способ, если вам сейчас не нужно дисковое пространство, выполнять в непиковые
rm
часы.Более сложный способ, которым МОЖЕТ работать, состоит в том, чтобы распространять удаленные данные во времени. Вы можете попробовать что-то вроде следующего (обратите внимание, что предполагается, что ваши пути и имена файлов НЕ содержат пробелов!):
Также обратите внимание, что вы не можете использовать
rm -f
в первой команде, потому что тогда цикл не остановится (это зависит от кода завершения ошибки,rm
когда нет аргумента).Вы можете настроить его, изменив количество удалений за цикл (в нашем примере 100) и продолжительность ожидания. Однако это может не сработать, поскольку файловая система все еще может собирать обновления метаданных таким образом, чтобы у вас возникали проблемы с нагрузкой ввода-вывода. Вы просто должны попробовать.
источник
while
Цикл , кажется, делает трюк , когдаhead -n 50
. 100 все еще медленно поднимал среднюю нагрузку выше критической, что говорит мне о слишком большой конкуренции за ресурсы.Вы можете связать его с командой «nice».
ionice -c 3 nice -19 rm -rf /some/folder
Это меняет приоритет процесса на машине.
источник
nice
кажется, что он имеет почти такой же эффект, какionice
и ничто заметное.rm -rf
имел 99%iotop
.