我们在ubuntu-server上使用LAMP是否需要交换分区?
我认为不需要,但最好确保它不会导致一些意外的行为。
实际上,我的想法是:
实际上,我的想法是:
- 服务器从不休眠
- 如果正在交换,则需要考虑负载平衡/流量整形等问题...
我对吗?我可以在生产服务器上关闭交换吗?
谢谢!
我必须不同意在生产服务器上使用交换空间。
根据我的经验,旋转磁盘的交换空间会使系统变得不可预测,并更容易导致整个系统崩溃,令人沮丧。一个负载高、受欢迎的服务器如果与本地慢速磁盘进行任何操作,很快就会陷入比故障状态更糟糕的情况。响应时间将增加到正常水平的100倍,简单的事情,如通过控制台或ssh登录可能需要几分钟。
SSD交换空间是一个特殊情况,至少可以消除通常会导致系统崩溃的寻道时间延迟。然而,写入仍然很慢,所以您仍然需要等待很长时间才能从失控的进程中恢复过来。
没有交换空间,您的LAMP服务器将简单地终止进程以释放RAM。适当的监控应该会提醒您,并在关键进程被终止时将服务器从生产环境中移除。最坏的情况是,您的登录方法都被终止了,您不得不进行硬重置/电源循环。这种最坏的情况在失控的交换机器上同样可能发生,但更难以检测。
如果您使用PHP,请启用内存限制,并监视日志以查看其故障。这是一个技巧,在开发服务器上将限制设置得比生产环境更低。如果您在Apache下使用mod_php,请将MaxRequestsPerChild设置为几千,以便httpd在一段时间后消失之前不会变得太大。最重要的是,监视内存使用情况!通常情况下,内存会随着时间的推移逐渐增加,您只需要在调试问题时定期重新启动一个有泄漏的服务。
#!/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