真正开启虚拟内存需先创建swap设备(文件或分区)并配置开机自动挂载,仅swapon命令无法持久生效;free -h中swap行非零且swapon --show有输出才表明已启用。

swapon 能临时启用,但真正“开启虚拟内存”不是执行一条命令就完事——它取决于你有没有可用的 swap 设备(分区或文件),以及是否配置了开机自动挂载。没这俩,swapon 会报错:swapon: /swapfile: failed to activate: Device or resource busy 或更常见的 No such file or directory。
怎么确认当前有没有虚拟内存
直接看 free -h 输出里的 Swap 行:如果全是 0B 或空,说明没启用;如果显示大小(比如 2.0G)且 used 不为 0,说明已启用并正在用。
再用 swapon --show 确认具体设备路径和状态。输出为空,代表系统压根没加载任何 swap 区。
- 别只信
/proc/swaps——它可能残留旧记录,swapon --show才是实时权威 -
free -h中Mem下方的Swap行才是关键,不是看Total列数字大就以为开了
创建 swap 文件比建 swap 分区更稳妥
新服务器、云主机、容器环境基本没预留 swap 分区,硬分容易误操作破坏已有数据。用文件方式更安全、可删、可调大小。
推荐步骤(以 4GB 为例):
- 选一个有足够空间的挂载点,比如
/var或根目录,避免放在/tmp(可能被清理)或/home(权限复杂) - 用
dd if=/dev/zero of=/swapfile bs=1G count=4创建——bs=1G比bs=1M count=4096更快,也更少出错 - 立刻
chmod 600 /swapfile:权限不对(比如 644)会导致mkswap失败,报错Permission denied -
mkswap /swapfile后必须检查返回值,成功才继续;失败常见原因是文件没写满(dd被中断)、权限错、或文件系统不支持(如某些 overlayfs)
启用后必须写进 /etc/fstab,否则重启就失效
swapon /swapfile 只是当前 session 有效。重启后得靠 /etc/fstab 自动挂载。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
在该文件末尾加一行:
/swapfile none swap sw 0 0
注意三点:
- 第一列路径必须和你
swapon时用的完全一致(含绝对路径),多一个空格或少一个斜杠都失败 - 第二列固定填
none,不是挂载点;填swap也行,但none是惯例 - 第三列必须是
swap,不能写成sw或其他;第四列sw是选项,不是类型
加完后建议手动测试:sudo swapoff -a && sudo swapon -a,再跑 swapon --show 验证是否成功加载。
vm.swappiness 不是“开启开关”,但影响实际效果
这个内核参数控制系统多“愿意”把数据往 swap 里扔,默认值通常是 60。值越高,越激进地换出内存;值低(比如 10),只在物理内存快耗尽时才用 swap。
临时调: sudo sysctl vm.swappiness=10
永久调:写入 /etc/sysctl.conf,加一行 vm.swappiness=10
- SSD 用户建议设为
1~10,减少写磨损 - 内存 ≥16GB 的机器,设太低(如
0)反而可能导致 OOM killer 杀进程,1是更安全的底线 - 别迷信“设为 0 就等于关 swap”——
swapon还在,只是内核几乎不用它;真要关,得swapoff -a+ 注释掉/etc/fstab里那行
真正容易被忽略的是:swap 文件位置、权限、fstab 条目格式三者必须严丝合缝,缺一不可。少改一个字符,重启后 swap 就静默失效——而你可能几天后才发现服务莫名 OOM。










