SWAP功能风险说明及配置方法

SWAP用于暂时存储不活动内存页的机制。当系统内存不足时,系统可以将不再活动的内存数据存储到SWAP空间中,从而释放内存用于其他正在运行的进程。本文介绍在Alibaba Cloud Linux系统中配置SWAP功能的风险说明,您可根据实际需求决定是否开启SWAP功能。

Swappiness参数说明

说明

在Alibaba Cloud Linux系统实例中,Swappiness的默认值为0。

Swappiness是控制SWAP空间使用倾向性的内核参数。

  • 0:表示尽量使用物理内存而不使用SWAP分区。

  • 100:表示尽量使用SWAP分区而不使用物理参数。

如果Swappiness值设置过大(接近或等于100),可能会导致在内存充裕的情况下仍然使用SWAP,进而导致系统性能下降和内存访问延迟增加。

SWAP配置风险说明

  • 宿主机配置SWAP的风险:

    系统内存压力过高时,系统可能会频繁地交换内存。由于从磁盘读取数据比从内存中读取数据慢,SWAP的频繁使用会导致高延时,从而影响应用程序的性能和系统整体的稳定性。

  • 容器配置SWAP的风险:

    • 资源分配复杂性:在容器化环境中,资源管理通常集中在宿主机层面。如果容器可以自由地配置和使用SWAP,可能导致资源管理复杂,影响其他容器的稳定性。

    • 资源竞争:如果多个容器都在使用宿主机的SWAP,可能导致资源竞争,影响它们的性能和稳定性。尤其是当多个容器同时进入SWAP状态,会对磁盘的I/O造成巨大压力。

    • 高延时和低性能:容器使用SWAP会导致延时增加和性能下降,尤其是对于I/O密集型的应用程序。

配置SWAP

一般不建议在容器内部直接配置SWAP,而是通过宿主机或容器启动参数来管理与配置SWAP,这是因为容器依赖于宿主机的内核来管理资源。相比于在容器内部配置SWAP,利用宿主机的内核管理SWAP资源更为高效和统一。在容器内部配置SWAP可能会增加不必要的复杂性和难以管理,例如难以统一监控和统一调整SWAP配置。

宿主机配置SWAP

具体操作,请参见Linux实例SWAP分区的配置和常见问题处理

容器启动参数配置SWAP

在启动容器时,通过memorymemory-swap参数控制容器的内存和SWAP使用情况。

  • --memory=<value>:限制容器能够使用的物理内存。

  • --memory-swap=<value>:设置容器可以使用的总内存(包括物理内存和SWAP)。如果设置值大于物理内存的限制,超出部分将分配到SWAP。

以C代码为例,设置总内存为2 GB,容器的物理内存为1 GB,SWAP内存为1 GB。

docker run --memory=1g --memory-swap=2g my_container