于洋博客 互联网点滴记忆

24Mar/110

Apache Nginx并存

因为多店铺批量做SEO,服务器不堪蜘蛛爬虫反向链接检查集中到来重负,现使用方案Linux CentOS服务器负载过高时自动重启Apache服务,虽然整体服务器不会死的很尴尬,但是技术人员后台操作的时候间歇遇到Apache重启,工作效率受到影响。

因此为服务器额外安装了Nginx,和Apache使用同个document root访问magento后台,服务器有多个IP,只需要配置Apache和Nginx使用不同的IP即可。

由于不同的IP,后台打开变快很多,如果能用不同的物理网卡,效果应该更好。

Filed under: Lamp, Magento, SEO No Comments
19Mar/111

Linux CentOS服务器负载过高时自动重启Apache服务

最近在进行Magento的多店铺实践,200+产品,100+店铺,已经考虑到多店铺里的各种表可能会变得庞大,单页面的负载会比单店铺下要高,因此服务器配置比平时的配置多加了2G内存,此配置为:
Intel Quad Core Xeon X3220
Memory: 8 GB
网站域名解析并提交搜索引擎后,间或发现服务器无法响应,网站无法打开,只能提交主机商客服重启处理,重启后人工盯了一段时间TOP命令监测CPU Average平时为2左右,比单店铺的0.5-0.7要高许多,多店铺对资源的要求还是很高。观察一夜之后发现,CPU Average会偶然飙高到20+以上,对于4核CPU来说,这个数值意味着系统很难再为其他进程服务,这也就不难解释为什么SSH无法登录了。也观察了Apache Log发现这种情况发生的时候,有一些非蜘蛛亦非客户的请求过来,并发并不高,但是持续访问最终拖死了Apache。尝试将mod_php修改为fast_cgi后情况稍有改善,但是没有治本,服务器依然会死去。

经历了连续3次刚睡下被喊起来处理的痛苦后决定采用以下解决方案,在负载过高的时候杀死Apache,丢弃一部分访问换取服务器的长久运作,在进程杀死服务器之前,先杀死进程。

#!/bin/sh
TOP_SYS_LOAD_NUM=20
SYS_LOAD_NUM=`uptime | awk '{print $(NF-2)}' | sed 's/,//'`  

echo $(date +"%y-%m-%d") `uptime`
if [ `echo "$TOP_SYS_LOAD_NUM < $SYS_LOAD_NUM"|bc` -eq 1 ]
then
    echo "##" $(date +"%y-%m-%d %H:%M:%S") "pkill httpd" `ps -ef | grep httpd | wc -l`
    pkill httpd
    sleep 10
    for i in 1 2 3
    do
        if [ `pgrep httpd | wc -l` -le 0 ]
        then
            /usr/sbin/apachectl start
            sleep 30
            echo "##" $(date +"%y-%m-%d %H:%M:%S") "start httpd" `ps -ef | grep httpd | wc -l`
        fi
    done
else
    if [ `pgrep httpd | wc -l` -le 0 ]
    then
        /usr/sbin/apachectl start
        sleep 30
        echo "##" $(date +"%y-%m-%d %H:%M:%S") "start httpd" `ps -ef | grep httpd | wc -l`
    fi
fi

Crontab增加如下调用,2分钟执行一次
*/2 * * * * /root/checkload.sh >>/root/checkload.log

先观察一下,下一步把对内存的监测也放上去。

Filed under: Lamp, Magento 1 Comment