步骤 1: 检查现有的交换空间
首先,你需要检查当前系统是否已经配置了交换空间以及其大小。你可以通过以下命令来查看:
sudo swapon --show
或者使用 free 命令来查看更详细的内存和交换空间使用情况:
free -h
步骤 2: 创建一个交换文件
如果你需要增加额外的交换空间,可以通过创建一个新的交换文件来实现。下面的例子展示了如何创建一个大小为2GB的交换文件:
sudo fallocate -l 2G /swapfile
如果 fallocate 不可用,也可以使用 dd 命令:
sudo dd if=/dev/zero of=/swapfile bs=1G count=2
步骤 3: 设置正确的权限
确保交换文件只能被root访问是非常重要的,否则可能会带来安全风险:
sudo chmod 600 /swapfile
步骤 4: 设置交换文件
接下来,设置并激活交换文件:
sudo mkswap /swapfile
sudo swapon /swapfile
现在,这个文件已经被设置为交换空间,并立即生效。
步骤 5: 确认新交换空间
再次运行 sudo swapon --show 或者 free -h 来确认新的交换空间已经生效。
步骤 6: 使更改永久化
为了让这些更改在重启后仍然有效,你需要将这条信息添加到 /etc/fstab 文件中。打开 /etc/fstab 文件:
sudo nano /etc/fstab
并在文件末尾添加如下一行:
/swapfile none swap sw 0 0
保存并关闭文件。现在,你的Ubuntu系统应该已经成功增加了虚拟内存。
注意1: 当你创建的虚拟内存过大的时,可以将块大小设置为1MB(1M),然后相应地计算出需要的块数:sudo dd if=/dev/zero of=/swapfile bs=1M count=8192
在这个命令中:
if=/dev/zero 指定输入文件为 /dev/zero,它是一个特殊的文件,提供无限的空字符。
of=/swapfile 是输出文件的位置和名称。
bs=1M 设置块大小为1MB。
count=8192 表示要写入8192个块,每个块大小为1MB,总共就是8GB。
这种方法降低了单次内存分配的需求,从而避免了上述错误。完成这一步之后,你可以按照之前的步骤设置交换文件的权限、将其设置为交换空间并激活它。
有时即使启用了交换空间,如果系统的交换倾向参数(swappiness)设置得过低,系统也可能不会积极地使用交换空间。你可以通过以下命令查看当前的swappiness值:
cat /proc/sys/vm/swappiness
默认值通常是60。如果这个值非常低(例如接近0),则意味着系统更倾向于保留物理内存而不是使用交换空间。你可以临时调整这个值来测试效果:
sudo sysctl vm.swappiness=60
这个数值最大为100
要永久更改此设置,可以在/etc/sysctl.conf文件中添加一行:
vm.swappiness = 60
保存并退出,然后执行以下命令使更改立即生效:
sudo sysctl -p