0

我遇到了一个奇怪的问题,我无法在其他地方找到解决方案。也许你可以帮助我。

我有一个运行 Ubuntu 20 LTS 的系统,它是六个来宾(四个 Ubuntu 20 LTS 和两个 Windows Server 2019)的主机,它们运行得非常快,直到我拍摄了实时快照。我在使用 QCOW2 文件时在 QEMU/KVM 上运行来宾,并且我正在使用 virsh 来管理这些虚拟系统。

我使用以下命令拍摄来宾的实时快照(没有 RAM 状态):

virsh snapshot-create-as $VM --no-metadata $timestamp --disk-only --atomic

这几乎可以立即对特定来宾的所有虚拟磁盘进行快照,并创建新的增量文件,将差异写入其中。然后,我为所有客人和所有磁盘提供以下结构:

base <- snapshot <- live_delta_file

复制快照后,我使用以下命令将它们提交到它们的基本文件:

virsh blockcommit $currentVM $disk --base $path_to_base --top $path_to_snapshot --verbose --wait

之后,我删除了快照,所有这些工作都没有产生任何错误。然而,在拍摄快照之后,虽然所有的来宾仍在运行,没有任何错误,但每个虚拟机在 shell 中的任何命令都非常慢。此外,我可以通过主机上的顶部看到,每个来宾的 RAM 使用量已大大减少(例如,Windows Server 2019 的 GUI 从 25 GB 减少到 2.5 GB)。

似乎所有缓存的数据都从 RAM 中删除了,这当然会大大降低性能。但是,拍摄快照(没有 --quiesce 参数)不应该导致这种行为,或者?。重新启动所有来宾后,一切都恢复得很快(而快照结构没有任何改变)。

您知道哪种配置或情况会导致这种行为吗?

先感谢您!

- - - 编辑 - - -

似乎实际的问题是在拍摄快照后通过 scp/rsync 复制文件,因为其中一个程序(rsync?)耗尽了主机上的所有内存,导致将客人的部分 RAM 交换到磁盘.

即使在复制过程完成后,复制的数据似乎仍保留在主机缓存中,并且客户机正在进一步使用主机的部分交换空间。

这当然解释了客人的糟糕表现。它可以通过使用以下命令清除页面缓存和交换空间来修复:

sync; echo 1 > /proc/sys/vm/drop_caches
swapoff -a; swapon -a

但请注意,在暂停客户机操作的情况下,清除交换空间可能需要几个小时。要么应该在晚上不使用它们时完成,要么应该从根本上解决问题,即在 rsync/scp 部分。

4

1 回答 1

1

我认同你的经历。我通过使缓存和交换不那么激进来解决它。也许它也可以帮助你。

(来自 /etc/sysctl.conf)

# Make the kernel less swappy
vm.swappiness = 5

# Make the kernel free cached dentries and inodes sooner
vm.vfs_cache_pressure = 200
于 2020-11-28T10:48:53.810 回答