应按物理内存容量精准设定虚拟内存:4GB设6144MB/12288MB,8GB设12288MB/24576MB,16GB设16384MB/32768MB,32GB+设12288MB/24576MB;统一初值与最大值可减碎片,须部署于非系统高速SSD分区,且必须重启生效。

CPU 与内存规划必须和内核参数协同调整,才能真正提升虚拟内存使用效率——不是简单加大页面文件,而是让换页行为更可控、更少触发、更少拖慢关键任务。
根据物理内存容量设定 swappiness 和脏页策略
swappiness 控制系统倾向使用交换空间的程度。数值越高,越早把内存页写入 swap;数值过低则可能引发 OOM。实际配置需结合 CPU 负载能力:
- 物理内存 ≤ 8GB:swappiness 设为 60–80,缓解内存压力,但需配合更快的 SSD 作为 swap 分区
- 物理内存 16GB:设为 10–20,降低被动换页频率,适合多数服务器与开发机
- 物理内存 ≥ 32GB 且 CPU 核心数 ≥ 16:可设为 1,仅在极端内存耗尽时启用 swap
同时调整脏页回写阈值,避免突发写入导致 swap 飙升:
- vm.dirty_ratio(默认 30):设为 25,防止脏页占满内存
- vm.dirty_background_ratio(默认 10):设为 5–8,让后台回写更早启动
绑定关键进程与 CPU 核心,隔离 swap 压力影响
当高负载进程频繁申请/释放内存,若其运行在与中断处理或 swap I/O 共享的 CPU 上,会加剧延迟抖动。应主动划分资源:
- 用 taskset 或 cpuset 将内存密集型服务(如数据库)固定到特定 CPU 核心组
- 将存储子系统(如 iSCSI target、swap I/O 调度线程)绑定到另一组核心,避免争抢缓存与总线带宽
- 对实时性要求高的进程,禁用透明大页(echo never > /sys/kernel/mm/transparent_hugepage/enabled),防止大页分配失败触发意外 swap
按 workload 类型选择 swap 策略与位置
虚拟内存效率不仅取决于大小,更取决于“谁在用、怎么用、从哪读”:
- 桌面/开发环境:swap 文件置于 NVMe SSD 的非系统分区(如 /mnt/ssd/swapfile),配合 swappiness=30,兼顾响应与容错
- 数据库服务器:关闭 swap(swapoff -a),改用 vm.swappiness=0 + mlockall() 锁定关键内存段,避免任何分页延迟
- 容器化部署:在宿主机禁用全局 swap,通过 cgroups v2 的 memory.swap.max 为单个容器设限,实现细粒度控制
监控换页行为并反向校验参数有效性
调参后必须验证是否真减少了低效换页。重点关注三个指标:
- pgmajfault/s(每秒主要缺页次数):持续高于 50 表示频繁从磁盘加载页,需检查 swappiness 或内存是否真不足
- pgpgin/pgpgout:反映每秒换入换出量(KB),突增说明 dirty_ratio 或 IO 调度不匹配
- si/so(swap in/out,来自 vmstat):so > 0 持续存在,说明内存压力未缓解,可能需增加物理内存而非调参
建议用 vmstat 1 10 或 cat /proc/vmstat | grep -E "pgpg|pgmaj" 快速定位问题模式。











