最近,我看到一个盒子(实际上是 Web 服务器虚拟机)在其交换区中恰好有 0(零)字节未使用,而可用 ram(不是免费的,但空闲+缓冲区+缓存的总和)为总数的 60%虚拟机内存。以前从未见过,所以想知道这是否是好的配置(对于盒子和应用程序)。
虚拟机的管理员告诉我,他认为这是完全正常的,这是他调整盒子的常用方法。
他的想法是,如果 box 有很多冷内存页面,内核会将其清理出来以释放“真实”内存页面,以便它可以用于缓存数据。
对于我来说,如果我们想要快速盒子,我曾经知道交换是最后使用的东西。因此,我曾经将交换性设置为较低的值(因此内核不喜欢交换页面),但这个人的方法是交换出与交换空间一样多的数据,从而拥有更多的缓存。是的,他说,内核也可以缓存交换的页面,所以保持交换空闲是没有好处的。
请让我轻松一下:VM Seap 是否应该以最佳方式使用,并且以这种方式释放 RAM,以便可以更有效地使用内核磁盘缓存?
确切地说,目前有:1 Gb 交换空间(100% 使用),VM 有 32 Gb 内存,可用内存为 13 Gb。
答案1
完全使用少量交换(1GiB 与 32GiB RAM 相比很小)就可以了。这意味着正如虚拟机管理员所描述的那样:考虑到 RAM 的可用性,最终进入交换区的任何内容都不会被使用,最好将其保留在那里并使用相应的物理内存来实现更紧迫的目的 - 无论是活动工作负载,还是磁盘缓存。
过多的交换使用仅在交换量很大时才令人担忧,或者由于内存压力而正在交换页面,更重要的是如果交换活动很重要,IEifvmstat
显示页面一直在换入换出。这表明系统正在崩溃,花时间逐出页面,结果却不得不再次将它们交换回来;当 RAM 量对于系统工作负载而言太小时,就会发生这种情况。
我正在写这篇文章的系统有更多的交换空间,并且与您的虚拟机的情况类似:
$ free -m
total used free shared buff/cache available
Mem: 32054 19405 1098 2365 11550 9827
Swap: 6410 6410 0
不过,交互性能很好,并且vmstat
没有显示交换活动。