我有一台运行 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:~$
现在我的问题是:
- 如何确定可启动的KVM容器最大数量上限?
- KVM 是否也使用系统外的可用交换空间?
答案1
很难准确确定您可以运行多少个容器,因为直到运行它们并且它们开始使用 RAM 后您才会知道。 Linux 仅在进程实际使用 RAM 时才将 RAM 分配给进程,而不是在进程请求时分配 RAM。这就是为什么您可以在仅 47GB RAM + 47GB 交换空间中运行 235.5GB (92 x 2560MB) 的虚拟机。
是的。虚拟机和容器与其他进程一样都是 Linux 进程。当其他东西需要 RAM 时,它们可以而且将会被换出。
我强烈建议在您的服务器上启用 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
不带参数运行。或运行top
或htop
。