tar gzip замедляет работу сервера

У меня есть резервный скрипт, который:

  1. сжать некоторые файлы
  2. генерировать MD5
  3. скопируйте сжатый файл на другой сервер.
  4. другой сервер заканчивает сравнение MD5 (чтобы найти ошибки копирования).

Вот основной сценарий:

nice -n 15 tar -czvf $BKP $PATH_BKP/*.* \
| xargs -I '{}' sh -c "test -f '{}' && md5sum '{}'" \
| tee $MD5
scp -l 80000 $BKP $SCP_BKP
scp $MD5 $SCP_BKP

Эта подпрограмма загрузила процессор на 90% при выполнении процедуры gzip, замедляя работу производственного сервера. Я пытался добавить nice -n 15 но сервер все еще висит.

Я уже прочитал 1, но разговор мне не помог.

Каков наилучший подход к решению этой проблемы? Я открыт для новых архитектур / решений:)

3 ответа

Решение

Если вы используете nice, вы меняете приоритет, но это окажет заметное влияние, только если загрузка процессора близка к 100%.

Сервер становится медленным, в вашем случае, не из-за загрузки процессора, а из-за ввода-вывода в хранилище. использование ionice изменить приоритет ввода / вывода и сохранить nice для приоритета процессора.

Вы можете попробовать использовать chrt, чтобы изменить политику планирования программы tar на SCHED_BATCH.

Согласно справочной странице sched_setscheduler (2)

SCHED_BATCH: планирование пакетных процессов (начиная с Linux 2.6.16.) SCHED_BATCH можно использовать только с статическим приоритетом 0. Эта политика аналогична SCHED_OTHER в том смысле, что она планирует процесс в соответствии с его динамическим приоритетом (на основе значения nice). Разница заключается в том, что эта политика заставит планировщика всегда предполагать, что этот процесс интенсивно использует процессор. Следовательно, планировщик будет применять небольшое наказание за планирование в отношении поведения пробуждения, так что этот процесс слегка ухудшается при принятии решений о планировании.

   This policy is useful for workloads that are noninteractive, but do not
   want to lower their nice value, and for workloads that want a determin‐
   istic scheduling policy without interactivity causing extra preemptions
   (between the workload's tasks).

Если вам все еще не повезло, вы можете попробовать вместо этого SCHED_IDLE. Это заставит эту программу проснуться только в том случае, если больше нечего будет запускать.

Это изменяет строку tar на следующую:

nice -n 15 chrt -b tar -czvf $BKP $PATH_BKP/*.* \

Вы пробовали использовать pigz вместо gzip?

Другие вопросы по тегам