据我了解,Linux中的交换分区的目的是从RAM中释放一些“不那么频繁访问”的信息,并将其移至硬盘驱动器上的特定分区(以使读写速度变慢为代价) to),实际上允许活动的应用程序使用更多的“高速内存”。你用光了。但是,如果您的系统具有16 GB或32 GB的RAM,并且假设您不是在Linux上运行StackExchange的MySQL数据库或在Linux中编辑1080p全长电影,那么是否应该使用交换分区? >

评论

@mikeserv你知道,我很乐意接受这两个字母作为喜剧效果的答案。

@Janis-花费很多。如果您实施了声音内存管理,那么即使在1GB的计算机上也无需交换就可以轻松完成。交换会提高性能-当拥有交换时,内核将不可避免地使用它。因此,在1TB或任何大小的磁盘上创建交换分区,是向内核发出了将内存页放入磁盘的邀请,而不是将其保留在RAM中或将其完全删除。使用16gb,典型的用户将永远无法使用所有功能-在3天的正常运行时间后,我已经使用了24gb / 2gb的RAM和10gb的高速缓存(因为我将torrent下载到/ tmp)。

@mikeserv,我怕你错了;我一直在观察显示的磁盘指标。只要有可用内存,就不会使用交换,只有在内存已满时才开始交换。我认为这取决于您使用计算机的方式。每天晚上关闭的台式机系统很少会遇到内存问题,但是我的系统的正常运行时间为几个月。是的,交换会提高性能,但是如果没有RAM空间,则系统可以继续工作。您有什么选择?也许您可以详细说明内存管理参数。我使用预先配置的Linux系统。

@mikeserv您如何发表少于15个字符的评论?

@immibis那里有12个零宽度空格

#1 楼

是的。

绝对应该始终启用交换功能,除非有非常令人信服的,令人讨厌的原因(例如,根本没有磁盘,或者只有网络磁盘)。您是否应该按照通常建议的荒谬大小(例如,两倍于RAM的数量)进行交换?好吧,

原因是交换不仅在您的应用程序消耗的内存大于物理RAM时才有用(实际上,在这种情况下,交换根本没有用,因为它会严重影响性能)。如今,进行交换的主要动机不是将16GiB的RAM神奇地转换为32 GiB,而是更有效地利用已安装的可用RAM。未使用的RAM是您可能不应该购买并节省的钱。因此,将缓存您加载的任何内容或以其他方式映射到内存的任何内容,任何可能在任何时候以后被任何人重用的内容(受安全性限制)。机器启动后不久,所有物理RAM都将用于某些用途。 br />

从缓冲区缓存中清除页面
从映射中清除页面(在大多数系统上与#1相同)
移动没有被访问了很长时间-最好永远不会-进行交换(实际上甚至可能会主动发生,不一定在最后一刻发生)
杀死您的进程,或者杀死一个随机进程(OOM)
内核恐慌

选项#4和#5是非常不可取的,只有在操作系统别无选择时才会发生。选项#1和#2意味着您扔掉了一些可能很快就会需要的东西。这会对性能产生负面影响。

选项#3表示您将(可能)很快不需要的东西移到了慢速存储上。很好,因为现在您需要的东西可以使用快速RAM。

通过删除选项#3,您实际上已将操作系统限制为只能执行#1或#2。从磁盘上重新加载页面与从交换中重新加载页面相同,只是通常不太可能需要从交换中重新加载(由于做出了正确的分页决定)。换句话说,通过禁用交换,您可以获得什么都没有,但是您限制了操作系统在处理内存请求时有用选项的数量。

[edit]

请仔细阅读mmap联机帮助页,特别是对MAP_NORESERVE的描述将注意到另一个很好的理由,即使在具有“足够”物理内存的系统上,交换还是有必要的:没有可用的物理内存。“

-请稍等,这是什么意思?

如果您映射文件,则可以直接访问文件的内容,就好像文件是魔术般地在程序的地址空间中一样。对于只读访问,操作系统原则上只需要一个物理内存页,每次访问不同的虚拟页时,它就可以使用不同的数据重新填充(出于效率方面的考虑,这当然不是要做的,但是原则上,您可以通过一页物理内存访问价值TB的数据。现在,如果您还写入文件映射该怎么办?在这种情况下,操作系统必须具有一个物理页面(或交换空间),以准备写入的每个页面。在脏页写回过程完成工作之前(这可能需要几秒钟),没有其他方法可以保留数据。因此,操作系统会保留(但不一定要提交)交换空间,因此,如果您正在写映射而又没有物理页面未使用(这是很可能的,也是正常情况),重新保证它仍然可以工作。

现在,如果没有交换该怎么办?这意味着不能保留任何交换(duh!),这意味着一旦没有可用的物理页面,而您正在写到页面,就会以过程接收的形式令人惊喜细分错误,有可能被杀死。

[/ EDIT]

但是,传统的建议是将交换空间增加为RAM的两倍。尽管磁盘空间很便宜,但分配这么多的交换空间没有意义。浪费便宜的东西仍然是浪费,并且您绝对不希望不断地交换大小为数百兆字节(或更大)的工作集。

没有单一的“正确”交换大小(“正确”交换大小与用户和意见一样多)。无论RAM大小如何,我通常都分配一个固定的512MiB,这对我来说非常有效。其背后的原因是,即使在很小的磁盘上,512MiB如今仍可负担得起。另一方面,添加几GB的交换再好不过了。除非有严重的问题,否则您将不使用它们。

即使在SSD上,交换也比RAM慢几个数量级(由于总线带宽和延迟),并且如果您确实需要大量的交换,那么很可能将不需要再次交换的东西(即,您很有可能不会再次交换它,因此有效地免费扩展了可用页面池)是可以接受的(也就是说,您有一个使用50GiB数据集的应用程序),您几乎迷失了。因此,对于大多数人(包括我)来说,这不是一个选择,因此进行大量交换是没有意义的。

评论


完全不正确:内核不使用磁盘可能是一个优势,特别是如果您已按照规范配置了OOM。如果将OOM杀手配置为处理清理,则这样做比浪费磁盘空间和降低计算机速度要好。

–mikeserv
15年3月16日在16:22

有8 GB的RAM和8 GB的交换空间以及16 GB的RAM和无交换空间有什么区别?如果您的计算机认为它需要16.001 GB的内存,难道它不会以相同的方式开始清除/杀死事物吗(但是性能会在开始发生之前下降)。

–尼克T
15年3月16日在19:10

@NickT:交换不是为了获得更多的RAM,而是一个红旗,以至于某些东西很快就会被杀死。我喜欢杀死前有一个红旗,而不是一个过程在眼前“随机”消失。

–鸭鸭
15年3月16日在19:34

-1这个答案没有任何意义。为何慢速内存(交换)比相同数量的更快内存(RAM)具有更好的性能?在某些时候,您必须确认有足够的RAM意味着不需要交换。

–user541686
2015年3月16日20:23



@Mehrdad:确实有道理。较慢的内存(交换)可提高性能,因为“较慢”对于您很少访问或从不访问的内容无关紧要。通过移出“冷”数据,交换可有效地增加可用于“热”数据的内存量。每小时仅执行一次操作的守护程序或由默认加载但从未使用的内核模块分配的内存就是一个示例。您可以换出它们,也可以从缓存中删除页面。哪一个更好?

–达蒙
15年3月16日在20:32

#2 楼

我不同意我在这里所说的一些观点。我仍然会创建SWAP分区,尤其是在生产环境中。我也为我的家用计算机和VM进行此操作。 2倍的记忆曾经是经验法则。交换磁盘是“便宜的”,因为它不需要备份或保护。

如果内存不足,那么交换空间将为您提供一些时间和缓冲来解决该问题。

意识到/ tmp之类的东西可以驻留在交换空间中。

交换区域可以保存部分内核转储,以便下次重新启动时可以将其还原。这对于您将来需要进行的某些调试紧急情况可能会很好。

评论


+1。进行交换意味着内存不足时性能下降与硬崩溃之间的区别。

– Davidmh
15年3月16日在8:35

@mikeserv不管您如何配置,如果您的程序尝试分配的内存超出可用内存的数量,则将导致崩溃,否则操作系统将开始杀死它们。

– Davidmh
15年3月16日在16:29

@Davidmh:因此,您的交换文件必须无限大,否则您的程序在耗尽交换文件时仍然会崩溃。

–user541686
2015年3月16日19:35



@Mehrdad,但它也更昂贵。鉴于您拥有X GB的RAM,因为这是您力所能及的,因此对于某些合理的Y值(这将取决于您的使用情况和大小),它绝对比拥有X GB的RAM和swap的Y更糟。您的高清)。

– Davidmh
15年3月16日在19:58

“您的交换空间为您提供了一些时间和缓冲来解决问题” –这也意味着我必须在无响应的计算机前坐更长的时间,直到内存泄漏“解决”自己。

–拉斐尔
15年3月17日在6:26

#3 楼

也许:

我已经对该主题进行了很多思考,并且看到观点在论证的两面都比我数不胜数。我的方法是找到一种查找方法。

从您认为足够大的活动交换分区开始。

然后在工作区中打开终端并发出命令free -hs 1,该命令每秒报告一次使用情况。

(可选)切换到其他工作区。一次运行所有常用应用程序,浏览多个选项卡,然后拼命尝试为系统提供实际锻炼,这可能意味着在运行编译操作并检查电子邮件或其他内容时重新编码1/2打视频。让我们面对现实,这一切都与您如何使用系统有关。

当您感到系统处于高负载(或您可能获得的最大负载)之后,请查看终端并检查结果。或者最好通过将>output.txt添加到命令将输出重定向到文件,以便您可以检查完整运行。如果您使用的掉期从未超过Mem free,则无需交换。如果可以,那么您可以。

我不需要交换。也许你会。为什么不找出来?

就规模交换而言,经验法则通常被高估,因为这是基于使用的问题。

评论


那么,您是说交换仅在系统绝对需要时才使用吗?在这种情况下,启用交换功能是否会受到惩罚-以防万一?其他评论似乎表明,即使存在交换也会损害性能?

–怀特先生
15年3月17日在10:35

@ w3d不,我不是在说那个。从上面的输出中可以看到,即使不需要交换,也会使用swap。这可以通过交换因子进行一些调整。我说的是交换与否的必要性。

–古怪的长老
2015年3月17日14:25



您可以编写脚本以在交换超过免费时向上递增交换吗?

– JFA
15年3月18日在18:59

@JFA我还没看完。就个人而言,我很难为此目的保留不确定数量的交换空间。从理论上讲,一切皆有可能。这是实现阶段,很有趣。

–古怪的长老
15年3月19日在13:22

#4 楼

注意:这是在特定的特殊情况下发生的。如果要解决问题,这可能会很有用。我并不是要暗示所有计算机都必须交换。在紧凑型闪存设备上运行时,我不想通过交换来磨损CF,并且有足够的内存供应用程序使用。我遇到一个问题:

内存碎片

没有交换空间,内存逐渐变得越来越碎片化,尤其是在长时间运行的进程中(即使我有很多空闲空间)内存,所有内容都非常小)。我放入了一些交换空间,并告诉Linux除非必要,否则不要使用它。这可以完全解决问题。

除了其他所有功能之外,交换空间还可以移动内存并对其进行碎片整理。如果您的内存碎片化,并且需要一个大块,那么碎片将被换出。换回它们时,它们会有效地进行碎片整理。

检出/ proc / buddyinfo-我的现在看起来像这样:

Node 0, zone      DMA      9      5      3      4      2      3      2      2      3      3      1 
Node 0, zone    DMA32  33901   1149      0      0      0      0      0      0      0      0      1 
Node 0, zone   Normal   2414   1632    259     22      3      0      2      0      1      1      0 


数字代表不同大小的块;每个大小都是下一个块大小的一半,从左侧的4mb块到右侧的4kb(即4mb,2mb,1mb等)。新启动的计算机应在左侧保留所有块,而在右侧保留很少的块(=未分段)。还请记住,相同的内存量(例如4mb)将在各列中表示为不同的数字-最左边一列为1个块,最右边一列为1024。

从尽可能远的池中分配内存;例如如果您的程序要一次获得12kb的内存,它将从16kb的列中获取;其余的将出现在4kb列中。如果没有16kb的块,则它将取自32kb的块,从而剩下16kb和4kb,依此类推。

如果没有足够大的内存块,并且您有交换空间,则例如如果您需要16kb的内存,它将找到使用最少的16kb块(例如,可能包含4kb的已用块,4kb的可用块和2个更多的已用4kb块),仅将USED部分移动以进行交换,然后将释放的内存分配给新应用。我可以告诉(崩溃的机器去!)内核将从内存移动到交换,然后交换到内存,但是永远不会在内存之间移动。

评论


您的案例看起来很适合分配/实现大页面。它将避免碎片问题(因为一旦分配了一定大小的大页面,此后将永远永远仅以该大小再次分配它)。

–mikeserv
2015年3月16日20:39



这就是我曾经读过的最好的理由,它赞成使用交换分区。我尝试了快速搜索,但没有找到相关参考,我想知道为什么不经常记录此功能。

– To마SE
15年3月18日在10:47

(非透明)大页面可能无法被您的应用程序使用。通常,需要大量内存的应用可以使用它们。例如,数据库服务器,java jvm。必须明确启用它们,它们将成为一个单独的内存池,不能用于其他目的。根据您的情况,这可能是好事也可能是坏事。另外,了解透明大页面。它们试图四处移动,以便您使用巨大的页面(以提高性能),即使您的应用程序不知道如何使用。如果内存零散,那么大页面清扫程序还有很多工作要做。

–丹·普里兹(Dan Pritts)
15年3月18日在16:19

我毫不怀疑您对Flash设备的使用经验,只是不相信您介绍的单个用例等同于可能需要交换,而且我不相信内存碎片与是否进行交换有关。它确实提出了一个有趣的问题,可以轻松地对其进行测试,证明或证明。

–古怪的长老
15年3月20日在1:34

后续问题。您所说的“内存碎片”是什么意思? MMU不在乎某个虚拟地址空间中用于连续页面的物理页面是否连续。物理页面是分散的,但这无关紧要(只要我们在单集群物理计算机上谈论普通的应用程序内存,而不是外围设备或系统管理程序使用的内存页面)。当程序要求16kB时,它将获得4页,这可能会或可能不会在物理内存中的任何地方靠在一起。

–吉尔斯'所以-不再是邪恶的'
2015年3月20日在21:17



#5 楼

您的交换空间绝不能超过等待内核进行交换的最大容量。否则,您只是在为系统创建新的故障模式(交换时陷入无法恢复的泥潭)。请注意,尽管现代驱动器能够以GB / sec的数量级进行传输,但是Linux通常只能以每秒几百kB或最多几MB的速率移动交换。因此,巨大的交换可能会使您的系统在几分钟,几小时甚至几天内无法使用。的“垃圾数据”过程一直存在,但从未使用过。此范围可能在几兆到几百兆之间。这种策略允许您将所有物理内存用于缓存有用的信息,而不是永久存储可能永远不会再使用的数据。

如果您没有足够的物理内存,则需要评估您是否可以忍受大量交换带来的严重速度下降。如果是这样,那么最多有1-2 GB的交换空间可能是有意义的,如果您的驱动器非常快,则可能有多达4 GB的空间。但除此之外,这只会使您的系统的故障模式更糟,您应该考虑购买更多的RAM。

评论


我认为这是最好的答案。如果交换空间过多,则由于所有交换,可能会使计算机完全无响应。这意味着您无法终止令人讨厌的过程。如果减少交换空间,OOM杀手将自动为您完成工作。关于文件缓冲区缓存的其他答案中的参数完全令人信服。您应该进行交换,以便内核可以将文件缓冲区移至交换...磁盘上的哪个?请。

– Timmmm
18年8月7日在15:48



我可以找到的关于交换空间的唯一论据是:“某些程序泄漏内存”。和?如果OOM杀手杀死了您没有保存的重要内容,那么您实际上就失去了工作。这意味着该参数变得完全无关紧要,我可以强制关闭我的计算机以达到完全相同的效果,同时对于拥有大量内存且经常被换出的低优先级任务仍然具有高交换空间。如果您的计算机陷入这种状态,那是您自己的错。发生在我身上的唯一一次是我自己编写一个程序来填充整个工作记忆。

– ah哈哈
19-10-1在19:49



#6 楼

交换分区具有重要的价值,而不仅仅是在用尽时充当额外的RAM。您可能会发现更多的内存用于缓存IO并使其更快(通过最小化磁盘访问并降低SSD的磨损),而不是保存某些程序已分配但每12小时仅使用一次的数据。一些守护进程。

另外,Linux使用一种乐观的内存分配策略,即使不确定不确定是否有实际的内存来填充页面,也可以通过该策略名义上分配页面。这比进行适当的检查和映射每个分配更为有效,并且通常不会造成任何问题。但是,内核用来确定允许分配是否合理的启发式方法包括系统上可用的交换级别,因此,即使系统使用的交换量很大,即使使用很少,分配也会更快。 >
这些因素加在一起,我个人认为最好在几乎所有普通系统上进行交换,但是对于大内存,我会忽略ram * 2规则,而将交换空间限制在4-8GB(取决于磁盘的大小)。

评论


甚至4GB对于台式机来说也太大了。如果发生问题,我宁愿先激活OOM杀手,然后再等待这么多交换完成。 (如果遇到了需要更多的情况,我可以在运行任何需要比计算机的RAM更多的虚拟内存的大型工作之前,先dd和mkswap一个交换文件,也就是说,如果退出Web浏览器无法释放足够的空间...)

– Peter Cordes
15年3月17日在11:14

我完全理解@PeterCordes这可能取决于您正在执行的任务类型。就我个人而言,我发现我受益于高级别的交换,因为我经常在使用计算机时在后台以低优先级进行长时间编译,然后在内存不足的情况下(通常在计算机忙于进行任何编译时)将这些交换掉无论如何)。不过,我同意这是一门非常个人化的工作负担,在决定之前,应始终考虑自己的用法。

–活力
15年3月18日在2:09

有趣的故事:就在今天,在我的笔记本电脑上,笔记本电脑具有4GB内存,0.5G交换(SSD),firefox触发了OOM杀手(它选择了firefox)。我以前从未发生过。 (尽管我比平时更多地使用笔记本电脑)。几乎没有其他东西在运行(只是xfce中的gnome-terminal)。因此,我认为我可以接受,因为firefox应该比占用这么多RAM更了解。不久前,我看到有人说“存在用于对虚拟内存子系统进行压力测试的Web浏览器”,或类似的东西。 Firefox非常糟糕,无法释放几天未使用的标签等的缓存。

– Peter Cordes
15年3月18日在7:06

Linux认为可用交换空间的一种情况是大型进程尝试启动子进程时:fork()+ exec()系统调用首先大致复制了父进程的分配-内核无法保证新的子进程会更小比父母通常不使用交换空间,但是除非有可用空间,否则fork()可能会失败。客户端上的典型示例是启动插件的浏览器,或者大型应用程序容器调用帮助程序时在服务器上。交换的1/2或1GiB通常足以解决问题。 Google“ Java exec无法分配内存”

–詹姆斯
15年3月19日在11:56

#7 楼

仅当您希望能够休眠以进行交换时(此功能也称为“挂起至磁盘”,涉及保存RAM的全部内容并关闭电源)。通常,它仅在笔记本电脑和其他移动设备上使用,因此要视情况而定。

#8 楼

没有通用且明确的答案,因为这取决于您将要执行的任务。如果要运行数据库,HTTP,虚拟化或高速缓存服务器,则无论您拥有多少内存,都永远不要启用任何类型的交换。如果您有台式机或混合任务主机,并且具有16 Gb以上的快速RAM-请在此处查看:zRam

评论


zRam是一个不错的选择。我已经将其与微型闪存驱动器系统结合使用,以达到良好的效果。

–古怪的长老
15年3月20日在1:39

@ElderGeek我也曾在无盘环境中使用过它,例如网络启动。伟大的工作,但有一些警告:首先,您不仅需要更多的内存,还需要快速的内存。缓慢而廉价的ram模块(可能会在通常的经典情况下适合您)可能会引起问题。还必须考虑CPU前端总线:即使CPU频率较低但FSB频率较高也会大大改善性能。第二个问题是许多zRam交换分区。尝试从1到您的CPU核心数的数字。不要在单核系统上使用!

–阿列克谢·韦斯宁(Alexey Vesnin)
15年3月28日在13:05

好的有效点全部。因为我是一个性能极客,并且总是设计和构建自己的系统,所以我个人并不为此类问题所困扰

–古怪的长老
15年3月28日在14:13

@ElderGeek我也是:)很高兴认识你!我也注意到zRam行为中有一件奇怪的事情。它会在不同的内核版本和配置中出现和消失,但在内核HZ 100和1000上可以高度重现。zRam适用于1,2,4-但不能用于更多分区。即使是在几乎无所事事的顶级硬件上的8和16个物理内核上也是如此。因此,请记住要进行调整!来自俄罗斯的问候!

–阿列克谢·韦斯宁(Alexey Vesnin)
15年3月31日在9:49

我不同意“如果您运行数据库,则...永远不要启用任何类型的交换,而不管您具有的RAM装载如何”。交换通常比使用OOM杀手杀死随机进程更好。是的,您应该为正在运行的应用程序提供足够的内存,是的,使用大量交换可能会减慢您的系统速度。我羡慕您生活在理想的世界中。

– AMADANON Inc.
19年3月12日在1:09

#9 楼

无法知道是否需要交换空间,如果我们知道的唯一参数是安装的RAM数量。

在任何情况下,都有一个常见的误解,认为拥有交换空间会带来负面影响影响系统性能。这是不正确的。只要您有足够的RAM,那么无论交换区大小如何,都不会损害性能。影响性能的原因是RAM不足并有效地使用了交换空间。


情况1:如果没有交换空间而恰好在RAM之外,则Linux内核会选择一个
情况2:如果您有交换空间并且内存不足,内核将选择较少使用的内存页面并将它们放在交换区域中以释放RAM 。这将减慢系统速度,但您的应用程序不会受到其他影响。

我总是更喜欢情况2,因为我感到无法分散的部分或全部工作是因为内核认为我的应用程序值得杀死。而且,由于当前平均磁盘大小在TB范围内,因此保留几个百分比的交换空间就不会成为问题。

评论


我更喜欢情况1,因为我唯一的用尽RAM的时间就是我拥有失控程序的时间。 OOM杀手通常很擅长于识别失控者,我真的希望立即杀害它,而不是经过数小时的大量交换。

–马克
15年3月16日在22:33

@Mark,这是正确的观点。我仍然尽量避免先委托算法,然后再考虑方法。

– jlliagre
15年3月16日在22:40

情况2仅在您有警告您这种情况的事情并且有足够的时间在系统用尽交换之前手动“执行某事”时才有效。但是您可以改为监视已用RAM的百分比以获得相同的结果。

– Tortor
15年3月17日在12:51

根据您的推理,监视RAM使用情况就足够了。

– Tortor
2015年3月17日在13:14



@Totor我不希望在深夜被笔记本电脑监控应用唤醒,因为我启动了一批处理大量文件并耗尽RAM的批处理。我宁愿完成这项工作,即使由于RAM尺寸不足而要花很多时间而不是中断全部工作要花几个小时。

– jlliagre
15年3月17日在13:21

#10 楼

我在任何系统中应用交换的规则是要有以下答案:


系统的目的是什么?
应用程序将消耗多少内存?
这是关键系统吗?
我需要一个临时磁盘空间来进行文件传输吗?
应用程序的预期增长率?

当我得到这些信息的答案时,我会相应地调整系统大小。在过去的几年中,我一直遵循Sun Microsystem的经验。但另一方面,如果您有足够的RAM可用空间并且应用程序不强制使用SWAP,则可以忽略交换。如果需要的话,只需放置一个新磁盘或lun并配置SWAP。
应用Sun的规则主要是因为在Solaris上,如果发生“内核崩溃”,内存将全部转储以交换以进行进一步分析。

#11 楼

简短的答案:是的,您总是需要进行一些交换,只是在不太可能的情况下,应用程序甚至不会打扰映射内存,而是直接映射虚拟内存。

将交换文件设置为:



如果使用休眠,则为RAM+round(sqrt(RAM))
如果不使用休眠,则为<43。 br />
round(sqrt(RAM))在台式机上设置为10,而不是在服务器上!

长答案:
过去25年使用的经验法则是最小1xRAM,最大2xRAM,因此您会一直引用该规则。

最小的时间是在我十几岁的时候进入石器时代的,恐龙仍然在地球上漫游,因为RAM太昂贵了,您绝对需要交换空间才能完成任何事情。

之所以在那时设置最大值是因为收益递减:交换太多内存太慢了,因为HDD访问比RAM慢了1000倍:在紧急情况下很好,但是真的非常适合日常使用!那时,当您用尽交换空间时,该增加更多RAM了! (今天仍然适用)。

当前:


如果不使用休眠方式并且内存超过1GB,则新规则拇指是swappiness,其中round(sqrt(RAM))显然是您的RAM大小(以GB为单位),而RAM是平方根。 :-)
如果使用休眠模式,则需要能够将全部RAM +已交换的RAM交换到磁盘,因此公式变为:sqrt
最大值,但是除非测试您的实际使用率,否则占用2xRAM只是浪费磁盘空间,因此不要使用最大值,除非您使用其他方法用尽了交换空间。

所有这些都为您提供了下表:(最后3列表示交换空间)

拇指;这不是引力定律!
如果您的特定用例不同,则可以违反此规则(与重力定律不同)!

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

只需执行:

    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


,该列表将为您列出所有换出的正在运行的程序(其中一个使用了最大的交换空间)

如果使用的空间更多,则需要几个KB:将大小调整为最小的大小,否则,不要打扰...

如果您使用的是服务器,请立即停止阅读:一切就绪!


如果您使用的是台式机/笔记本电脑客户端(而非服务器),您希望您的GUI尽可能地响应,并且仅在确实需要时才进行交换。 Ubuntu已经过优化,可以尽早交换以供服务器使用,但是要在客户端上快速编辑RAM+round(sqrt(RAM))中250兆像素的原始图片,因此将gimp设置为10可以防止内核过早交换,同时确保不会太晚交换:

如果您有swappiness文件,请

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


OR

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

sudo nano /etc/sysctl.conf


,在两种情况下均添加:
到文件末尾,保存文件(按Ctrl + XY + Enter在nano中)并执行:

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


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

评论


+1是因为脚本可以测试交换使用情况。但是哦,男孩,有那么多内存的那部分使用RAM的两倍对于谁读来说是令人恐惧的。

–艾默生·罗查(Emerson Rocha)
20年5月31日在10:58

@EmersonRocha您可能错过了这一点:占用2xRAM只是浪费磁盘空间(因此,我看到人们分配10 * RAM是绝对最大值)

–法比
20年6月2日在7:22

#12 楼

如果没有足够的RAM来运行所有程序,则需要交换。

您说您没有做任何需要大量RAM的操作。因此,您确实有足够的RAM。

然后,您不需要交换空间。

但是,如果您认为在某个时候,尽管您的问题暗示了什么,您的程序仍将使用RAM的一半(或三分之二)(经验法则),请阅读其他“专业交换”答案。您不需要交换,但是它可以提高系统性能。

评论


使用交换可以帮助避免灾难性的崩溃,但绝不会提高性能,就像降落伞可以加速法拉利一样。 ;-)

–古怪的长老
15年3月20日在1:39

@ElderGeek可能是一个极端情况,但是交换可以提供帮助。有时您只有足够的RAM来存储所有内容,但是可以将空闲程序换出以更好地利用RAM(例如,一些有用的磁盘缓存)。在90年代后期,我经常看到这种情况。当我有小于1GB的可用RAM(包括磁盘缓存),而实际上不需要交换空间时,有时我会看到这种情况。

– jbo5112
15年3月22日在22:49

@ jbo5112如果您这么说,我不会完全排除这种可能性,到目前为止,我的经验已经表明。这并不奇怪,因为这是一种如何使用系统的情况,而不是一成不变的规则(每个人似乎都在寻求)。

–古怪的长老
2015年3月23日在12:26



@ElderGeek我可能现在才看到它,因为我的磁盘已经使用了十年,并且迫切需要缓存。通常,几乎在任何情况下都存在将交换性设置得过高的附加问题,这会导致交换空间的使用过于激进。建议将值从60降至10。您可以更低,但是在某些时候,您将转储过多的磁盘缓存,从而在交换时导致大量额外的I / O。

– jbo5112
15年3月24日在2:49

@ jbo5112好点。这始终是不同子系统之间的平衡行为。我记得当初调整希捷ST225和ST238驱动器等硬盘插入和RAM刷新率这样的参数以使80286系统的性能最大化。我们始终必须视情况而定,以最大限度地提高性能和可靠性。恭喜BTW!我上一次无法从硬盘中抽出十年的时间是一个Micropolis,它总共拥有600MB的存储空间。

–古怪的长老
15年3月24日在13:58

#13 楼

妥协答案:这取决于“应该”的含义。

是否需要交换分区,如果您在描述的操作条件下没有分区,就会发生不好的事情?否。

明智的做法是,有一个交换分区,以防万一您意外地产生了一批记忆猪,以便您有机会在OOM杀手踢进来之前杀死它们?是的。

如果您的物理RAM“大大”超过了您将始终同时运行的所有程序的数据内存使用量,那么进行交换不会对性能产生任何好处。如果超过,但不是“很大”,如果操作系统能够换出很少使用的内存以将更频繁访问的文件数据保留在内存中,则可能会带来性能上的好处。

,很高兴您有16GB的RAM。但是,如果您还有一个1TB的磁盘,是否不能保留其中的16GB进行交换?只是磁盘的1.5%。