绝大多数现代linux服务器(尤其是云主机)用fallocate创建swap文件就够了,比分区快、安全、易调整;仅i/o延迟极度敏感的数据库或高负载物理服务器才需独立swap分区。

不用分区,直接用文件就行——95% 的 Linux 服务器(尤其是云主机)根本不需要 swap 分区,/swapfile 就够了。
怎么创建 Swap 文件(而不是分区)
Swap 分区只在物理服务器、I/O 极敏感的数据库或裸金属场景下才值得折腾。绝大多数情况,fallocate 创建一个文件更安全、更快、可随时删改。
-
fallocate -l 4G /swapfile是首选:秒级完成,不写零,不磨损 SSD;如果报Operation not supported(比如某些 XFS 挂载点或 NFS),再 fallback 到dd if=/dev/zero of=/swapfile bs=1M count=4096 - 路径必须是根文件系统下的普通文件,不能是
/tmp、/var/tmp(可能挂载为 tmpfs)、符号链接或容器卷 - 必须立刻执行
chmod 600 /swapfile,否则mkswap或swapon会拒绝操作 - 运行
mkswap /swapfile格式化,输出里带 UUID,记下来备用(后面写/etc/fstab用)
为什么 /etc/fstab 里那行容易出错
写错一个字符,系统可能卡在 initramfs 或启动慢几十秒。这不是警告,是真实发生过的故障。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 正确写法只有一行:
/swapfile none swap sw 0 0(四个字段,单空格分隔) -
none是固定关键字,不是路径,不能写成swap或/swapfile -
sw是标准挂载选项,不是defaults—— 后者在较新 Ubuntu/CentOS 上会隐式启用relatime等,导致swapon -a失败 - 末尾两个
0:第一个表示 dump(swap 不备份),第二个表示 fsck(swap 不校验) - 写完必须测试:
sudo swapoff -a && sudo swapon -a,没报错再swapon --show确认类型是file、大小匹配、USED初始为0
vm.swappiness 设多少才不拖慢服务
它不是开关,是“倾向性”参数:值越低,内核越忍着不动 swap,直到 OOM 前最后一刻;设太高反而把干净页无谓换出,放大 I/O 压力。
- 桌面环境可保留默认
60;但 Web 服务、Java 应用、PostgreSQL/MySQL 建议设10~30 - 临时调:
sudo sysctl vm.swappiness=10 - 永久生效:
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf && sudo sysctl -p - 注意:
swappiness=0≠ 禁用 swap,只是“死守 RAM”,仍可防 OOM;swappiness=1才真正禁用换出(极少需要) - Kubernetes 节点通常要求
swappiness=0,否则kubelet可能报Node is under pressure
别跳过验证和监控环节
很多问题不是配置错了,而是没验证、没盯住真实行为。
- 启用后立刻看:
free -h确认Swap行非零;swapon --show确认TYPE是file、PRIORITY正常(默认-2,可手动提至10) - 查真实压力:
cat /proc/sys/vm/swappiness、grep -i swap /proc/meminfo、vmstat 1看si/so是否持续非零 - 警惕假象:
swap used不为 0 ≠ 正在频繁换入换出——可能是内核预分配或短暂缓存;要看cat /proc/swaps的priority和type,再结合pgpgin/pgpgout统计 - 云盘上开 swap 要小心:
top里%wa暴涨、响应变卡,大概率是 I/O 延迟拖垮了 swap 性能,这时宁可调低swappiness,也不硬加大小
真正容易被忽略的是:Swap 文件所在分区的剩余空间,必须始终大于 Swap 大小——swapon 成功不代表它能一直工作,写满时系统不会报错,只会静默失效或触发 OOM。










