使用交换空间而不是RAM可以大大减慢一台电脑。
那么,当我有足够的可用 RAM 时,为什么我的 Linux 系统 (Arch) 会使用交换区呢?
查看下面我的 conky 输出:
另外,这可能是我遇到的速度和系统响应问题的原因吗?
输出free -m
:
$ free -m
total used free shared buffers cached
Mem: 1257 1004 252 0 51 778
-/+ buffers/cache: 174 1082
Swap: 502 144 357
答案1
可以通过设置以下值来配置此行为:
/proc/sys/vm/swappiness
默认值为 60。将其设置为 0 表示当仍有 RAM 剩余时从不使用交换,100 表示尽快换出内存。
要临时更改该值(重新启动时丢失):
sudo sysctl vm.swappiness=10
要永久更改该值,请编辑该文件:
/etc/sysctl.conf
作为root(例如sudoedit /etc/sysctl.conf
)并更改或添加(如果不存在)该行:
vm.swappiness
到所需值 ( vm.swappiness=10
)。如果该文件不存在(例如在 Arch Linux 中),则尝试/etc/sysctl.d/99-sysctl.conf
替代。
关于用可用内存进行交换是好是坏一直存在一些争论,但是Ubuntu 帮助确实建议桌面系统的值为 10。也可以看看本教程适用于 CentOS 的 Digital Ocean。
答案2
Linux系统使用是正常的一些即使仍然有空闲 RAM,也可以进行交换。 Linux 内核将移动到很少使用的交换内存页面(例如,getty
仅使用 X11 和其他一些不活动守护进程的情况)。
交换空间的使用成为一个问题仅当没有足够的可用 RAM 时,并且内核被迫不断地将内存页面移至交换区并移回 RAM,只是为了保持应用程序运行。在这种情况下,系统监视器应用程序将显示大量磁盘 I/O 活动。
为了进行比较,我的 Ubuntu 10.04 系统有两个使用 X11 会话登录且都运行 GNOME 桌面的用户,使用约 600MB 的交换空间和约 1GB 的 RAM(不包括缓冲区和 fs 缓存),所以我想说你的交换数据使用情况看起来正常。
答案3
Linux 在 RAM 被填满之前开始交换。这样做是为了提高性能和响应能力:
性能得到提高,因为有时 RAM 更适合用于磁盘缓存而不是存储程序内存。因此,最好更换一段时间不活动的程序,并将常用文件保留在缓存中。
通过在系统空闲时交换页面,而不是在内存已满且某些程序正在运行并请求更多 RAM 来完成任务时,可以提高响应能力。
当然,交换确实会降低系统速度,但交换的替代方案并不是不交换,而是使用更多 RAM 或使用更少 RAM。
答案4
拥有更多可用内存
就像大家说的那样,是的,交换将帮助您摆脱未使用的内存,因此它可以帮助您拥有更多可用内存。
冬眠
但交换也可以用于冬眠当您拥有笔记本电脑或想要节省能源并在下班前将计算机和工作置于休眠状态时,这非常有用。这样您就可以在第二天早上更快地开始。
具有休眠功能是我们现在仍然看到建议至少具有用于交换的 RAM 大小的主要原因之一。这样系统就可以将所有使用过的 RAM 放入交换区并进入休眠状态。
缺点
请注意,一旦交换了进程,即使在关闭后也可以在交换中读取数据,除非交换已加密(当然)。
在休眠状态下使用加密交换并不适用于所有发行版。您需要使用恒定加密密钥(某些设置在每次启动时随机生成交换空间加密密钥)和 initrd/initramfs 来在恢复之前激活加密卷。