Swap(交换空间)是CentOS系统中磁盘上的一块专用区域,作为物理内存(RAM)的扩展。当物理内存不足以支持当前运行的所有进程时,操作系统会将部分不活跃的内存数据(如缓存、后台进程)临时移动到Swap空间,从而释放RAM供关键进程(如数据库、Web服务)使用。其主要作用包括:
Swap的大小需根据物理内存容量、工作负载类型及性能需求综合确定,以下是常见场景的推荐配置:
vm.swappiness是CentOS内核控制Swap使用倾向的核心参数,取值范围为0-100:
sysctl vm.swappiness=30;/etc/sysctl.conf文件,添加vm.swappiness=30,然后执行sysctl -p使配置生效。fdisk或parted工具创建新分区(如/dev/sdb1);mkswap /dev/sdb1;swapon /dev/sdb1;/etc/fstab文件,添加/dev/sdb1 swap swap defaults 0 0,实现开机自动挂载。dd if=/dev/zero of=/swapfile bs=1M count=4096;chmod 600 /swapfile;mkswap /swapfile;swapon /swapfile;/etc/fstab文件,添加/swapfile swap swap defaults 0 0,实现开机自动挂载。free -h(显示内存与Swap的总大小、已用空间、可用空间);top(按Shift+M按内存排序,查看Swap使用率);vmstat 1 5(每1秒刷新一次,查看si/so列,分别表示每秒从Swap读入/写入内存的数据量,数值过高说明Swap使用频繁)。swapoff /swapfile),再重新启用(swapon /swapfile),释放Swap中的旧数据;/etc/fstab;若需缩小,需先备份数据,再调整分区大小(如使用lvreduce命令调整LVM逻辑卷);/mnt/ssd/swapfile),提升Swap读写速度,减少性能损耗。vm.overcommit_memory设置为0(内核自动管理内存分配),可根据需求调整为1(允许进程申请超过物理内存的内存,提高内存利用率,但需注意OOM风险);vm.overcommit_ratio(设置内存过度提交的比例,默认50%)和/proc/<pid>/oom_score_adj(调整进程的OOM优先级)控制OOM Killer的选择。使用Cgroups(控制组)限制特定进程组的Swap使用量,避免单个进程占用过多Swap导致系统不稳定。例如,通过cgroup-tools创建内存限制组:
cgcreate -g memory:/mygroup
echo "1G" > /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
echo "500M" > /sys/fs/cgroup/memory/mygroup/memory.memsw.limit_in_bytes # 限制内存+Swap的总使用量
cgexec -g memory:mygroup <command> # 在该组中运行命令
合理使用缓存(如drop_caches)可释放内存,减少Swap使用。例如:
echo 1 > /proc/sys/vm/drop_caches;echo 2 > /proc/sys/vm/drop_caches;echo 3 > /proc/sys/vm/drop_caches。