1. 调整Swappiness参数(关键优化项)
Swappiness是控制内核使用Swap空间的倾向性参数,取值范围0-100(默认60)。值越高,内核越倾向于将内存数据交换到Swap;值越低,越优先保留物理内存。对于大多数服务器场景(尤其是内存充足的系统),建议将Swappiness设置为10-20,以减少不必要的磁盘I/O。操作步骤:
cat /proc/sys/vm/swappinesssudo sysctl vm.swappiness=10/etc/sysctl.conf,添加vm.swappiness=10,然后运行sudo sysctl -p使配置生效。2. 优化Swap空间大小与类型
sudo fallocate -l 4G /swapfile # 创建4GB Swap文件(可根据需求调整大小)
sudo chmod 600 /swapfile # 设置严格权限(仅root可读写)
sudo mkswap /swapfile # 格式化为Swap格式
sudo swapon /swapfile # 启用Swap文件
echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab # 开机自动启用
/dev/sda1而非/dev/sdb)。3. 监控Swap使用情况(持续优化基础)
定期监控Swap使用状态,及时发现异常(如Swap使用率长期≥50%),避免内存瓶颈。常用工具:
free -h:快速查看内存与Swap总用量及剩余空间;top/htop:实时监控进程内存占用,识别内存泄漏的进程;vmstat 1:每秒刷新系统内存、Swap、I/O等指标(重点关注si(Swap In)和so(Swap Out)列,数值过高说明Swap频繁使用);iostat -x 1:监控磁盘I/O负载,若Swap所在磁盘的%util接近100%,需优化Swap配置或升级硬件。4. 减少对Swap的依赖(根本解决之道)
valgrind等工具检测),调整应用内存配置(如数据库的innodb_buffer_pool_size参数),避免单个进程占用过多内存。cron、httpd等),减少后台进程的内存消耗(使用systemctl list-unit-files --type=service查看服务状态,systemctl stop <service_name>停止服务)。5. 使用高级Swap技术(可选优化)
sudo modprobe zram # 加载zram模块
echo 1 | sudo tee /sys/class/zram-control/hot_add # 添加1个zram设备
echo 2G | sudo tee /sys/block/zram0/disksize # 设置zram大小为2GB
sudo mkswap /dev/zram0 # 格式化为Swap
sudo swapon /dev/zram0 # 启用
/sys/module/zswap/parameters/enabled查看状态)。6. 配置Swap分区优先级(多Swap场景)
若系统有多个Swap分区或文件,可通过priority参数调整使用顺序(值越高,优先级越高)。例如,设置/swapfile1(SSD)优先级高于/dev/sdb1(HDD):
sudo swapon --priority 100 /swapfile1
sudo swapon --priority 50 /dev/sdb1
或修改/etc/fstab,添加pri选项:
/swapfile1 swap swap defaults,pri=100 0 0
/dev/sdb1 swap swap defaults,pri=50 0 0
高优先级的Swap会先被使用,提升整体性能。