Answers:
我可以关闭生产服务器的交换吗?
否。总是有一些交换空间。
我尝试运行生产服务器而不交换一次,大约一周后,在Wordpress更新后,PHP开始消耗的内存远远超过了我们的预期。当您用完RAM并启用了交换功能后,事情就会放慢(有时很多,有时只是一点点,具体取决于要插入的内容),但是您可以登录,查找问题并尝试解决它。
当您用完RAM并且没有交换空间时,进程就会死掉,事情停顿,并且很多时候您唯一的选择就是重新启动。但是,除非您重新启动,否则事情可能会破裂。
在我的世界里,破碎远比慢得多。
当然,如果您发现系统一直在使用大量交换空间(它经常会使用一些交换空间来代替旧的缓存内容),那么您显然会遇到问题(“请插入RAM”),但是绝对推荐使用安全网。
针对SpamapS的评论:
在“成功网站”的世界中,您具有热故障切换,负载平衡和其他工具,这些机器可使计算机爆炸,并对站点的其余部分产生零影响。但这需要大量现金。对于大多数站点来说,即使他们赚了钱,拥有冗余硬件也不经济。
我完全不同意您对正常运行时间的评论。在传统的电子商务设置中,如果人们看不到您的网站,他们就无法向您购买。这不仅是电子商务,如果您在任何时期都陷入困境,所有在线商业兴趣都将大大增加。我知道,因为我为公司托管网站和服务并运行自己的网站。慢=脾气暴躁,但下=愤怒。即使您一次只关闭一分钟,如果用户多次看到“需要维护的停机”通知,他们也会认为您无法使网站正常运行。
速度慢的服务器并不理想,但是交换并不是一直都在运行,这是万不得已的做法,它允许您在修复它们的同时保持运行。
您还假定计算机上仅运行一项服务。同样,如果您有大笔资金将所有东西都分开,但在现实世界中,事情会聚在一起,这可能是正确的。多个网站,ssh守护程序,ftp服务器,电子邮件服务器等。泄漏到交换中的一个进程甚至可能不会影响另一项服务。如果不进行交换,则所有事物都有立即随机终止的平等机会。您无法控制它。
当然,交换不是唯一的答案。您需要监视以提醒您何时脱离内存,但是对于大多数人来说,只是拔下插头并重新启动并不是解决之道。我确信这对您负责的任何跨国网站都有效,但对我们来说仅仅是凡人(在互联网上占大多数),这样做是商业自杀。
我必须不同意在生产服务器上进行交换。
以我的经验,旋转磁盘交换使您的系统难以预测,并且更容易使整个系统故障。使用本地慢速磁盘执行任何操作的高负载,流行的服务器将迅速演变为比故障状态严重得多的故障。响应时间将达到正常水平的100倍,通过控制台或ssh登录等简单的操作可能需要几分钟的时间。
SSD交换是一种特殊情况,至少可以消除通常会导致系统死机的寻道时间。但是,写入仍然很慢,因此您仍然需要等待很长一段时间才能从失控的过程中恢复。
没有交换,您的LAMP服务器将简单地终止进程以释放RAM。适当的监视应该提醒您这一点,如果关键进程被终止,则将服务器从生产环境中删除。最坏的情况是您的登录方法都被杀死了,您必须进行硬重置/重启。对于失控的交换机器,这种最坏的情况仍然很可能发生,但是很难发现。
如果您使用的是PHP,请启用内存限制,并监视日志中的错误。这是一个技巧,将开发服务器上的限制设置为低于生产环境。如果您在apache下使用mod_php,请将MaxRequestsPerChild设置为几千,这样httpd就会死掉,然后随着时间的增长而增大。首先,监视内存使用情况!通常,内存会随着时间的推移而逐渐增加,并且您只需要在调试问题时定期重新启动泄漏的服务即可。
当系统确定活动进程需要物理内存并且可用的物理内存不足时,将使用交换空间。如果系统恰好需要更多的内存资源或空间,则将物理内存中的非活动页面移至交换空间,从而释放该物理内存以供其他用途。
这种情况将在服务器中多次发生。
一种)。未优化的脚本会占用大量内存
b)。诸如备份之类的脚本将始终消耗大量内存
c)。交通繁忙
因此,最好有一些交换空间。
更多详细信息:https : //help.ubuntu.com/community/SwapFaq
使用交换将为您提供防止服务器不稳定的另一种保护措施。有时,RAM耗尽,并且服务器上没有交换可能会导致软崩溃。
我是少数可能现在我当我说,它仍然是有意义的,就像他们曾经建议,有两倍的交换,你有主内存。即使在具有96GB RAM的系统上。
它的成本不高,如果有一天需要它,您会很高兴得到它。启用交换的原因仅仅是非常简单的成本效益分析。做吧!:-)
我要感谢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