在 14.04 或更高版本上,我应该为 1GB 到 8TB 的 RAM 使用多少交换空间?

在 14.04 或更高版本上,我应该为 1GB 到 8TB 的 RAM 使用多少交换空间?

我打算在一台新机器上安装 64 位 14.04,该机器的 RAM 大约为 1 到 128GB,以后甚至会更多。我应该为交换分区分配多少空间?

尤其是:为什么针对这些数字有哪些建议?

(现有的答案均无这里这里解释任何为什么如果看 1GB 或 RAM 及以上的话,就有点过时了)

答案1

简短的回答是:

将交换文件设置为:

  • round(sqrt(RAM))如果你不要使用冬眠
  • RAM+round(sqrt(RAM))如果你确实使用冬眠

swappiness在桌面上将你的设置为 10,但不在服务器上!

长答案:

在过去:

过去 25 年来使用的经验法则是最小 1xRAM,最大 2xRAM所以这就是你们经常看到的引用。

这个最低限度是在石器时代设定的,那时我还是十几岁的孩子,恐龙还在地球上漫游,而且RAM 太贵了,你绝对需要交换空间才能完成任何事情。

当时设定的最大值是因为收益递减:交换这么多内存实在是太慢了,因为硬盘访问速度比 RAM 慢 1000 倍:在紧急情况下很好,但对于日常使用来说并不好!当时,当你用完交换空间时,就该添加更多 RAM 了!(今天仍然如此)。

在现在:

  1. 如果您不使用休眠模式并且您的内存超过 1GByte,那么新的经验法则round(sqrt(RAM))显然RAM是您的 RAM 大小(以 GB 为单位)和sqrt平方根。:-)

  2. 如果使用休眠模式,则需要能够将全部 RAM+已交换的 RAM 交换到磁盘,因此公式变为:RAM+round(sqrt(RAM))

  3. 收益递减规律至今仍然适用,但除非你测试你的实际使用情况,否则使用 2xRAM 只是浪费磁盘空间,所以不要使用最大除非你使用其他方法耗尽了交换空间

所有这些加在一起就得到下表:
(最后 3 列表示交换空间)

    RAM   No hibernation    With Hibernation    Maximum
    1GB              1GB                 2GB        2GB
    2GB              1GB                 3GB        4GB
    3GB              2GB                 5GB        6GB
    4GB              2GB                 6GB        8GB
    5GB              2GB                 7GB       10GB
    6GB              2GB                 8GB       12GB
    8GB              3GB                11GB       16GB
   12GB              3GB                15GB       24GB
   16GB              4GB                20GB       32GB
   24GB              5GB                29GB       48GB
   32GB              6GB                38GB       64GB
   64GB              8GB                72GB      128GB
  128GB             11GB               139GB      256GB
  256GB             16GB               272GB      512GB
  512GB             23GB               535GB        1TB
    1TB             32GB              1056GB        2TB
    2TB             46GB              2094GB        4TB
    4TB             64GB              4160GB        8TB
    8TB             91GB              8283GB       16TB

以上是只是经验法则; 这不是万有引力定律!
如果您的特定用例不同,请打破此规则(与万有引力定律不同)!

专家提示: 始终在 HDD 启动时分配 SWAP,因为磁头在磁盘内部需要的移动较少。
是的:在 SSD 上,交换区域的位置不再重要,因为它们使用量子隧穿而不是移动磁头,并且现代 SSD 使用其所有内存单元(甚至未分配的空间)来防止量子退化。

如何测试您对 swap 的使用是否与“通用”规则不同:

只需执行:

for szFile in /proc/*/status ; do 
  awk '/VmSwap|Name/{printf $2 "\t" $3}END{ print "" }' $szFile 
done | sort --key 2 --numeric --reverse | more

这将为您提供所有正在运行但被换出的程序的列表(使用最多交换空间的程序位于顶部)

如果您使用的空间超过几 KB:请调整为大于最小值,否则,就不要打扰了......

如果您在服务器上,请立即停止阅读:您已一切就绪!


如果你使用的是台式机/笔记本电脑客户端(而不是服务器),你希望你的 GUI 尽可能灵敏,并且只在真正需要时才交换. Ubuntu 已针对服务器用途进行了优化,gimp但在你的客户端上,你希望快速编辑那张巨大的 250 万像素原始图片,因此将其设置swappiness为 10 将防止内核交换过早,同时确保它不会交换过晚:

如果你有sysctl.conf文件,

sudo nano /etc/sysctl.conf

或者

如果有sysctl.d目录但没有sysctl.conf文件,请创建一个新文件:

sudo nano /etc/sysctl.d/35_swap.conf 

在这两种情况下都添加:

# change "swappiness" from default 60 to 10 
# (theoretically only swap when RAM usage reaches around 80 or 90 percent)
vm.swappiness = 10

到文件末尾,保存文件( nano 中的Ctrl++ )并执行:XYEnter

sysctl --system

重新加载参数或者采用 Window$ 方法并重新启动...:-)

答案2

交换的必要性

交换很有用,原因有 3:

  1. 清除 RAM 中的杂乱数据。从文章在 kernel.org 上:

    “进程在其生命周期早期引用的大量页面可能仅用于初始化,之后再也不会使用。最好将这些页面换出并创建更多的磁盘缓冲区,而不是让它们驻留和闲置”

    换句话说,存储在 RAM 中的数据可能仅在某个进程启动后(如启动进程)才有用,然后只是驻留在 RAM 中,占用原本可以用于更好用途的空间。

  2. 它扩展了进程可以使用的内存量。这是很好理解的。你不希望系统因为内存不足而耗尽并崩溃。出于这个特定原因,交换必须存在,起到保护作用。

  3. 休眠:当计算机休眠时,RAM 的内容将转移到磁盘。

掉期金额

了解交换的用途并根据您机器的 RAM 数量,您可以选择适合您用途的交换大小。没有具体的指导方针,仅是经验法则你可以使用它来调整交换大小以适合你的系统

例如,linux.com建议:

经验法则如下:1)对于桌面系统,使用双倍系统内存的交换空间,因为它允许您运行大量应用程序(其中许多应用程序可能处于空闲状态并且易于交换),从而为活动应用程序提供更多的RAM; 2)对于服务器,使用较少的交换空间(比如物理内存的一半),以便您在需要时具有一定的交换灵活性,但要监视使用的交换空间量并在必要时升级RAM; 3)对于较旧的台式机(只有128MB),使用尽可能多的交换空间,甚至高达1GB。

根据我的个人经验,我会这样做:

考虑到一台拥有 1 - 2 GB 内存且不需要休眠并供日常使用的机器,您可以拥有 1GB 到 2GB 的交换空间。我的 PC 装有 14.04 Ubuntu,拥有 1GB 内存和 2GB 交换空间。交换空间量从未超过 800MB 的界限,我仅将 PC 用于上网和编写脚本。

对于拥有超过 2GB 内存且不需要休眠的 PC,您可以将交换空间从 512MB 保留到 1GB。我有一台装有 15.04 的笔记本电脑,我从未休眠过,并且它有一个交换空间文件不是分区)为 512 MB。RAM 本身为 6 GB,但从未超过 2-3 GB。再次强调:随意使用。

Cosmoscalibur 和 Fabby 已经解决了需要休眠时交换的问题,所以我就不深入讨论了。我的拙见是:

如果你计划休眠,RAM 内容将需要被交换出去,因此你需要它至少与你的RAM大小相同。

相关内容