我应该完全closures交换Linux Web服务器?

最近我的朋友告诉我,这是一个好主意,closures交换Linux Web服务器与足够的内存。 我的服务器有12 GB,目前在峰值负载下使用4 GB(不包括caching和缓冲区)。

他的观点是,在正常情况下,服务器将永远不会使用其所有的内存,所以遇到OutOfMemory情况的唯一方法是由于一些bug / ddos​​ /等。 所以如果交换被closures系统将耗尽内存,最终会导致程序占用内存(很可能是Web服务器进程)以及其他一些进程崩溃。 如果交换打开它会吃掉内存和交换,最终会导致同样的崩溃,但在此之前,它将卸载像sshd这样的关键进程交换,并开始做大量的交换操作导致主要放缓。 这种方式下,当ddos系统可能进入一个完全不可用的条件,由于巨大的滞后,我可能不会无法login和杀死web服务器进程或拒绝所有传入的stream量(除ssh以外)。

这是正确的吗? 我是否错过了某些东西(比如说,即使我有足够的内存,swap分区在某种程度上是非常有用的)。 我应该关掉它吗?

我会说这取决于你的用例,其余的答案已经涵盖了这个很好。 4G的交换毕竟是一种廉价的方式来购买一些安全。 而我觉得这种便宜是让人不想把它关掉的原因。

但是让我回答一个修辞问题。 如果钱不是问题,你可以select两个系统 – 一个是12G内存和4G交换,另一个是16G内存,没有交换 – 你会select哪一个? 不幸的是,大多数人仍然会回答他们会select16G内存,并且仍然会添加4G的交换,这是我的观点。

而另一方面,我个人发现一个比系统崩溃更糟糕的系统。 一个崩溃的系统会触发一个备用的备份服务器来更快地接pipe。 而在主动 – 主动(或负载平衡设置)中,坠毁的系统将很快失去旋转。 再次赢得不换系统。

即使有足够的内存,也不build议closures交换。 如果你的服务器需要更多的内存,并没有得到它,它会崩溃。 但是,如果您有交换区域,则可以防止(在某种程度上)。

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

我发现这个页面谈论交换。 看看第三节。

而不是closures交换,您可以控制交换 。

不,这不是一个好主意。 “一些过程变得疯狂”意味着你应该主动地打电话

ulimit -d

在进程创build时或之前设置每个进程数据段内存的限制 – 也许是对线程数的限制

ulimit -T

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

用这种方式来看待:系统上的内存总量是RAM + swap。 如果您拥有12GB的交换空间,则只需通过禁用交换function,即可将系统虚拟机容量减半。 馊主意。 这不是一场辩论,实际上,它只是简单地阅读其他人从过去的糟糕经历中了解了多less年。 你的朋友也可能需要做一些阅读。

正如其他人所说,除非在绝对必要时修改“swappiness”参数,否则可以使用swap来有效地停止服务器。 这将控制内核将如何积极地交换内存页面。

你可以看到它目前设置为:

 cat /proc/sys/vm/swappiness 

你可以用(以root身份)“live”编辑它:

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

并使其持久化,请将以下内容添加到/etc/sysctl.conf中:

 vm.swappiness=10 

你可以做的另一件好事是使用zRAM交换到RAM中。 我认为这是一个好主意! 对于性能来说,就像没有交换一样,但也可以防止系统非常负载时的崩溃!

看这个:

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

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

但是..这是一个工作站,如果挂起,我可以重新启动。 在一台服务器上,我觉得交换效果更好,交换内存听起来不错。

正如已经非常清楚的那样,这不是一个好主意。 如果没有别的,交换给你一些喘息的空间,当事情是不正常的。 例如,在我看来,通常每天只有几个访问者的系统中,由于杂志中提到的页面而导致了大量的stream量高峰。 这导致Web服务器自debugging以来第一次使用交换空间。 没有交换空间,事情就不会那么顺利。

不是一个好主意。 您可以定义2个不同优先级的交换文件。 一个较小,正在使用和一个较大的将用于第一次填充的情况下。

此外,vm.swappiness可以帮助您控制磁盘交换发生的积极性。

如果你插入一个0到vm.swappiness,这并不一定意味着系统不会交换。 这是一个参数来确定如何激进的kerne的倾向将交换,但它不会closures交换。

再次,交换不坏,但颠簸是。 看看sysstat的数据,并应该给它很好的指针。