CentOS交换区处理

文章目录

前言

很多刚开始使用 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)对其运行环境的交换空间有明确的要求,请务必遵循其官方文档。

创建交换文件(推荐)

这种方法不需要重新分区,是最安全、最便捷的方式。

检查当前交换空间 :

bash 复制代码
sudo swapon --show
free -h

创建用于交换的文件 (这里以创建 4GB 文件为例):

bash 复制代码
# 使用 dd 命令创建一个 4GB 的空文件
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress
# 或者使用 fallocate(更快,但某些旧文件系统不支持)
# sudo fallocate -l 4G /swapfile

设置正确的权限 :

bash 复制代码
sudo chmod 600 /swapfile

格式化为交换分区格式 :

bash 复制代码
sudo mkswap /swapfile

启用交换文件 :

bash 复制代码
sudo swapon /swapfile

验证新交换空间是否生效 :

bash 复制代码
sudo swapon --show
free -h

永久生效 :编辑 /etc/fstab 文件,在文件末尾添加一行,确保系统启动时自动挂载交换文件。

bash 复制代码
sudo vim /etc/fstab

添加以下内容:

bash 复制代码
/swapfile swap swap defaults 0 0

清理旧交换区

1.禁用旧的交换空间 :

bash 复制代码
sudo swapoff /www/swap

执行这个命令后,内核会将 /www/swap 中的数据(如果有的话)移回内存或转移到其他交换空间(即您新加的 /swapfile),然后将其从交换池中移除。
2.再次检查交换空间状态 :

bash 复制代码
sudo swapon --show
free -h

现在您应该看到只有 /swapfile 这一项,总交换空间大小约为 4G。

3.确保永久生效(您已经做了,这是关键) :

您已经编辑了 /etc/fstab,注释或删除了 /www/swap 的那一行,并添加了 /swapfile 的行。

bash 复制代码
# 删除这行旧的
/www/swap    swap    swap    defaults    0 0
  • 删除旧行 :确保下次重启时,系统不会自动重新激活旧的 /www/swap。
  • 添加新行 :确保下次重启时,系统会自动激活新的 /swapfile。

4.(可选)删除旧的交换文件以释放磁盘空间 :

既然已经不再使用,您可以安全地删除它:

bash 复制代码
sudo rm /www/swap

总结:
现象是正常的 :swapon 命令是添加 (Add)交换空间,而不是替换 (Replace)。
要达到替换目的 ,需要先用手动 swapoff 命令移除 旧的,然后再用 swapon 添加新的。
修改 /etc/fstab 是为了保证这个"替换"操作在重启后也能持久化生效。

所以,您接下来只需执行 sudo swapoff /www/swap,就完成了从旧交换空间到新交换空间的切换。

相关推荐
ACP广源盛139246256736 分钟前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑
峥无1 小时前
Linux系统编程基石:静态库·动态库·ELF文件·进程地址空间全景图
linux·运维·服务器
用户2367829801681 小时前
从 chmod 755 说起:Unix 文件权限到底是怎么算的?
linux
码云数智-大飞2 小时前
本地部署大模型:隐私安全与多元优势一站式解读
运维·网络·人工智能
Strugglingler2 小时前
【systemctl 学习总结】
linux·systemd·systemctl·journalctl·unit file
Harvy_没救了3 小时前
【网络部署】 Win11 + VMware CentOS8 + Nginx 文件共享服务 Wiki
运维·网络·nginx
春风有信3 小时前
【2026.05.01】Windows10安装Docker Desktop 4.71.0.0步骤及问题解决
运维·docker·容器
嵌入式×边缘AI:打怪升级日志3 小时前
100ASK-T113 Pro 开发板 Bootloader 完全开发指南
linux·ubuntu·bootloader
2401_873479404 小时前
断网时如何实时判断IP归属?嵌入本地离线库,保障风控不中断
运维·服务器·网络
守城小轩4 小时前
基于Chrome140的Yahoo自动化(关键词浏览)——需求分析&环境搭建(一)
运维·自动化·chrome devtools·浏览器自动化·指纹浏览器·浏览器开发