大量文件上的 inotify 和 rsync

大量文件上的 inotify 和 rsync

我正在使用 inotify 來監視目錄並使用 rsync 在伺服器之間同步檔案。同步工作完美,記憶體使用基本上不是問題。然而,最近添加了大量檔案 (350k),這影響了效能,特別是 CPU 效能。現在,當 rsync 運行時,CPU 使用率飆升至 90%/100%,並且 rsync 需要很長時間才能完成,有 650k 個檔案正在監控/同步。

有沒有辦法加快rsync的速度並且只rsync已經改變的目錄?或在不同的目錄上設定多個 inotifywait。使用的腳本如下。

更新:我新增了 --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/* root@secondwebserver:/var/www/
        fi;
    else
        WAITING=1;
    fi;
done)

答案1

我最終刪除了壓縮選項 (z) 並將 WAITING var 增加到 10(秒)。這似乎有所幫助,rsync 仍然會增加 CPU 負載,但壽命較短。信用歸於答案Unix 堆疊交換

答案2

您也可以查看同步其中有更多的選擇。您可以使用 lua 腳本,然後說出它需要使用多少個並發進程,也許還有更多可能感興趣的東西。

這也使用 rsync 和 ionotify。

答案3

您也可以考慮停用 SSH 壓縮並使用要求較低的加密演算法,例如:

rsync -e "ssh -c arcfour -x -o 壓縮=否" ....

另一種措施是明確設定 ssh 隧道。不過,您需要為此目的設定一個 Rsync 守護程式。檢查我們的 shell 腳本常問問題。它也應該適用於您的情況。

相關內容