KVM虚拟容器如何消耗RAM?

KVM虚拟容器如何消耗RAM?

我有一台运行 47 GB RAM 和完全相同的交换空间的物理服务器。硬盘空间为228GB。

我启动了 92 个容器(KVM 容器),并为每个容器分配了 2560 MB RAM。

当前的可用内存状态如下所示:

ubuntu@ubuntu:~$ free -h
              total        used        free      shared  buff/cache   available
Mem:            47G         43G        263M         18M        3.0G        2.8G
Swap:           47G         17G         30G

硬盘存储:

ubuntu@ubuntu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev             24G     0   24G   0% /dev
tmpfs           4.8G   23M  4.7G   1% /run
/dev/sda1       228G   33G  184G  15% /
tmpfs            24G     0   24G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            24G     0   24G   0% /sys/fs/cgroup
tmpfs           4.8G     0  4.8G   0% /run/user/1000
cgmfs           100K     0  100K   0% /run/cgmanager/fs
ubuntu@ubuntu:~$ 

现在我的问题是:

  1. 如何确定可启动的KVM容器最大数量上限?
  2. KVM 是否也使用系统外的可用交换空间?

答案1

  1. 很难准确确定您可以运行多少个容器,因为直到运行它们并且它们开始使用 RAM 后您才会知道。 Linux 仅在进程实际使用 RAM 时才将 RAM 分配给进程,而不是在进程请求时分配 RAM。这就是为什么您可以在仅 47GB RAM + 47GB 交换空间中运行 235.5GB (92 x 2560MB) 的虚拟机。

  2. 是的。虚拟机和容器与其他进程一样都是 Linux 进程。当其他东西需要 RAM 时,它们可以而且将会被换出。

  3. 我强烈建议在您的服务器上启用 zswap,以便 linux 压缩交换数据,首先在 RAM 中,然后(当内存满时)在磁盘上的交换分区中。例如

# enable zswap
echo 1 > /sys/module/zswap/parameters/enabled

# set it to use lz4 (or use gzip for better compression but more CPU usage)
echo lz4 > /sys/module/zswap/parameters/compressor

# set maximum allowed percentage of RAM to use for swap
echo 50 > /sys/module/zswap/parameters/max_pool_percent

顺便说一句,要查看当前使用了多少交换空间,请swapon不带参数运行。或运行tophtop

相关内容