
У нас есть cron-задание на производственном веб-сервере, которое требует архивирования файлов со всей файловой системы. Оно выполняется около 105 минут, и в течение этого времени Apache начинает подкачку, потому что все это чтение нескольких гигабайт файлов увеличило объем памяти для кэша файловой системы.
Данные, которые считывает tar, не должны находиться в кэше файловой системы. Они идут в tarfile и все. Есть ли что-то, где мы можем сказать что-то вроде tar cvf whatever/ --no-system-file-buffer-reads
? Мое чтение man tar
не находит ничего, что могло бы помочь.
Не нужно указывать, что это можно рассматривать как ситуацию типа "Док, мне больно, когда я так делаю! Так что не делай так". Каким-то образом нам нужно сбрасывать файлы в tar-файл, поэтому не делать так — не вариант.
решение1
Я думаю, что на этот вопрос уже дан ответ.здесь:
Здесьnocacheутилита, которая может быть добавлена к команде, например ionice и nice. Она работает путем предварительной загрузки библиотеки, которая добавляет
posix_fadvise
флагPOSIX_FADV_DONTNEED
к любым открытым вызовам.Проще говоря, он сообщает ядру, что кэширование не требуется для этого конкретного файла; ядро затем обычно не будет кэшировать файл. Смотритездесьдля технических подробностей.
Он творит чудеса для любых крупных задач копирования, например, если вы хотите создать резервную копию многотерабайтного диска в фоновом режиме с минимальным влиянием на работающую систему, вы можете сделать что-нибудь попутно
nice -n19 ionice -c3 nocache cp -a /vol /vol2
.