您可以交换太多吗?


16

我只是想知道您是否可以拥有太大的交换分区。如果是,交换分区什么时候太大?交换分区太大(即使我有足够的磁盘空间),也会带来哪些负面影响?

如果没有,拥有超过建议的交换空间的好处是什么?


5
明显的缺点是浪费磁盘空间。OTOH:如果交换次数过多(例如在4GB系统上为30GB),那么行为不当的应用将在更晚的时间内出现内存不足的情况,这将减慢系统速度。行为规范的应用程序(没有内存泄漏)将不会使用它。(我承认,这是一个简化的视图。)
PerlDuck

我同意@PerlDuck-“太多交换”仅使用磁盘空间。如果系统开始使用swap,则系统将很慢,在这种情况下,运行更少的应用程序,更轻量的应用程序或获得更多的RAM
Panther

我知道,因此,如果您有足够的RAM,那么使用过多的磁盘空间还有什么缺点吗?正如PerlDuck所说的那样,除了课外“行为异常”的应用程序。
An0n

1
VTD编辑中的所有问题都证明将关闭原因从重复主题更改为离题主题过于广泛。很显然,OP很令人讨厌,但是元或聊天室是更好的讨论场所。
WinEunuuchs2Unix

3
如果人们不确定@PerlDuck(和Panther)在说什么,请注意,即使您实际上有无限的磁盘空间,要交换更多的空间也将使进程应该终止,否则进程很快被终止。自动终止,会导致系统长时间缓慢地缓慢爬网。我认为,PerlDuck的评论也可以作为答案。如果我们最后重新提出这个问题,也许可以添加一个关于交换次数远远超过必要的弊端的答案。因为有弊端。
伊莱亚·卡根

Answers:


8

没有

乍一看,您不能有太多交换,因为您可以将交换视为增加RAM的一种方式。实际上,它并没有增加 RAM,它只是假装:如果您具有8 GB的实际RAM和配置的24 GB交换空间,则您的程序可以分配和使用最多8 + 24 = 32 GB的内存一开始听起来不错。

如果您运行的应用程序存在内存泄漏或不是真正适合运行8 GB的内存(例如,考虑视频编辑),则这些应用程序将开始使用该交换空间,并且交换速度很慢。这些应用程序积极使用的交换空间越多,系统越忙于仅在磁盘之间来回移动内存。这将大大降低整个系统的响应速度,并导致不良的用户体验。

最终-当交换空间用完时-某些应用程序将面临内存不足的情况,并被内核的 OOM_Killer杀死

维基

当操作系统无法创建更多的虚拟内存时,现代计算机中通常会出现OOM情况,因为它的所有潜在支持设备都已装满。

结论

因此,交换空间过多的一个缺点是:拥有交换空间越多,OOM发生的时间就越晚,并且系统滞后且无响应的时间就越长。

当然,另一个明显的弊端是浪费磁盘空间,但这在当今并不重要。


+1考虑边缘情况。就个人而言,我不是超级交换迷,因为休眠是熊的睡眠,而我的系统为此太忙了。;-)干杯。
年长的怪胎

@ElderGeek哈哈。实际上,伊莱亚·卡根(Eliah Kagan)让我把简单的评论变成了答案。他说服了我,上述过多交换的缺点是至关重要的,对其他人可能也很重要。我与您同在,几乎没有配置任何交换(2GB和8GB RAM),并且几乎从未碰过。
PerlDuck

我在相似的设置下也有相似的结果,但我希望2x交换谣言最终消失。
年长者怪胎'18

5

较大的交换空间没有直接的缺点。通过内核管理它的方式,交换空间数量的增加超出了足够的数量,对性能没有影响或影响很小。

“太多”交换空间的唯一缺点是您不能使用该空间进行存储。


1
@ An0n:我认为将当前连接到我的计算机的所有〜6 TB分配为交换空间是一个很大的缺点。我会将所有音乐放在哪里?
David Foerster '18

2
@ An0n:如果计算机能做的就是引导但不存储任何有用的数据,那有什么用?听起来更像是昂贵的太空加热器。
David Foerster,

1
@ An0n:当然,我假设了很多,但您没有抓住重点。我认为我们可以同意,一台有用的计算机必须能够达到可用的系统状态(包括能够启动),并且能够访问用户可用于其个人数据的存储。这就要求它不能被交换空间占用。
David Foerster '18

2
当然是相对的。就像“太多”是相对的。如果我有一个可启动的系统,并且将所有可用空间都分配为交换空间,那么由于缺少可用空间,在我以某种方式终止以更多可用空间结尾的方式更改其系统配置之前,它就不再有用。从这个意义上讲,在那段时间内交换空间会“太多”,从而使系统在那段时间内变得无用。无论如何,我不是在这里与您争论单词的语义。
David Foerster,

1
@ An0n为了强调这一点,交换空间是您不能用于其他任何用途的空间。磁盘存储空间要花钱。如果您的磁盘空间有限(我的磁盘空间仅为32GB),则希望尽可能多地自由安装程序并编写包含音乐的文件,例如音乐。人们通常出于这种原因而没有其他原因,试图将交换减少到最低限度。交换是系统可能需要保持有效运行的东西,否则对用户没有任何价值。总的来说,我们希望我们的系统仅使用必要的资源,而让我们有很多工作要做。
赞纳

4

除了减少磁盘上的空间之外,您将不会感到任何其他弊端,我认为当今大多数系统中2倍内存的概念已经过时了。我通常建议使用与笔记本计算机相同大小的ram来交换笔记本电脑中的内存,以使您有机会休眠PC而不会由于RAM的易失性而丢失任何数据。

当我认为要在短时间内升级RAM大小时,我唯一会考虑为交换分区使用超过RAM大小1倍的情况。或者,如果您打算使用一个系统,您将在某种缓存中存储同一时间未使用的程序所使用的内存量。

希望我的观点足够清楚,我再说一遍,我认为您不会因为交换内存过多而遇到任何问题。

祝你今天愉快!


2
如果单个用户桌面上的RAM> 2-4 Gb,则根本不使用交换功能。

1
@Panther为什么不呢?它与您如何或何时使用它无关。它的大小和用法。
An0n


@ElderGeek嗨,不,我没有考虑。我喜欢您的回答,我不知道内存泄漏问题!
zurg

2

休眠真正需要多少SWAP?

这是一个误解,当您使用休眠方式时,您需要RAM x 2作为SWAP大小。交换大小必须是已用RAM的大小,而不是已安装RAM的大小。通常,交换大小需要为已安装RAM的2/5。要找出使用所需的最小RAM:

$ cat /sys/power/image_size
3153907712

在此8 GB RAM机器上,至少需要3 GB的休眠空间。

您可以调整值以image_size获得较小的交换大小,但有失败的风险。您可以对其进行调整以获得更大的交换空间,并可能加快休眠速度。

参考:https : //wiki.archlinux.org/index.php/Power_management/Sus​​pend_and_hibernate


1995年为16 MB RAM,2018年为16 GB RAM制定了不同的规则

在您拥有16 MB Ram的日子里,在720 MB硬盘驱动器上进行32 MB交换的x 2是有意义的。在1995年“华盛顿邮报”上的一些RAM和HDD历史。

23年后,可能会发现1995年以来的一些技术文章(尽管我没有找到任何文章)误导新用户。但是,我确实在2007年找到了一篇推荐SWAP = RAM x 2的文章

早在1995年,在760 MB硬盘中32 MB交换仅占硬盘的4%。实际上,交换分区在1995年可能已经使用了很多。今天,到了2018年,在256 GB SSD上使用16 GB RAM x 2表示32 GB SWAP的意义并不相同,因为它占用了13%的SSD。今天,除非我在测试OOM-Killer时强行将其填满,否则根本不会使用我的8 GB SWAP分区:Google Chrome浏览器将占用我的内存,直到它导致我的计算机几乎死机。我该怎么做才能避免这种情况?


+1指出对经常吹捧的2x规则的误解,即总双层床。
年长的怪胎

@ElderGeek谢谢。我添加了一个历史记录部分,关于何时32 MB SWAP需要16 MB RAM乘以2。
WinEunuuchs2Unix

另一件事要考虑的是SSD与HDD。我们是否需要对SSD进行大量读/写操作,以使其更快地在SSD的那部分发生故障(或者这是神话)?在我的系统32GB内存上,我使用了2GB的速激肽驱动器用于SWAP,但无意进行休眠,仍然不确定是否可以,可能我没有进行任何交换???但是,如果我要休眠,那么4GB可能就足够了,但是我可能会使用20GB的浏览器,然后4GB就不够了???
NZ Dev

@NZDev我可以交换SSD,但很少使用。上次检查时,使用1年后仍剩余100%的寿命。要查看剩余寿命百分比:askubuntu.com/questions/1038701/how-do-i-check-system-health/…–
WinEunuuchs2Unix

1

什么是SWAP:

当物理内存(RAM)容量已满时,将使用Linux中的交换空间。如果系统需要更多的内存资源并且RAM已满,则内存中的非活动页面将移至交换空间。虽然交换空间可以帮助具有少量RAM的计算机,但不应将其视为替代更多RAM。交换空间位于硬盘驱动器上,其访问时间比物理内存慢。

交换空间可以是专用交换分区(推荐),交换文件,也可以是交换分区和交换文件的组合。

交换应等于2倍的物理RAM。


优点:

当内存完全用完时提供溢出空间可以将不需要的物品从高速内存中移出,使您进入休眠状态

缺点:

由于SWAP分区无法动态调整大小,因此会占用硬盘驱动器上的空间可能会增加硬盘驱动器的磨损并不一定会提高性能(请参阅下文)


当SWAP分区“无济于事”时,如“不值得与额外的存储空间进行比较”:

如果您的硬盘只有5400 RPM,而您的RAM很少,那么可以说> 2GB。为什么呢 由于系统一直希望访问SWAP分区,因此最终将变得非常缓慢。即使您现在在内存中有空间,SWAP分区中的所有内容也都需要移回。由于系统运行缓慢,因此分配将保留在SWAP分区中。这只能通过重新启动来解决。无论如何,这将需要一段时间,因为系统需要在关闭前从SWAP分区中删除所有内容。


**结论:**

如果您希望能够休眠计算机,则应该有一个SWAP分区。该分区的大小应为已安装内存的大小,再加上10%到25%的空间,以便为已经移入SWAP分区的所有项目留出空间。

如果您只想提高性能(并且至少有7200rpm的硬盘驱动器),则可以根据需要添加SWAP分区,但是除非您的安装内存少于4GB,否则不需要这样做。它的大小可以随心所欲。但是,我建议将RAM精确设置为2倍。如果您有足够的存储空间。

如果您有5400rpm的硬盘驱动器,则不应仅仅因为瓶颈会使您的计算机状况恶化而创建SWAP分区。但是,如果您绝对希望使用SWAP,则仍可以使用上面概述的相同的大小调整准则来创建分区-但将swappiness值更改为更低的值。



我的想法:

但是无论如何,如果您将Ubuntu用作日常使用的主操作系统,我建议将RAM大小提高2倍。因为您不仅仅因为有一台旧计算机而安装了Ubuntu。但是,因为您要将系统用作主操作系统。

如果需要,可以购买一些额外的硬件,而不是调整系统分区以保持其运行。如果您购买游戏,还请确保系统是“最新的”,而不是将设置调整为“可玩”。

您最好有一些额外的空间,SWAP,速度,功率,而不要太短或以后需要调整所有内容的大小。因为您需要交换或空间,所以购买了RAM?或者因为一个内存插槽或记忆棒坏了而需要快速购买内存。


回复:您的结论这根本没有道理,或者说另一种说法是我们划清界限。例如,RAM 8GB加16GB交换:如果我使用8GB RAM和9GB交换,那仍然没有足够的空间休眠。那有什么呢?换句话说,无论您制作多大的尺寸,都可以使用更多甚至更多。那么,为什么不给Swap文件2个专用空间1作为虚拟内存,而另一个作为休眠空间,则将其作为总和或其他2。它对于我来说并没有堆积,而且没有人回答过这个问题。
NZ Dev

0

确实有开销,但是很小。对于每个磁盘“页面”,都有一个参考计数器,并且每个交换区都有几个结构。这在内核内存中,因此无法分页。每4 GB,它介于2到16 MB之间,具体取决于体系结构。其余的是相当动态的,因此取决于使用情况。

因此,您可以拥有足够的空间,但是要记住,分页的地址空间本身会在RAM上增加一些开销,最重要的是,交换页的跟踪正在进行中,因此扩展范围不会很大。即使施加了相当大的开销,文件系统在处理较大区域时也比交换区域有效得多,因为vfs可以将结构信息卸载到磁盘上(由于硬件限制,通常至少不能交换页表,并且vmm可能会在所有簿记中使用不可交换的内存)。

我想不出任何其他缺点,OTOH交换太少会在交换页面时导致碎片,这意味着更多的寻找。如果有很多东西,那么在某些时候也不会有任何改善。

交换通常是最后一个资源(除了休眠状态),因此,交换空间可能不会比RAM多,尤其是如果您有超过4GB的RAM,有时甚至与RAM太大一样大(认为64 GB),您将不会从中受益。 。


抱歉,您的上一句话/句子令人困惑,否则上述内容会很不错。
NZ Dev

@NZDev现在好了吗?
Ismael Luceno
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.