我是否应该完全关闭 Linux 网络服务器的交换?

我是否应该完全关闭 Linux 网络服务器的交换?

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

他的观点是,在正常情况下,服务器永远不会使用其所有 RAM,因此它遇到 OutOfMemory 情况的唯一原因是由于某些错误/ddos/等。因此,如果交换被打开离开系统将耗尽内存,最终导致占用内存的程序(最有可能是 Web 服务器进程)崩溃,也可能是其他进程崩溃。如果交换被关闭它会消耗内存和交换空间,最终导致同样的崩溃,但在此之前,它会将 sshd 等关键进程卸载到交换空间,并开始执行大量交换操作,导致速度严重下降。这样,在 DDoS 攻击下,系统可能会因巨大的延迟而进入完全无法使用的状态,我可能无法登录并终止 Web 服务器进程或拒绝所有传入流量(ssh 除外)。

这是正确的吗?我是否忽略了某些东西(例如,即使我有足够的 RAM,交换分区在某些方面也非常有用)?我应该将其关闭吗?

答案1

我想说这取决于你的使用情况,其余的答案已经很好地涵盖了这一点。 4G 交换毕竟是一种购买安全性的廉价方式。 我觉得这种廉价正是让人们不想关闭它的原因。

但让我用一个反问句来回答。如果钱不是问题,你可以选择两个系统——一个有 12G RAM 和 4G 交换空间,另一个有 16G RAM 但没有交换空间——你会选择哪一个?不幸的是,大多数人仍然会回答他们会选择 16G RAM 和仍然添加 4G 的交换空间,但这不符合我的观点。

另一方面,我个人认为 swappy 系统比崩溃的系统更糟糕。崩溃的系统会触发备用备份服务器更快地接管。在主动-主动(或负载平衡设置)中,崩溃的系统会更快地退出轮换。无 swap 系统再次获胜。

答案2

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

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

我发现这一页谈论交换。请查看第 3 部分。

无需关闭交换,您可以控制交换性

答案3

不,这不是一个好主意。‘某些流程出了问题’意味着你应该主动打电话

ulimit -d

在进程创建时或之前设置每个进程数据段内存的限制——也可能限制线程数量

ulimit -T

每个进程。ulimit 是你的朋友。在关闭交换之前,请考虑阅读内存调整指南之一。你也可以将内核参数更改为某些内容,以尝试处理 DOS 攻击或恶意程序。

换个角度看:系统上的总内存是 RAM + 交换空间。如果您有 12GB 的交换空间,则通过禁用交换空间,您实际上会将系统 VM 容量减半。这是个坏主意。这实际上不是辩论,只是阅读其他人多年来从之前的糟糕经历中了解到的内容。您的朋友可能也需要阅读一些内容。

答案4

另一个好办法是使用 zRAM 交换到 RAM。我认为这是个好主意!就性能而言,就像根本没有交换一样,而且还能防止系统负载过大时崩溃!

看这个:

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

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

但是……这是一个工作站,如果它挂了,我可以重新启动。我认为在服务器上最好有交换,而内存中的交换对我来说听起来不错。

相关内容