调整vm.swappiness参数值可直接降低交换频率,数值越低系统越倾向保留数据在物理内存中;还可优化脏页回写、禁用冗余swap设备、限制高内存进程及启用zram压缩交换。

如果您在银河麒麟操作系统中发现系统频繁使用交换分区(Swap),导致响应迟缓、kswapd0进程CPU占用飙升或I/O等待过高,则很可能是内存交换频率过高所致。以下是调整交换行为频率的多种可行方法:
一、调整vm.swappiness参数值
swappiness控制内核将匿名页换出到Swap的倾向程度,数值越低,系统越倾向于保留数据在物理内存中,从而降低Swap使用频率。该参数直接影响交换触发的“敏感度”,是调控交换频率最直接有效的手段。
1、查看当前值:执行 cat /proc/sys/vm/swappiness,确认当前设置。
2、临时修改为10:执行 sudo sysctl vm.swappiness=10,立即生效但重启后恢复。
3、永久写入配置:执行 echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf,随后运行 sudo sysctl -p 加载新配置。
二、优化脏页回写机制以减少被动换出压力
当大量脏页(被修改但未写回磁盘的内存页)积压时,内核可能因内存紧张而被迫加速换出其他页,间接抬高Swap使用频率。通过收紧脏页阈值,可促使内核更早、更平滑地将脏页刷入磁盘,缓解内存回收压力。
1、临时设置背景回写阈值为5%:执行 sudo sysctl vm.dirty_background_ratio=5。
2、临时设置强制回写上限为10%:执行 sudo sysctl vm.dirty_ratio=10。
3、永久生效:向 /etc/sysctl.conf 追加两行:vm.dirty_background_ratio = 5 和 vm.dirty_ratio = 10,再执行 sudo sysctl -p。
三、禁用不必要的Swap设备以消除冗余交换路径
若系统存在多个Swap分区或文件(如安装时自动创建的Swap分区 + 后续手动添加的Swap文件),内核会在各设备间轮询分配换出页,不仅增加I/O分散性,还可能因某设备性能低下而拖累整体交换效率,表现为交换行为更频繁且不可控。
1、列出所有启用的Swap设备:执行 swapon --show,记录type为partition或file的条目。
2、停用非必需Swap设备:对目标设备执行 sudo swapoff /dev/sdXn 或 sudo swapoff /path/to/swapfile。
3、从 /etc/fstab 中注释或删除对应挂载行,防止重启后自动启用。
四、限制特定进程内存使用以阻断高频换出源头
当某个进程(如auditd、java应用或数据库服务)持续申请并驻留大量内存,会快速消耗可用内存水位,迫使kswapd0高频启动扫描与换出操作。通过主动约束其资源上限,可从根本上抑制交换触发频率。
1、创建systemd资源限制配置目录:执行 sudo mkdir -p /etc/systemd/system/auditd.service.d。
2、新建限制文件:执行 sudo nano /etc/systemd/system/auditd.service.d/override.conf。
3、写入内存限制内容:[Service]\nMemoryLimit=1G,保存退出。
4、重载并重启服务:执行 sudo systemctl daemon-reload && sudo systemctl restart auditd。
五、启用zram作为内存内压缩交换替代Swap
zram在内存中创建压缩块设备,将待换出页压缩后存于RAM内,避免访问慢速磁盘,显著降低实际Swap I/O次数与延迟。它不改变换出动作发生频率,但使每次换出操作代价大幅下降,等效于“高频但轻量”的交换行为,系统感知卡顿明显减弱。
1、加载zram模块:执行 sudo modprobe zram。
2、设置zram设备数量:执行 echo 1 | sudo tee /sys/class/zram-control/hot_add。
3、配置zram0大小为总内存的25%:执行 echo $(( $(grep MemTotal /proc/meminfo | awk '{print $2}') * 25 / 100 * 1024 )) | sudo tee /sys/block/zram0/disksize。
4、格式化并启用:执行 sudo mkswap /dev/zram0 && sudo swapon --priority 100 /dev/zram0。











