我正在使用inotify来查看目录并使用rsync在服务器之间同步文件。同步工作完美,内存使用大多不是问题。但是,最近添加了大量文件(350k),这对性能产生了影响,特别是在CPU上。现在,当rsync运行时,CPU使用率达到90%/ 100%并且rsync需要很长时间才能完成,有650k文件正在被监视/同步。
有没有办法加速rsync,只有rsync已更改的目录?或者在不同的目录上设置多个inotifywaits。正在使用的脚本如下。
更新:我添加了--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)
答案 0 :(得分:1)
我最终删除了压缩选项(z)并将WAITING var增加到10(秒)。这似乎有所帮助,rsync仍然会加剧CPU负载,但它的寿命较短。信用转到unix stackexchange
的答案答案 1 :(得分:0)
您正在使用rsync
来同步大树的根目录,因此我对性能损失并不感到惊讶。
一种可能的解决方案是仅同步更改的文件/目录,而不是整个根目录
例如, file1 , file2 和 file3 位于 from / dir 下。对这3个文件进行更改时,请使用
从/ dir / file2 / dir / file3到/ dir 的/ dir / file1中的rsync --update -alvzr
而不是
rsync --update -alvzr从/ dir / *到/ dir
但是这有一个潜在的错误:如果目标文件夹不存在,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"