Linux:您是否应该使用两倍的 RAM 作为交换空间?
Linux和其他类 Unix 操作系统使用术语“交换”来描述在 RAM 和磁盘之间移动内存页面的行为以及存储页面的磁盘区域。通常使用硬盘的整个分区进行交换。但是,使用 2.6 Linux 内核,交换文件与交换分区一样快。现在,许多管理员(Windows 和 Linux/UNIX)都遵循一条古老的经验法则,即交换分区应该是主系统 RAM 的两倍。假设我有 32GB RAM,我应该将交换空间设置为 64GB 吗?需要 64GB 的交换空间吗?您的 Linux/UNIX 交换空间应该有多大?
老旧的愚蠢的内存管理器
我认为“2x 交换空间”规则来自旧版 Solaris 和 Windows 管理员。此外,早期的内存管理器设计得非常糟糕。它们不够智能。如今,Linux 和 UNIX 都有非常智能的内存管理器。
无意义的规则:服务器的主系统 RAM 大小应为两倍
根据OpenBSD FAQ:
许多人遵循一条古老的经验法则,即交换分区的大小应为主系统 RAM 的两倍。这条规则毫无意义。在现代系统中,交换分区的数量非常多,大多数人都希望他们的系统永远不进行交换。您不希望系统耗尽 RAM+交换分区,但您通常更希望系统中有足够的 RAM,这样就不需要进行交换。
为您的设置选择合适的尺寸
这是我针对普通服务器(Web / Mail 等)的规则:
- 交换空间 == 相等的 RAM 大小(如果 RAM < 2GB)
- 交换空间 == 2GB 大小(如果 RAM > 2GB)
我的朋友是一位真正的 Oracle 专家,他为重型 Oracle 服务器推荐了具有快速存储(如RAID 10)的配置:
- 交换空间 == 相等的 RAM 大小(如果 RAM < 8GB)
- 交换空间 == RAM 大小的 0.50 倍(如果 RAM > 8GB)
Red Hat 建议
Red hat 建议对 RHEL 5/6 进行如下设置:
事实上,系统所需的交换空间量实际上并不是由其拥有的 RAM 量决定的,而是由该系统上运行的内存工作负载决定的。只要匿名内存和系统 V 共享内存的总和小于 RAM 量的 3/4,Red Hat Enterprise Linux 5 系统就可以在没有交换空间的情况下正常运行。在这种情况下,系统将简单地将匿名内存和系统 V 共享内存锁定到 RAM 中,并使用剩余的 RAM 来缓存文件系统数据,因此当内存耗尽时,内核只会回收页面缓存内存。
考虑到 1) 在安装时配置交换空间时,没有简单的方法可以预先确定工作负载所需的内存,以及 2) 系统的 RAM 越多,通常所需的交换空间就越少,因此,更好的交换空间
- 具有 4GB 或更少 RAM 的系统需要至少 2GB 的交换空间
- 具有 4GB 至 16GB RAM 的系统至少需要 4GB 的交换空间
- 具有 16GB 至 64GB RAM 的系统至少需要 8GB 的交换空间
- 具有 64GB 至 256GB RAM 的系统至少需要 16GB 的交换空间
CentOS Linux 7.x 和 RHEL 7建议遵循以下规则:
图 01:Linux 的推荐系统交换空间
Swap 将继续运行服务器……
交换空间只能通过交换进程在重负载服务器上维持一段时间的运行。您始终可以使用以下任一命令来查找交换空间利用率:
查看如何在 Linux 下查找磁盘 I/O 和相关信息。最后,您需要添加更多 RAM、调整软件(例如控制 Apache 工作者或使用 lighttpd web 服务器来节省 RAM)或使用某种负载平衡。
cat /proc/swaps
swapon -s
free -m
top
您可以参考 Linux 内核文档中的/proc/sys/vm/swappiness 来微调交换空间。也可以在 Linux 上添加交换空间,而无需创建新分区。
关于台式电脑和笔记本电脑的说明
如果您要暂停到磁盘,则需要的交换空间大于实际 RAM。例如,我的笔记本电脑有 1GB RAM,交换设置为 2GB。这仅适用于笔记本电脑或台式机,而不适用于服务器。
内核黑客需要更多交换空间
如果您是内核黑客(调试和修复内核问题)并生成核心转储,则需要两倍的 RAM 交换空间。
结论
如果 Linux 内核一次要使用超过 2GiB 的交换空间,所有用户都会感到压力。要么获得更多 RAM(推荐),要么转移到更快的存储以改善磁盘 I/O。没有规则,每个设置和配置都是独一无二的。根据您的要求调整值。选择适合您的交换量。
您觉得如何?请在下面的评论中添加您对“交换空间”的想法。