Linux:不创建交换分区?


9

我一直在想,因为我听说在外出或使用RAM时会使用交换功能,并且交换太多是不好的,因为我有很多RAM(8GB)...。

如果我不创建交换分区怎么办?

另外,我是否需要它进行休眠还是不是必须的?


您必须创建交换,我曾经尝试不创建交换,无法继续安装
Lynob 2013年

在Windows中安装时会发生什么?我这样做了,与Windows相比,我的设备似乎也有点慢,但我没有创建分区
Mihai Bratulescu 2013年

我从未尝试在Windows中安装Linux,而是始终创建一个单独的分区
Lynob 2013年

Answers:


13

现代操作系统需要交换空间才能有效利用RAM。即使您的系统有足够的RAM,浪费RAM也会导致较小的缓冲区高速缓存,这意味着增加了磁盘I / O。因此,无论您有多少RAM,您仍然希望系统有效地使用它。有效地使用它意味着将极不可能访问的东西移出RAM。

启动典型系统时,将启动大量服务。程序运行初始化代码并在此过程中修改私有内存映射。其中许多服务将永远不会再运行。他们中的许多人不会花几个小时。如果不进行交换,则操作系统别无选择,只能将与那些服务关联的修改后的私有内存映射永久保留在RAM中。那是永远不能用作磁盘缓存的RAM。

因此,无论是否需要,都需要交换。


8
“因此,无论是否需要,都希望交换。” -好像您提出了无论他是否想要交换他的理由。
锯末2013年

2
假设我有足够的RAM,并且可以承受浪费2GB的费用。为什么需要交换文件?
塔里克

1
在这种情况下,您不需要交换文件。但是正如我所说,你想要一个。因为你是否可以浪费RAM,你不应该使用RAM效率低下,当你不就得了。
David Schwartz

我正在运行没有交换的CLI服务器,并且它运行完美。运行teampeak3服务器,apache2,node.js,我从来没有看到使用超过500M的ram。因此,“低效地”使用RAM不会打扰我。免责声明:此服务器的Web服务器功能专门用于开发,因此负载始终很低。而且,如果我在开发过程中发生内存泄漏,我宁愿OOM杀手在内存用完后立即将其杀死,也不愿将所有废话都推到磁盘上。
Native Coder

12

我一直在运行桌面系统而没有任何交换,已经有好几年了!有一些不同的行为。其中有些是有利的,有些可能会伤害您。这一切都取决于您在做什么。

一个主要区别是内存耗尽时系统的行为:

如果没有交换分区,则OOM杀手将立即运行。如果您有程序泄漏内存,那很可能是被杀死的程序。发生这种情况,您几乎立即恢复了系统。

如果一个交换分区,内核推动内存中的内容进行掉期。错误的进程可以继续分配内存。这种情况一直持续到交换用完为止,如果交换分区很大,则可能需要十分钟到一个小时。在执行此操作时,您的系统会缓慢爬行。打开终端并终止进程变得不可能。发生这种情况时,我通常会拔掉电源线。

因此,由于在系统OOM时无论如何我都会丢失数据,所以我更喜欢前一种选择,因为它至少具有(高)恢复的机会。


这也是我的经验。Linux不能很好地处理swap-thrashing,无法让您自己杀死有问题的程序。仅由OOM杀手亲自执行此操作更为可靠。当然,这是一个糟糕的设计-更好的方法是冻结令人讨厌的进程而不是杀死它,并提供一个不错的GUI以允许您取消冻结或杀死它,但是... Linux。
Timmmm '16

3
最后,一个有意义的回应与我的经验相符。我无法理解“您必须具有交换分区”背后的理由。除非我们要休眠系统。
塔里克

5

休眠是必需的,否则,即使没有问题也可以解决。


因此,交换区的大小应略大于系统中安装的内存的大小。
mdpc

@mdpc,不一定;它必须足够大以容纳不能丢弃的使用过的内存(即,由磁盘上的文件支持的数据)。
psusi

您如何估计创作的内容?您是否会进行适当的计划并为更坏的情况做准备,因为分区设置后通常很难更改?
mdpc

2

认为具有交换区域会对性能产生负面影响是一种常见的误解。严重影响性能的是没有足够的RAM。交换区域本身对性能没有负面影响,除非您不关心可靠性。即使您认为自己有足够的RAM(并且没有报告RAM不足),也会对性能产生积极影响。

本质上要考虑三种情况:

  • 1:有足够的RAM来满足内部内核的需求,所有应用程序都可以在RAM上拥有其工作页面集,并且仍具有“可用” RAM以便缓冲区高速缓存存储大多数文件系统热数据。

  • 2:除了没有足够的可用RAM使缓冲区高速缓存完全有效之外,其他与上述相同。

  • 3:没有足够的RAM甚至无法存储您的应用程序使用的页面。

在情况1中,这应该是生产机器的标准,具有或没有交换区域都不会改变任何东西(至少在基于Linux的操作系统和其他过量使用内存的操作系统上)。

在情况2中,具有交换区域可以通过允许系统分出非常不常用的页面,然后允许缓冲区高速缓存更好地发挥其作用来提高整体性能。

在情况3中,具有交换区域可以使应用程序继续运行,但会因分页而导致性能下降。另一方面,缺少交换区域(或足够大的交换区域)将使应用程序随机崩溃。此外,根据OS的设置,如果对RAM的需求很高,则OOM杀手可能还会决定杀死最占用内存的应用程序,甚至没有机会保存它们(您的)关键数据。

后一种情况是您必须选择的一种情况。当然,在某些用例中,优先选择终止进程,如系统,响应时间至关重要,而丢失事务/进程也没什么大不了的。

但是,我倾向于相信在大多数情况下,最好能够让用户/管理员有机会注意到RAM不足并采取相应的措施,而又不会丢失数据。


1

如果您不想使用交换分区,则可以使用交换文件:存储在常规文件中并用作交换空间的文件系统映像。

以下文章详细说明了如何执行此操作:


交换文件和交换分区之间有什么区别?如果我什么都没有怎么办?
Mihai Bratulescu 2013年

访问速度....
mdpc

2
如果使用“是”,则非常重要。如果使用分区,则寻址很简单,如果使用文件,则必须执行所有文件系统开销才能使用交换文件,并且不能保证段将驻留在磁盘上的位置。
mdpc

2
@mdpc从内核2.6开始,文件系统的开销可以忽略不计。元数据,缓存和文件系统代码被绕过。原始磁盘块可以直接访问。
jlliagre 2013年

1
@mdpc交换文件根本不应有明显的碎片,除非您最近创建了它。此外,交换访问很少是顺序的,但由于需求分页的工作原理而多数是随机的,因此碎片化不应该成为问题。
jlliagre 2013年

0

这有点危险,但是您可以在没有交换空间的情况下运行。但是,如果最终超过了内存量,您的系统将几乎立即崩溃,而不会发出通知。

交换基本上为您提供了扩展空间,但速度却慢得多。如果超出限制,您将开始进行交换,这实际上会耗尽系统的生命。但是,通过消除错误的进程,您仍然可以保存系统。

我记得,有些程序坚持分配(但不使用)交换空间,其中有些是数据库程序。同样,由于没有交换空间,您可能会限制可能运行的程序。

最后,看起来SWAP是便宜的,因为您不必备份该区域。(我希望您是备份系统的优秀系统管理员之一)。

因此创建它。

我的经验法则曾经是2 *内存大小.....但是现在,在很多情况下,我可以使用1 *内存大小,但通常使用1.5 *(内存大小)。您不必创造那么多的数量,但是我会...尤其是如果您正在从事任何生产类型的工作。

哦,是的,对于休眠状态,需要进行交换以保存整个内存映像。因此,如果您考虑使用h8ibernate,则其大小应至少为(1 *内存大小)+100MB。100MB用于处理过程中可能需要的开销。


因此...对于某些程序,您需要一个交换区来运行它们?我不担心8GB的内存用完(尽管并非不可能)
Mihai Bratulescu 2013年

2x内存大小规则很旧且过时。但是进行一些交换并不是一个坏主意。它不会使用过多的磁盘空间,因此您不会错过所使用的空间;如果您有足够的RAM,通常不使用它,它使您可以将核心转储到交换中。
Hennes 2013年

@Hennes-阅读我的笔记...“曾经是”
mdpc

0

一旦出现内存压力,Linux交换似乎有相当高的要求。症状是,如果活动进程几乎使用了所有RAM,则系统将严重停止运行,并且硬盘将运行异常。

为什么?

没有交换时,无法从RAM逐出没有备份文件的页面(通常是通过动态内存分配)。即使实际上很快再次需要它们,内核也会求助于带有备份文件的页面。e。即使没有交换也要破坏!

有关此细微问题的更多详细信息,请参阅此博客文章。

结论:总是要交换一下。

对于粗略的指导,对于大小,请使用4到8 GB之间的空间,即使对于具有大量RAM的系统,假设您不休眠。有关更多详细信息,请参见Red Hat有关交换空间的文档

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.