我应该在14.04或更高的1GB到8TB RAM上多少交换?

我将在一台新机器上安装64位14.04,其中包括1到128GB RAM,以及更高的RAM。 我应该为交换分区分配多少空间?

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

( 这里和现有的答案都没有解释任何原因 ,如果我们看看1GB或RAM以上有点过时)

简短的回答:

将交换文件设置为:

  • 如果不使用hibernate,则为round(sqrt(RAM))
  • RAM+round(sqrt(RAM))如果你使用hibernate

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

答案很长:

在过去:

在过去25年中使用的经验法则至少是1xRAM和最大2xRAM,因此这是你一直看到的引用。

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

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

在现在:

  1. 如果您不使用hibernate并且您的内存超过1GByte,则新的经验法则是round(sqrt(RAM)) ,其中RAM显然是您的RAM大小(以GB为单位)。

  2. 如果你使用hibernate,你需要能够将全部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的使用是否与“generic”规则不同:

只需执行:

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

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

如果你使用的是更多的KB:resize到最小值,否则,不要打扰……

如果你在服务器上,请立即停止阅读:你已经准备好了!


如果您使用的是台式机/笔记本电脑客户端(非服务器),则希望您的GUI尽可能快速响应,并且只在您真正需要时进行交换 。 Ubuntu已经过优化,可以提前交换服务器使用, 但是在您的客户端上,您希望在gimp编辑大量250万像素的原始图像 ,因此将swappiness设置为10将使内核不会过早交换,同时确保它不要太迟交换:

 sudo nano /etc/sysctl.conf 

并添加:

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

到文件末尾,保存文件( Ctrl + X Y + Enter in nano)并执行:

 sysctl --system 

重新加载参数或采取Window $方法并重启…… 🙂

交换的必要性

交换有用有三个原因:

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

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

    换句话说,存储在RAM中的数据可能仅在进程启动时(如启动过程)有用,然后简单地驻留在RAM中,杂乱空间可用于更好的目的。

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

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

交换金额

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

例如, linux.com建议:

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

从个人经验来看,这就是我要做的事情:

考虑到一台1-2 GB的机器不需要hibernate和休闲使用,你可以拥有1GB到2GB的交换空间。 我的14.04 Ubuntu的PC有1GB的RAM和2GB的交换。 交换量永远不会超过800MB边框,我只使用我的PC上网和脚本。

如果PC的容量超过2GB且您不需要hibernate,则可以保持从512MB到1GB的交换。 我有一台15.04的笔记本电脑,我没有hibernate过,而且有一个512 MB的交换文件不是分区 )。 RAM本身为6 GB,但有时不超过2-3 GB。 再次:随意使用。

Cosmoscalibur和Fabby已经解决了你需要hibernate的问题,所以我不会过于广泛地讨论这个问题。 我的拙见是这样的:

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