centos swap性能调优方法有哪些
小樊
45
2026-01-04 00:06:15
CentOS 交换分区性能调优方法
一 容量与布局
- 先明确业务类型:数据库、消息队列、实时计算等对延迟敏感的工作负载更适合“小而有保障”的 swap;批处理、离线任务可容忍更高 swap 使用。
- 容量建议(经验与官方口径并存,按场景取舍):
- 通用规则:小于4GB内存可设约4GB;4–8GB设8GB;大于8GB设16GB。
- 若更看重稳定性与缓冲,可参考“1–2 倍 RAM”的上限策略,但内存很大(如≥64GB)时不必盲目放大,通常8–16GB即可。
- 布局与介质:
- 优先使用SSD/NVMe承载 swap,显著降低换页延迟;HDD 场景尽量减少 swap 使用或降低 swappiness。
- 可配置多个 swap 区/文件并设置优先级(pri=),利于多盘分担 IO(如:swapon -p 10 /swapfile1;swapon -p 5 /swapfile2)。
- 创建与启用示例(swap 文件):
- 创建:fallocate -l 8G /swapfile(或 dd if=/dev/zero of=/swapfile bs=1G count=8)
- 权限:chmod 600 /swapfile
- 格式化:mkswap /swapfile
- 启用:swapon /swapfile
- 持久化:/etc/fstab 追加“/swapfile none swap sw 0 0”。
二 关键内核参数
- vm.swappiness(换出倾向,范围0–100)
- 默认值多为60;延迟敏感服务建议更低(如10);内存充足且容忍 OOM 的场景可更低(如1);设为0并非“绝对不用 swap”,只是尽量避免,极端内存紧张仍会使用。
- 临时:sysctl vm.swappiness=10;永久:/etc/sysctl.conf 添加“vm.swappiness=10”。
- vm.vfs_cache_pressure(VFS 目录/索引节点回收倾向)
- 默认100回收较激进;可适当降低(如50)以保留更多目录/索引缓存,减少元数据 IO。
- vm.min_free_kbytes(保留最小空闲内存)
- 影响内存“水位线”(min/low/high),过小易触发直接回收导致卡顿,过大浪费内存。经验值可在1–8GB区间按内存规模选取(如4GB)。
- 透明大页 THP
- 对内存密集型/低延迟服务,建议关闭以减少延迟抖动:echo never > /sys/kernel/mm/transparent_hugepage/enabled;echo never > /sys/kernel/mm/transparent_hugepage/defrag。
- NUMA 与 zone_reclaim_mode
- 多 NUMA 节点且出现“内存尚有空闲却发生 swap”的场景,可设 vm.zone_reclaim_mode=0,允许跨节点分配,降低不必要回收与换页。
- 可选:tuned 服务
- 若已手工完成内核参数优化,可关闭 tuned 避免策略冲突:tuned-adm off;systemctl stop tuned && systemctl disable tuned。
三 使用 zswap 与 zram
- zswap(内核级压缩缓存,位于内存中,减少对磁盘 swap 的访问)
- 适合物理内存较紧张、偶尔换页的场景;开启后可显著降低磁盘 IO,提升响应。
- zram(在内存中创建压缩块设备充当 swap)
- 适合无磁盘 swap 或磁盘性能较差的环境;注意会占用一部分可用 RAM。
- 二者均可在现代发行版启用,通常优先尝试 zswap,资源更紧张或无法使用磁盘 swap 时再考虑 zram。
四 监控与故障排查
- 常用观测
- free -h、swapon -s、top/htop、vmstat 1、iostat -x 1;关注 si/so(换入/换出)、await、svctm、%util 等指标。
- 典型问题与处理
- “内存充足却用 swap”:检查 swappiness 是否过高、是否启用 THP、是否存在 cgroup/memory.limit_in_bytes 限制(如容器未限 swap)、以及 systemd/system.slice/docker 等是否占用;必要时降低 swappiness、关闭 THP、为容器设置内存与 swap 限额。
- 禁用或移除 swap(谨慎)
- 先停用:swapoff -a(可能耗时);再在 /etc/fstab 注释 swap 行;如需彻底移除,删除 swap 文件/分区并调整分区表。生产环境不建议无替代方案下直接禁用。
五 场景化建议
- 延迟敏感(数据库、消息队列、低延迟 API)
- 小容量 swap(如1–4GB或按“4/8/16GB”规则),vm.swappiness≈1–10,关闭 THP,必要时设 vm.zone_reclaim_mode=0;优先 SSD/NVMe;监控 si/so 接近 0。
- 大数据/内存密集型(如 CDH 集群)
- 倾向 vm.swappiness=0–1、合理 vm.min_free_kbytes(如4GB量级)、关闭 THP、zone_reclaim_mode=0;确保 swap 在 SSD 上,避免抖动放大。
- 通用/虚拟机
- 采用“4/8/16GB”容量基线,vm.swappiness≈10–30,开启 zswap 作为第一道防线;结合工作负载逐步微调并压测验证。