tar gzip замедляет работу сервера
У меня есть резервный скрипт, который:
- сжать некоторые файлы
- генерировать MD5
- скопируйте сжатый файл на другой сервер.
- другой сервер заканчивает сравнение 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/*.* \