我运行的是一台 64GB RAM 的 root bare metal ubuntu 16.04 服务器,该服务器带有 SSD,负载相当大。现在我了解到,云服务器通常会禁用交换,因为从长远来看,这会磨损 SSD。这让我担心我的服务器,因为它会在没有必要的情况下进行交换,因为有足够的 RAM 可用。
仪表板屏幕截图这里
这是正常的吗?或者您建议采取行动,例如禁用交换?
答案1
简短回答:是的,这是正常的,你不必担心。
长答案:即使有足够的内存可用,linux 也会使用一些交换空间。其理由是,缓存最近读取/写入的数据比将旧的、不活动的程序代码和数据保存在 RAM 中更有用。这种偏差可以通过 sysctlswappiness
可调参数进行修改。从内核文档:
交换性
此控制用于定义内核交换内存页面的积极程度。值越高,积极程度越高;值越低,交换量越少。值为 0 表示内核在可用页面和文件支持页面的数量低于区域中的高水位标记之前不启动交换。
默认值为 60。
如果你真的想减少交换,你可以swappiness
通过以下方式降低值sysctl vm.swappiness=10
或者 echo 10 > /proc/sys/vm/swappiness
。请记住,这在重新启动之前都是有效的;要在重新启动之间保持它,您需要编辑该/etc/sysctl.conf
文件。
如果您想完全禁用交换,您可以使用swapoff -a
(注释相关/etc/fstab
条目以使其在重新启动之间继续存在)。
答案2
不要因为 Linux 正在交换而尖叫,实际上在健康的服务器中这是这完全正常,甚至不是服务器优化的标志。这是因为“低”交换可以有时可以为你和你的驱动器节省宝贵的驱动器 IO 操作。驱动器上的活动越少(即使在最先进的 NVMe 阵列上,昂贵的过程也是如此),越好。
还除非交换非常激进它对 SSD 造成的损害微不足道。尤其是许多用于云的 SSD在细胞全部死亡之前,其持续时间在 PB(s) 范围内。
答案3
内存总是在分配和释放,这会导致碎片化:一部分已分配的内存后面跟着一部分未分配的内存,依此类推。未分配(空闲)的内存部分可能会随着时间的推移变得越来越小。在某些时候,进程可能需要分配一些无法作为单个连续块使用的内存。交换有助于释放内存并创建更大的连续空闲内存部分,否则这些部分将不可用。