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


14

我打算在一台新计算机上安装64位14.04,其内存为1到128GB RAM,然后再增加RAM。我应该为交换分区分配多少空间?

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

此处此处的现有答案均未解释任何原因,如果我们查看的是1GB或RAM或更高容量,则会有些陈旧)


6
可能有16GB RAM的副本我需要32GB交换空间吗?有2017年的答案(或2017年更新),因此目前包含的建议要多于此。
Melebius

1
@Melebius:我不同意:尽管这个问题较新,但比您要复制的问题更通用。此问答包含较早的问答,但事实并非如此! ;-)
Fabby

1
@Fabby在这种情况下,是否不应该将另一个标记为与此标记相同?
Melebius

1
@Melebius如果审阅者可以将两个问题都用作不同情况下其他问题的重复问题,则由于两个问题都对答案提出了很高的要求,因此两个问题都可以保持开放状态以应对这些不同情况。
卡雷尔(Carel)'18

2
@Melebius我们已经在meta中对此主题进行了讨论,社区决定让每个人都保持原样。
Fabby

Answers:


30

简短的答案:

将您的交换文件设置为:

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

swappiness在台式机(而不是服务器)上将您的密码设置为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

以上只是一个经验法则; 这不是万有引力定律!
可以,如果打破这种规则(不像万有引力定律)的特定用途的情况是不同的!

专家提示: 始终在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已经经过优化,交换早期的服务器使用,但是你的客户你想编辑一个巨大的250兆像素的原始图片中gimp是快速的,所以设置你的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+ XY+ Enter)并执行:

sysctl --system

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


1
谢谢。您所说的“收益递减”是什么意思?如果RAM和交换模块都已充分使用,那么即使交换模块的大小为2 * RAM,也无法休眠,不是吗?(因为休眠状态需要交换的大小为RAM +交换,这是不可能的吗?)
蒂姆

是的,但是我从未发生过……(而且我已经老了!因此2 * RAM:当所有RAM都被交换时,您仍然可以休眠...
Fabby 2015年

2
“降低回报”只是意味着HDD访问比RAM慢1000倍,因此,如果您需要换出两次RAM,则在完成之前您将死于老龄化...重新交换...
Fabby 2015年

1
@Fabby这是简历再次对原始问题的审查时间:askubuntu.com/review/close/889454。请参阅问题下的Yufenyuy Veyeh Dider的评论。
卡雷尔'18

1
@mrkskwsnck:是由同一位作者... ;-)
Fabby

6

交换的必要性

交换非常有用,原因有以下三个:

  1. 从RAM中清除混乱。从kernel.org上的文章中:

    “一个进程在生命周期的早期引用的大量页面可能仅用于初始化,然后再也不会使用。与将它们留在驻留和未使用状态相比,换出这些页面并创建更多的磁盘缓冲区要好得多”

    换句话说,存储在RAM中的数据仅在启动某个进程(如启动进程)之后才有用,然后仅驻留在RAM中,从而使混乱的空间可用于更好的目的。

  2. 它扩展了进程可能使用的内存量。这是众所周知的。您不希望系统由于内存不足而耗尽内存并崩溃。由于这个特定原因,交换必须存在,作为保护功能。

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

掉期金额

了解交换的目的并根据计算机的RAM量,您可以选择适合您目的的交换大小。没有具体的准则,只有经验法则可用于调整交换大小以适合您的系统

例如,linux.com建议:

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

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

考虑到具有1-2 GB且无需休眠的计算机以及临时使用的计算机,您可以拥有1GB到2GB的交换空间。我的装有14.04 Ubuntu的PC拥有1GB的RAM和2GB的交换空间。交换金额永远不会超过800MB的边界,我仅将PC用于浏览网页和编写脚本。

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

Cosmoscalibur和Fabby已经解决了交换问题,以防万一您需要休眠,因此我不会做太多的讨论。我的拙见是:

如果您计划休眠,则需要换出RAM内容,因此您至少需要与RAM相同的大小。


:-)只是注意到现在您发布了一些东西。编辑并投票!(根据我的编辑,现在ist是一个很好的答案!:D:D:D)
Fabby
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.