我应该完全关闭Linux Web服务器的交换吗?


22

最近,我的朋友告诉我,关闭具有足够内存的linux Web服务器上的交换是个好主意。我的服务器有12 GB,当前在峰值负载下使用4GB(不计算缓存和缓冲区)。

他的观点是,在正常情况下,服务器将永远不会使用其所有RAM,因此,它可能遇到OutOfMemory情况的唯一方法是由于某些bug / ddos​​ / etc。因此,如果关闭交换系统将耗尽内存,最终将使程序占用内存(很可能是Web服务器进程)以及其他一些进程崩溃。在交换的情况下打开它会同时吞噬RAM和交换空间,最终将导致相同的崩溃,但是在此之前,它将卸载sshd之类的关键进程进行交换,并开始执行大量交换操作,从而导致严重的速度下降。这种方式在ddos系统下可能会由于巨大的延迟而进入完全无法使用的状态,并且我可能将无法登录并杀死Web服务器进程或拒绝所有传入流量(除ssh之外的所有流量)。

这是正确的吗?我是否缺少某些东西(例如即使我有足够的RAM,交换分区在某种程度上还是很有用的事实)?我应该关闭它吗?


6
因此,所有答案都归结为以下陈述:1.更多的虚拟内存无条件地胜于更少,并且2.必须启用某些交换,因为这很好,但两者都没有充分的基础。
NekojiruSou 2012年

2
认为交换仅用于“保留”内存是一种误导。交换用于放置未使用的内存(以便您可以更有效地使用实际内存)。您应该始终进行交换。如果您的内存不足,则您的内存不足-期间。这是容量管理的问题-不倾向于交换。我有一个相当长的响应serverfault.com/a/332205/75118,它试图更好地解释虚拟内存的意图。
马修·伊夫

Answers:


27

我会说这取决于您的用例,其余的答案已经很好地涵盖了这一点。毕竟4G交换是购买一些安全性的一种廉价方法。而且我觉得这种便宜是让人们不想关闭它的原因。

但是,让我回答一个反问。如果钱不是问题,那么您可以在两个系统之间进行选择-一个具有12G RAM和4G交换空间的系统,另一个具有16G RAM和无交换空间的系统-您会选择哪个?不幸的是,大多数人仍然会回答他们会选择16G RAM并仍然添加4G交换,这是我的观点。

另外,我个人认为可更换系统比崩溃的系统要差。崩溃的系统将触发备用备份服务器更快地接管。在主动-主动(或负载平衡设置)模式下,崩溃的系统将更早地退出旋转。再次获得无交换系统的胜利。


14

即使有足够的内存,也不建议关闭交换。如果您的服务器需要更多内存而没有得到它,它将崩溃。但是,在有交换区域时,可以(在某种程度上)防止这种情况。

是的,使用交换时,服务器性能会下降,但至少可以运行并且可以访问。然后,如果服务器开始使用交换,则可以计划在需要时添加更多内存。

我发现此页面谈论交换。看看第三部分。

除了关闭交换,您还可以控制交换


1
在情况下,我描述它会消耗双方交换和RAM,也将崩溃。它运行了几个月,从未使用超过30%的内存。因此,在正常操作期间,它不可能如此快地跳到100%。因此,如果某个进程发疯并消耗了8GB内存,则意味着它将消耗OS可以获得的尽可能多的内存,这意味着所有内存。
波马

@Poma,交换还有其他好处。另外,当您进行交换时,可以允许系统寿命更长。这是因为考虑到廉价HD驱动器的可用性,交换空间可能大于内存。
哈立德

6

不,这不是一个好主意。“有些过程变得疯狂”意味着您应该已经主动致电

ulimit -d

在进程创建时或之前,设置每个进程数据段内存的限制-可能还有线程数的限制

ulimit -T

每个过程。ulimit是你的朋友。在关闭交换之前,请考虑阅读内存调整指南之一。您也可以更改内核参数,以尝试处理DOS攻击或不良程序。

这样看:系统上的总内存为RAM + swap。如果您有12GB的交换空间,则可以通过禁用交换空间有效地将系统VM容量减少一半。馊主意。这实际上不是一场辩论,只是在阅读其他人从多年以前的不良经历中学到的知识。您的朋友也可能需要阅读一些内容。


5

正如其他人所说,除非绝对必要,否则您可以有效地停止使用交换的服务器,具体方法是修改“ swappiness”参数。这控制了内核积极地换出内存页面的方式。

您可以看到它的当前设置:

cat /proc/sys/vm/swappiness

您可以使用(作为根用户)“实时”对其进行编辑:

# echo "10" > /proc/sys/vm/swappiness

并将其添加到/etc/sysctl.conf中:

vm.swappiness=10

2

您可以做的另一件好事是使用zRAM交换到RAM中。我认为这是个好主意!为了提高性能,就像根本没有交换一样,而且还可以防止系统满载时崩溃!

看这个:

http://www.webupd8.org/2011/10/increased-performance-in-linux-with.html

我的经验:在我现在正在写的这台机器上,我禁用了交换功能,因为我有4Gb RAM(2009年很多!)。我只遇到了几个问题,其中一个错误地同时打开了127张图片!

但是..这是一个工作站,如果挂起,我可以重启。在服务器中,我认为进行交换会更好,RAM中的交换对我来说听起来很好。


1

众所周知,这不是一个好主意。如果没有其他问题,交换可以为您在异常情况下提供喘息的空间。例如,在我所观察的一个系统上,该系统通常每天只有很少的访问者,这是由杂志中提到的页面引起的大量流量高峰。自从调试以来,这导致Web服务器首次使用交换空间。没有交换空间,事情就不会进展顺利。


0

这不是一个好主意。您可以定义2个具有不同优先级的交换文件。一个较小的正在使用中,一个较大的将在第一次填充时使用。

vm.swappiness还可帮助您控制磁盘交换的主动性。


0

如果将vm.swappiness设置为0,则不一定意味着系统不会交换。这是一个确定kerne交换趋势的积极性的参数,但它不会关闭交换。

再说一次,交换还不错,但th动却是。看一下sysstat数据,它应该可以提供很好的指针。

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.