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

相关推荐
zru_96024 小时前
centos 系统如何安装open jdk 8
java·linux·centos
FLS1684 小时前
VMwaer虚拟机安装完Centos后无法联网问题
linux·运维·centos
OctopusMonster4 小时前
centos下gdb调试python的core文件
linux·运维·centos
wanhengidc5 小时前
云手机可以息屏挂手游吗?
运维·网络·安全·游戏·智能手机
一只小白菜~5 小时前
实战记录:H3C路由器IS-IS Level-1邻居建立与路由发布
运维·网络·计算机网络·智能路由器
Britz_Kevin5 小时前
从零开始的云计算生活——第五十九天,基于Jenkins自动打包并部署Tomcat环境
运维·jenkins·生活
今晚务必早点睡5 小时前
从零到上线:Docker、Docker Compose 与 Runtime 安装部署全指南(含实战示例与应用场景)
运维·docker·容器
snowfoootball5 小时前
(自用)Linux 常用命令自查文档
linux·运维·服务器
墨染 殇雪6 小时前
webshell及冰蝎双击无法打开?
运维·服务器·webshell·webshell管理工具