当CentOS服务器运行内存密集型应用或处理突发负载时,物理内存可能迅速耗尽,导致系统响应迟缓、服务异常甚至进程被强制终止。此时,扩展Swap空间成为缓解内存压力、保障系统稳定的关键应急措施。Swap是磁盘上的一块预留空间,当物理内存不足时,操作系统会将内存中不活跃的页移出至此,为当前活跃进程腾出空间。
在决定扩展Swap前,需确认系统是否真正面临内存压力。使用free -h命令可快速查看内存与Swap使用概况,重点关注“available”内存与Swap“used”值。更深入的分析可使用vmstat 1命令,观察“si”(从磁盘换入)和“so”(换出到磁盘)两列,若其值持续大于0,表明系统正在频繁使用Swap,物理内存已紧张。另一个指标是使用top命令查看内存占用最高的进程。当可用内存接近耗尽且Swap使用率持续增长时,扩展Swap是直接有效的缓解手段。但需明确,Swap本质是使用磁盘空间模拟内存,其访问速度远低于物理内存,过度依赖会降低系统整体性能,因此它主要作为内存耗尽时的安全网,而非性能提升方案。
在CentOS上增加Swap主要有三种方式:创建Swap文件、创建独立Swap分区以及使用LVM逻辑卷。Swap文件因其灵活性成为最常用的方法,它无需重新分区,可直接在现有文件系统上创建和调整,适合绝大多数场景。独立Swap分区性能稍优但需调整磁盘分区结构,操作复杂且有风险。LVM Swap卷则适合已使用LVM管理的系统,可在线调整。对于大多数用户,创建Swap文件是最稳妥的选择。
以下是在CentOS 7/8系统上创建Swap文件的详细流程。假设需要新增4GB Swap,操作需root权限。
首先,使用dd命令在指定目录(通常为/或/var)创建指定大小的空文件。命令:
dd if=/dev/zero of=/swapfile bs=1M count=4096
创建一个名为/swapfile、大小为4GB(4096个1MB块)的文件。if=/dev/zero表示从零设备读取数据(填充零),of指定输出文件路径。创建后,使用ls -lh /swapfile验证文件大小是否正确。
接下来,需设置正确的文件权限,确保只有root可读写,执行chmod 600 /swapfile。然后,使用mkswap /swapfile命令将该文件格式化为Swap空间,该命令会输出类似以下成功信息:
Setting up swapspace version 1
格式化后,使用:
swapon /swapfile
立即启用新的Swap空间。启用后,再次执行
free -h
或
swapon --show
应能看到新增的Swap空间已加入总容量并开始使用。
为使系统重启后能自动挂载此Swap文件,需将其信息写入/etc/fstab文件。在文件末尾添加一行:
/swapfile swap swap defaults 0 0
该行表示将/swapfile作为swap设备,使用默认参数,不检查不备份。
创建Swap后,调整其使用倾向性可优化系统行为。通过sysctl参数vm.swappiness来控制系统将内存页交换到磁盘的积极程度。其值范围0-100,值越高越积极使用Swap。查看当前值:
cat /proc/sys/vm/swappiness
CentOS默认值通常为30。对于数据库服务器等需要尽可能保持活动数据在内存的应用,可将其调低至10-20;对于桌面或内存严重不足的系统,可适度提高至60。临时调整:
sysctl vm.swappiness=20
永久生效需在/etc/sysctl.conf中添加vm.swappiness=20后执行sysctl -p。
另一个相关参数vm.vfs_cache_pressure控制内核回收用于目录和inode缓存内存的倾向,默认值100。适当降低此值(如设置为50)可让系统更多保留缓存,这对文件服务器有益。
若需调整现有Swap文件大小,流程是:先swapoff /swapfile禁用Swap,然后删除原文件(rm /swapfile)并按新尺寸重新创建,再重新执行mkswap和swapon。若使用LVM,可在线扩展Swap逻辑卷:swapoff后使用lvextend调整大小,然后mkswap再swapon。
扩展Swap后,需持续监控其使用情况以评估效果。除free和top命令外,sar -S 1可查看Swap使用率变化,cat /proc/meminfo提供详细内存统计。若发现Swap频繁被大量使用(如使用率持续高于20%),表明物理内存严重不足,扩展Swap仅为权宜之计,长期解决方案应是增加物理内存或优化应用内存使用。
对于已无磁盘空间创建Swap的极端情况,可考虑使用zram内核模块创建压缩的内存块设备作为Swap,这实质是利用CPU时间换取更多可用内存空间,在内存不足但CPU有空闲的场景下有一定效果。
安全方面,Swap文件可能包含敏感内存数据。在云环境中若需释放资源,应在删除实例前清理Swap文件数据:使用swapoff后,用dd覆盖文件(如dd if=/dev/zero of=/swapfile bs=1M)再删除。对于高安全要求环境,可在/etc/fstab中添加discard参数或使用fstrim命令(仅适用于支持TRIM的磁盘)。
综上所述,在CentOS上增加Swap分区是应对内存不足的有效应急方案,其核心步骤包括创建文件、设置权限、格式化、启用并配置自动挂载。优化swappiness参数可调节系统使用Swap的倾向。然而,Swap本质是性能与可用性的权衡,长期高Swap使用率是系统需要扩容物理内存或优化应用的明确信号。管理员应结合监控数据,将Swap作为内存管理体系中的缓冲组件合理配置和使用。
CN
EN