rsync 真的是导致我们的虚拟机内存不足的罪魁祸首吗?

rsync 真的是导致我们的虚拟机内存不足的罪魁祸首吗?

在 16GB RAM 的虚拟机中,我们在生产中将 rsync 作为 cron 作业(每 10 分钟一次)运行,以将 GB 的文件夹从 AWS EFS 同步到本地存储。运行几天后,我们发现虚拟机内存不足,并且我们发现缓冲区/缓存的大小超过 4GB,并且使用虚拟触摸我们确认我们正在同步的整个文件夹都被缓存。

由于我们在生产环境中运行此程序,因此我们有一个警报系统,每当虚拟机中的可用内存低于 20% 时就会发出警报。

因此,作为快速修复,我们在每次使用命令运行 rsync 后清除缓存echo 2 > /proc/sys/vm/drop_caches

我完全反对这一点,因为清除缓存会影响性能。但在互联网上,很少有文章建议在运行 rsync 作业后清除缓存,其中一些是1,2。互联网上还有很多其他资源都说不要清除缓存。

仅考虑rsync

  1. 我们是否真的需要担心它正在执行的激进缓存,因为我们的 buff/缓存非常高
  2. 世界其他地区如何应对这一问题?你们每次运行 rsync 时都会清除缓存吗

我们正在使用的 rsync 命令 rsync -aA --delete /... /...

答案1

未使用的内存会被浪费,因此任何空闲内存都会被内核视为可用作缓冲区高速缓存。如果应用程序需要内存,则可以在必要时立即将其丢弃。

如果整个文件夹都被缓存,那么这应该意味着源文件和目标文件之间的比较非常有效。

rsync命令本身看起来不错。您没有使用-H(这可能非常消耗内存),并且您可以有效地保留时间戳(-t由 暗示-a)。唯一需要注意的另一部分是,就您而言rsync,您正在从本地文件系统的一个部分复制到另一部分,因此只需要更新的文件仍将被完整复制。

相关内容