
我正在使用 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 腳本常問問題。它也應該適用於您的情況。