文章目录
- 前言
- 创建交换文件(推荐)
- 清理旧交换区
前言
很多刚开始使用 CentOS 的用户都会遇到。1GB 的交换分区在现代应用环境下确实偏小,很容易在内存压力大时导致系统性能下降甚至应用程序被强制终止。
关于交换分区的大小,没有一成不变的强制规则 ,但有一些被广泛接受和遵循的最佳实践和建议 。这些建议也随着服务器内存(RAM)容量的增长而演变。
交换分区大小的传统规则与现代建议
1. 传统规则(适用于旧时代,当内存以 MB 或少量 GB 计)
在过去,Linux 交换分区的大小通常遵循一个经验法则:
如果内存不足 2GB :交换分区大小设置为物理内存的 2 倍 。
如果内存大于 2GB :交换分区大小设置为 物理内存 + 2GB 。
这个规则在现代大内存服务器上已经不再适用(例如,为 64GB 内存的服务器分配 66GB 的交换区是巨大且不必要的浪费)。
2. 现代最佳实践(适用于当前时代,内存通常 >= 4GB)
现在的建议更侧重于系统的用途 和允许的休眠(Hibernate)需求 。
- 服务器工作负载 :
- 最小化建议 :对于拥有充足物理内存(例如 16GB 或更多)的服务器,至少 4GB 的交换分区是一个常见的起点。这可以应对偶尔的内存峰值。
- 内存工作集建议 :一个更科学的方法是,根据系统监控(如使用 free -h 或 vmstat 命令)观察到的常驻内存集大小 来设置。交换分区应至少能容纳这部分数据,以便在极端情况下内核有空间可以转移内存页。
- 通用建议 :对于生产服务器,一个安全且常见的做法是:
- 物理内存 < 8GB:设置交换分区为 物理内存的 1.5 倍 。
- 物理内存 >= 8GB:设置交换分区为 4GB 到 8GB 。
- 桌面/工作站工作负载(允许休眠) :
- 如果您希望使用休眠(Hibernate / Suspend-to-Disk) 功能,交换分区必须 大于或等于物理内存的大小。因为休眠时,会将整个内存的内容转储到交换分区中。
- 如果不需休眠,可以参考服务器建议,通常 4GB-8GB 即可。
- 特殊情况 :
- 内存极度充裕 :如果您的服务器有非常大量的内存(如 128GB、256GB 甚至更多),并且运行的应用非常稳定,几乎不会出现内存耗尽的风险,那么甚至可以只设置一个 1GB 甚至 0.5GB 的交换分区。但强烈不建议完全禁用交换分区 ,因为即使内存很大,内核的一些内部机制(如交换倾向 swappiness)仍然会与交换区交互,完全禁用可能在某些边缘情况下导致非预期行为(如 kswapd 进程高CPU占用)。
- 应用程序要求 :
- 某些特定软件(如 Oracle Database、SAP HANA)对其运行环境的交换空间有明确的要求,请务必遵循其官方文档。
创建交换文件(推荐)
这种方法不需要重新分区,是最安全、最便捷的方式。
检查当前交换空间 :
sudo swapon --show
free -h
创建用于交换的文件 (这里以创建 4GB 文件为例):
# 使用 dd 命令创建一个 4GB 的空文件
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress
# 或者使用 fallocate(更快,但某些旧文件系统不支持)
# sudo fallocate -l 4G /swapfile
设置正确的权限 :
sudo chmod 600 /swapfile
格式化为交换分区格式 :
sudo mkswap /swapfile
启用交换文件 :
sudo swapon /swapfile
验证新交换空间是否生效 :
sudo swapon --show
free -h
永久生效 :编辑 /etc/fstab 文件,在文件末尾添加一行,确保系统启动时自动挂载交换文件。
sudo vim /etc/fstab
添加以下内容:
/swapfile swap swap defaults 0 0
清理旧交换区
1.禁用旧的交换空间 :
sudo swapoff /www/swap
执行这个命令后,内核会将 /www/swap 中的数据(如果有的话)移回内存或转移到其他交换空间(即您新加的 /swapfile),然后将其从交换池中移除。
2.再次检查交换空间状态 :
sudo swapon --show
free -h
现在您应该看到只有 /swapfile 这一项,总交换空间大小约为 4G。
3.确保永久生效(您已经做了,这是关键) :
您已经编辑了 /etc/fstab,注释或删除了 /www/swap 的那一行,并添加了 /swapfile 的行。
# 删除这行旧的
/www/swap swap swap defaults 0 0
- 删除旧行 :确保下次重启时,系统不会自动重新激活旧的 /www/swap。
- 添加新行 :确保下次重启时,系统会自动激活新的 /swapfile。
4.(可选)删除旧的交换文件以释放磁盘空间 :
既然已经不再使用,您可以安全地删除它:
sudo rm /www/swap
总结:
现象是正常的 :swapon 命令是添加 (Add)交换空间,而不是替换 (Replace)。
要达到替换目的 ,需要先用手动 swapoff 命令移除 旧的,然后再用 swapon 添加新的。
修改 /etc/fstab 是为了保证这个“替换”操作在重启后也能持久化生效。
所以,您接下来只需执行 sudo swapoff /www/swap,就完成了从旧交换空间到新交换空间的切换。