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

Tim*_*Tim 16 partitioning swap

我打算在一台新机器上安装 64 位 14.04,它有 1 到 128GB 的​​内存,以后还会有更多的内存。我应该为交换分区分配多少空间?

特别是:为什么对这些数字提出这些建议?

此处此处的现有答案均未解释任何原因,如果我们查看 1GB 或 RAM 及以上,则有些过时)

Fab*_*bby 32

简短的回答:

将交换文件设置为:

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

swappiness在台式机上设置为 10,但在服务器上设置为 10

长答案:

在过去:

过去 25 年使用的经验法则是最小 1xRAM 和最大 2xRAM,因此您会一直看到引用的内容。

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

由于收益递减,当时设置了最大值:因为 HDD 访问速度比 RAM 慢 1000 倍,所以不得不交换这么多内存实在是太慢了:紧急情况下很好,但对于日常使用不太好!当时,当您用完交换空间时,是时候添加更多 RAM 了!(今天仍然如此)。

在现在:

  1. 如果你不使用的休眠和你的内存超过1GB的拇指的新规定round(sqrt(RAM)),其中RAM显然是在GB您的RAM大小和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
Run Code Online (Sandbox Code Playgroud)

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

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

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

只需执行:

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

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

如果您使用的 KB 多于几 KB:将大小调整为大于最小值,否则,请不要打扰...

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


如果您使用的是台式机/笔记本电脑客户端(而不是服务器),您希望 GUI 尽可能地响应,并且仅在您真正需要时才进行切换。Ubuntu已经经过优化,交换早期的服务器使用,但是你的客户你想编辑一个巨大的250兆像素的原始图片中gimp是快速的,所以设置你的swappiness〜10将保持内核从交换太早,同时确保它不” t 交换太晚:

如果你有一个sysctl.conf文件,

sudo nano /etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)

或者

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

sudo nano /etc/sysctl.d/35_swap.conf 
Run Code Online (Sandbox Code Playgroud)

并在这两种情况下添加:

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

到该文件的结束时,保存该文件(Ctrl+ XY+Enter纳米),并执行一个:

sysctl --system
Run Code Online (Sandbox Code Playgroud)

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

  • “收益递减”仅意味着 HDD 访问速度比 RAM 慢 1000 倍,因此如果您需要换出两倍的 RAM,您将在它完成之前因年老而死亡......它只是在您休眠时已经换了... (2认同)

Ser*_*nyy 6

交换的必要性

Swap 之所以有用有 3 个原因:

  1. 从 RAM 中清除杂乱。来自kernel.org 上的文章

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

    换句话说,存储在 RAM 中的数据可能只有在进程启动时(如启动进程)才有用,然后简单地驻留在 RAM 中,从而使空间变得混乱,可用于更好的目的。

  2. 它扩展了进程可能使用的内存量。这很好理解。您不希望系统因内存不足而导致内存不足而崩溃。出于这个特定原因,交换必须存在,作为保护功能。

  3. 休眠:当计算机休眠时,RAM 的内容会进入磁盘。

掉期金额

了解交换的目的并根据您机器的 RAM 量,您可以选择适合您目的的交换大小。没有具体的指导方针,只有经验法则,您可以使用它们来定制交换大小以适合您的系统

例如,linux.com推荐:

一个经验法则如下: 1) 对于桌面系统,使用双系统内存的交换空间,因为它可以让你运行大量的应用程序(其中许多可能是空闲的并且很容易交换),使得更多 RAM 可用于活动应用程序;2)对于服务器,有较少的可用交换空间(比如物理内存的一半),这样您就可以在需要时灵活地进行交换,但要监控使用的交换空间量并在必要时升级您的 RAM;3) 对于较旧的台式机(比如只有 128MB),使用尽可能多的交换空间,甚至高达 1GB。

根据个人经验,这就是我要做的:

考虑到一台 1 - 2 GB 的机器不需要休眠和临时使用,您可以拥有 1 GB 到 2 GB 的交换空间。我的 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 相同。