2013-12-04 7 views
1

Я использую inotify для просмотра каталога и синхронизации файлов между серверами с помощью rsync. Синхронизация работает отлично, а использование памяти в основном не является проблемой. Однако недавно было добавлено большое количество файлов (350 тыс.), Что сказалось на производительности, особенно на процессоре. Теперь, когда rsync запускается, загрузка процессора достигает 90%/100%, а rsync занимает много времени, есть файлы 650k, которые просматриваются/синхронизируются.inotify и rsync для большого количества файлов

Есть ли способ ускорить rsync и только rsync изменил каталог? Или, альтернативно, настроить несколько inotifywaits в отдельных каталогах. Используемый сценарий ниже.

UPDATE: Я добавил --update флаг и использование кажется в основном без изменений

#! /bin/bash 

EVENTS="CREATE,DELETE,MODIFY,MOVED_FROM,MOVED_TO" 

inotifywait -e "$EVENTS" -m -r --format '%:e %f' /var/www/ --exclude '/var/www/.*cache.*' | (
WAITING=""; 
while true; do 
    LINE=""; 
    read -t 1 LINE; 
    if test -z "$LINE"; then 
     if test ! -z "$WAITING"; then 
       echo "CHANGE"; 
       WAITING=""; 
       rsync --update -alvzr --exclude '*cache*' --exclude '*.git*' /var/www/* [email protected]:/var/www/ 
     fi; 
    else 
     WAITING=1; 
    fi; 
done) 

ответ

1

я в конечном итоге удаление опции сжатия (г) и повысит WAITING вар 10 (секунд). Похоже, что это помогло, rsync по-прежнему увеличивает нагрузку на процессор, но он короче. Кредит отправляется на ответ unix stackexchange

0

Вы используете rsync синхронизировать корневой каталог большого дерева, так что я не удивлен на производительность потеря.
Одним из возможных решений является только синхронизация измененных файлов/каталогов, а не всего корневого каталога.
Например, файл1, файл2 и файл3 лежала под из/реж. При внесении изменений в этих 3 файлов, используйте

Rsync --update -alvzr из/реж/file1 с/реж/file2 из/директории/file3 к/реж

, а не

Rsync --update -alvzr из/реж/* в/реж

Но есть потенциальная ошибка: rsync не будет создавать каталоги автоматически, если целевая Папок не существует. Однако вы можете использовать ssh для выполнения удаленной команды и создания каталогов самостоятельно.
Возможно, вам потребуется установить аутентификацию с открытым ключом SSH, но в соответствии с командной строкой rsync, которую вы вставляете, я предполагаю, что вы уже это сделали.

ссылка:
rsync - create all missing parent directories?
rsync: how can I configure it to create target directory on server?
How to use SSH to run a shell script on a remote machine?
SSH error when executing a remote command: "stdin: is not a tty"

+0

Спасибо. Это идеальная ситуация, но как узнать, какие файлы нужно передать rsync? Есть ли способ inotify, чтобы сообщить мне, какие файлы были изменены, и только синхронизировать их? – kyleredon

+0

'inotifywait -rm' может отслеживать изменения каталога и отчета. – zeekvfu