有没有办法nice
在目标机器上使用 RSync 守护进程?我必须 rsync 大量数据(包括许多小文件),并且担心远程 RSync 客户端会显著降低目标速度。
答案1
在我的 Ubuntu 16.04 机器上,/etc/default/rsync 中有以下文本:
# run rsyncd at a nice level?
# the rsync daemon can impact performance due to much I/O and CPU usage,
# so you may want to run it at a nicer priority than the default priority.
# Allowed values are 0 - 19 inclusive; 10 is a reasonable value.
RSYNC_NICE=''
# run rsyncd with ionice?
# "ionice" does for IO load what "nice" does for CPU load.
# As rsync is often used for backups which aren't all that time-critical,
# reducing the rsync IO priority will benefit the rest of the system.
# See the manpage for ionice for allowed options.
# -c3 is recommended, this will run rsync IO at "idle" priority. Uncomment
# the next line to activate this.
# RSYNC_IONICE='-c3'
理论上,通过分别将这些值设置为 10 和 -c3,然后重新启动 rsync 守护进程,它应该会以请求的良好级别运行守护进程。但是,这样做之后,我发现它仍然以 0 的良好级别运行。
$ ps -lfp $(pidof rsync)
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 18704 1 0 80 0 - 2785 poll_s 13:42 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
那么这里发生了什么?我查看了 rsync 的 systemd 单元文件,发现了以下内容:
$ cat /lib/systemd/system/rsync.service
[Unit]
Description=fast remote file copy program daemon
ConditionPathExists=/etc/rsyncd.conf
[Service]
ExecStart=/usr/bin/rsync --daemon --no-detach
[Install]
WantedBy=multi-user.target
它甚至没有查看我的 /etc/default/rsync 文件。仅当您使用 System-V init-System 时才使用此文件。对于 systemd(自 Debian 8/jessie 以来为默认设置),它将被忽略。
由于 /lib/systemd/system/rsync.service 文件可能会被覆盖,请将其复制到 /etc/systemd/system/rsync.service。然后将 ExecStart 行更改为如下所示:
ExecStart=/usr/bin/nice -n 10 /usr/bin/ionice -c3 /usr/bin/rsync --daemon --no-detach
然后重新加载 systemd 的配置 ( sudo systemctl daemon-reload
) 并重新启动 rsync ( sudo systemctl restart rsync
)。结果如下:
$ ps -lfp $(pidof rsync)
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 18762 1 0 90 10 - 2785 - 13:43 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
我现在得到了我想要的 10 这个不错的值,但我认为下次安装 rsync 更新时,这个值将不会保留。根据您的发行版,您可能只需更改 /etc/default/rsync 中的值即可成功,但请确保在重新启动守护程序后检查正在运行的进程。
答案2
使用--rsync-path
选项来运行任何包装器或命令组合(包括sudo
,nice
等等),而不是rsync
远程端的基本命令。