rsync后如何释放内存?

Ing*_*ard 2 ubuntu backup memory rsync

我需要从具有 10GB RAM (Ubuntu) 的 Web 服务器备份数据。要备份数据,我使用 Rsync。

我的第一个测试是对所有网站使用一个 rsync,但它使用了 5GB。所以我决定拆分 rsync 但它仍然使用 5GB。在这两种情况下,它都会消耗大量内存并且在处理后并不总是完全空闲

如果我手动删除 rsync 之间的缓存,它只使用 150Mb 和 500Mb 之间的内存,在此过程后完全释放内存。(并释放服务器 50%-70% 的内存)

for CURDIR in "$ROOTDIR"*
do
    echo "Start $CURDIR"    
    rsync -aHh --stats --compress --delete "$CURDIR" --link-dest="saveofyesterday" "saveoftoday"    
    echo "Clear"
    sync
    echo 3 > /proc/sys/vm/drop_caches
    echo "Finish $CURDIR."
done
Run Code Online (Sandbox Code Playgroud)

好像不推荐。实现这一目标的正确方法是什么?

Hrv*_*jar 5

我建议查看rsync 的fadvise补丁。目的是在备份时保留磁盘缓存。效果你应该看到你认为“使用”的内存不会被“使用”。实际上,您认为已使用的内存已被使用,但它用于磁盘缓存,并在程序需要时释放。如果系统内存不足,最终所有磁盘缓存都将从内存中逐出,以便尝试为需要的应用程序提供内存。这很糟糕,特别是在没有极快磁盘子系统的繁忙系统上,因为一旦磁盘缓存从内存中被逐出,所有曾经缓存的数据将需要再次从磁盘读取,这将导致巨大的 IO 负载和等待时间。

手动删除缓存同样糟糕,会让您的服务器陷入困境。这不是一条可取的路线。内存管理不是你的脚本应该担心的事情,内核会处理那部分。