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,就完成了从旧交换空间到新交换空间的切换。

相关推荐
大树8813 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠13 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质13 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush413 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行52014 小时前
Linux 11 动态监控指令top
linux
Inhand陈工14 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智15 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩15 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_15 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈15 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix