我们是否需要在LAMP服务器上交换分区?


14

我们是否真的需要使用LAMP在ubuntu服务器上交换分区?我认为我不需要它,但是最好确定是否它不会引起某些不可预测的行为。
其实我的想法是:

  • 服务器永不休眠
  • 如果要交换,则需要考虑负载平衡/流量整形等问题。

我可以关闭生产服务器的交换吗?

谢谢!

Answers:


14

我可以关闭生产服务器的交换吗?

否。总是有一些交换空间。

我尝试运行生产服务器而不交换一次,大约一周后,在Wordpress更新后,PHP开始消耗的内存远远超过了我们的预期。当您用完RAM并启用了交换功能后,事情就会放慢(有时很多,有时只是一点点,具体取决于要插入的内容),但是您可以登录,查找问题并尝试解决它。

当您用完RAM并且没有交换空间时,进程就会死掉,事情停顿,并且很多时候您唯一的选择就是重新启动。但是,除非您重新启动,否则事情可能会破裂。

在我的世界里,破碎远比慢得多。

当然,如果您发现系统一直在使用大量交换空间(它经常会使用一些交换空间来代替旧的缓存内容),那么您显然会遇到问题(“请插入RAM”),但是绝对推荐使用安全网。


针对SpamapS的评论:

在“成功网站”的世界中,您具有热故障切换,负载平衡和其他工具,这些机器可使计算机爆炸,并对站点的其余部分产生零影响。但这需要大量现金。对于大多数站点来说,即使他们赚了钱,拥有冗余硬件也不经济。

我完全不同意您对正常运行时间的评论。在传统的电子商务设置中,如果人们看不到您的网站,他们就无法向您购买。这不仅是电子商务,如果您在任何时期都陷入困境,所有在线商业兴趣都将大大增加。我知道,因为我为公司托管网站和服务并运行自己的网站。慢=脾气暴躁,但下=愤怒。即使您一次只关闭一分钟,如果用户多次看到“需要维护的停机”通知,他们也会认为您无法使网站正常运行。

速度慢的服务器并不理想,但是交换并不是一直都在运行,这是万不得已的做法,它允许您在修复它们的同时保持运行。

您还假定计算机上仅运行一项服务。同样,如果您有大笔资金将所有东西都分开,但在现实世界中,事情会聚在一起,这可能是正确的。多个网站,ssh守护程序,ftp服务器,电子邮件服务器等。泄漏到交换中的一个进程甚至可能不会影响另一项服务。如果不进行交换,则所有事物都有立即随机终止的平等机会。您无法控制它。

当然,交换不是唯一的答案。您需要监视以提醒您何时脱离内存,但是对于大多数人来说,只是拔下插头并重新启动并不是解决之道。我确信这对您负责的任何跨国网站都有效,但对我们来说仅仅是凡人(在互联网上占大多数),这样做是商业自杀。


同样的经历,有点……这对我来说是一个错误,而不是经过深思熟虑的决定。没有交换的服务器很难修复,特别是如果它决定杀死sshd时。
哈维尔·里维拉

我有一个大约16Gb的RAM,其中的一半用于高速IO缓存,其余用于LAMP,交换始终是免费的,或者有时有少量的内存,但是我认为它始终
不可用

3
在成功的网站世界中,反应迟钝比崩溃更糟。用户实际上会感到FAST失败(您的javascript前端代码应正常处理btw),但他们会因为速度慢而讨厌您。放弃交换,这只会延迟不可避免的事情。-1
SpamapS 2010年

1
@Oli:运行N + 1不再需要megabucks甚至是很多美元。实际上,它几乎不需要特殊技能。服务器不可避免地会由于多种原因而宕机,并不是很难避免这种情况的发生。如果您拥有一台独立的LAMP服务器来完成所有工作,那么成本会更高。再设置两个负载均衡器(在带有t1.micros和EBS快照的EC2上,这可能非常便宜),或者您的站点在最大的一天速度太慢了?检查来自Google的数据...我认为它很清楚bit.ly/hB1AD1
SpamapS 2010年

1
很好的答案,涵盖了实际的服务器案例。添加冗余的硬件,LB,监视,RAM缓存等都是非常重要的,如果您不花时间在交换空间上,那么您将有时间进行设置和调试。
ImaginaryRobots 2010年

4

我必须不同意在生产服务器上进行交换。

以我的经验,旋转磁盘交换使您的系统难以预测,并且更容易使整个系统故障。使用本地慢速磁盘执行任何操作的高负载,流行的服务器将迅速演变为比故障状态严重得多的故障。响应时间将达到正常水平的100倍,通过控制台或ssh登录等简单的操作可能需要几分钟的时间。

SSD交换是一种特殊情况,至少可以消除通常会导致系统死机的寻道时间。但是,写入仍然很慢,因此您仍然需要等待很长一段时间才能从失控的过程中恢复。

没有交换,您的LAMP服务器将简单地终止进程以释放RAM。适当的监视应该提醒您这一点,如果关键进程被终止,则将服务器从生产环境中删除。最坏的情况是您的登录方法都被杀死了,您必须进行硬重置/重启。对于失控的交换机器,这种最坏的情况仍然很可能发生,但是很难发现。

如果您使用的是PHP,请启用内存限制,并监视日志中的错误。这是一个技巧,将开发服务器上的限制设置为低于生产环境。如果您在apache下使用mod_php,请将MaxRequestsPerChild设置为几千,这样httpd就会死掉,然后随着时间的增长而增大。首先,监视内存使用情况!通常,内存会随着时间的推移而逐渐增加,并且您只需要在调试问题时定期重新启动泄漏的服务即可。


1
感谢您分享您的体验。当ssh服用Inf时,我正在考虑类似的问题。我只是强迫进程具有有限的内存,这使我可以运行ssh并修复错误的脚本。
阿曼2010年

我在互联网上看到的关于生产交换空间的最有趣的讨论之一。(整个线程,
优点

3

当系统确定活动进程需要物理内存并且可用的物理内存不足时,将使用交换空间。如果系统恰好需要更多的内存资源或空间,则将物理内存中的非活动页面移至交换空间,从而释放该物理内存以供其他用途。

这种情况将在服务器中多次发生。

一种)。未优化的脚本会占用大量内存
b)。诸如备份之类的脚本将始终消耗大量内存
c)。交通繁忙

因此,最好有一些交换空间。

更多详细信息:https : //help.ubuntu.com/community/SwapFaq


感谢您的解释。如果一个脚本有错误,那么无论如何您都会使服务器崩溃,系统限制应该控制您的脚本,不是吗?
阿曼2010年

aneeshep,如果在繁忙的流量中进行交换,则系统将比正常情况下慢100倍。那通常是不可接受的。
SpamapS 2010年

2

使用交换将为您提供防止服务器不稳定的另一种保护措施。有时,RAM耗尽,并且服务器上没有交换可能会导致软崩溃。

我是少数可能现在我当我说,它仍然是有意义的,就像他们曾经建议,有两倍的交换,你有主内存。即使在具有96GB RAM的系统上。

它的成本不高,如果有一天需要它,您会很高兴得到它。启用交换的原因仅仅是非常简单的成本效益分析。做吧!:-)


0

我要感谢Oli的美丽-我知道老-回答。我发现分区是一个永远的绿色话题!我完全同意Oli的帖子,我想分享这个-当然是可改进的-我用来监视服务器的交换使用情况的脚本。

我总是将服务器和服务配置为完全不发生交换操作。在可能的情况下,请确保某些地方出了问题,或者充其量是超过了您最初的计划。

我在生产环境中每半小时crontab这个脚本。如果交换使用量= 0k,它将向我发送通知。在大多数情况下,我可以事情真正出错之前及时调查/采取行动。

期望您具有:bash,top,echo,awk和有效的mail命令,而无需执行任何检查。

希望能有所帮助。

#!/bin/bash
CURRSWAP=$(top -b -n1 |grep Swap |awk '{print $4}')
ECOMM="echo $CURRSWAP means healthy, I wont take any action."
CURRDATE=$(date)
MAILDST="your@email.addr"

case $CURRSWAP in
  [0]k) $ECOMM
        exit 0
        ;;
  *)    echo -e "Server: $HOSTNAME \n Date: $CURRDATE \n Current Swap partition usage: $CURRSWAP" | mail -s "Warning from $HOSTNAME" -- $MAILDST
        exit 0
        ;;
esac
exit 0
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.