Magento的Apacheconfiguration和内存问题

我有一个Vage的Magento安装,让我头痛。

这个特定的VPS有一个合理的规格 – 2GB内存和50GB存储。 它运行一个单一的域,与一个单一的Magento安装 – 没有别的。

大约5个月前,我们开始有问题。 每隔一段时间(大约每2到3周),VPS就会崩溃 – 所有进程都停止,重启容器的唯一方法就是通过Virtuozzo。

现在,但是每周2到3次。 我的VPS主机确认我违反了2GB的内存限制,此时所有VPS进程都被终止,从而停止将整个节点closures。

我还没有做任何configuration更改 – 我在一段时间内运行New Relic,但删除了它,如果它是造成的问题。 在日志中我什么都看不到,这表明一个问题,并且在崩溃发生时我们没有运行CRON作业。

该网站产生稳定但不是巨大的stream量(平均每天平均less于100次访问)

有什么特别的,我应该做的Apache或PHPconfiguration来帮助? 我不是一个经验丰富的Apachepipe理员,但知道绰绰有余解决大多数问题…

如果没有,其他的想法可能会有所帮助? 这个网站不能承受这么多。

另外一个有用的东西是设置MAXCLIENTS,它是ApacheBuddy。

请参阅https://github.com/gusmaskowitz/apachebuddy.pl

这基本上查看了统计和你的configuration文件,并给你一个关于你的MAXCLIENTS设置应该是什么的指导。 说实话,我永远不能像他们推荐的那样低,但这可能是“正确”的答案。

要使用/安装:

wget https://raw.github.com/gusmaskowitz/apachebuddy.pl/master/apachebuddy.pl

perl apachebuddy.pl

有用的选项包括-p(例如,如果您正在运行varnish的端口)和-P(也就是大写字母“P”)来考虑PHP内存设置。

现在我可以想到的几件事情:

1)检查你正在运行prefork MPM而不是MPM 2)编辑apache2.conf(在Debian上位于/etc/apache2/apache2.conf:

确保以下configuration在那里(似乎对我们来说是最好的:)

Timeout 30 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 2 # prefork MPM # StartServers: number of server processes to start # MinSpareServers: minimum number of server processes which are kept spare # MaxSpareServers: maximum number of server processes which are kept spare # MaxClients: maximum number of server processes allowed to start # MaxRequestsPerChild: maximum number of requests a server process serves <IfModule mpm_prefork_module> StartServers 10 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 2000 </IfModule> 

3)看看使用Varnish作为caching机制,这将减lessApache的负载4)安装APC / Memcache

你可能想用php5-fpm代替apache-mpm-worker。 当我从标准的prefork / mod_php组合切换时,我注意到了一个巨大的差异。

其他一些build议:

  1. 通过运行tuning-primer.sh脚本检查你的mysqlconfiguration。 这将提供一个很好的基准,以确保您的mysqlconfiguration正确,而且不会浪费内存。

  2. 你是否利用Magento的编译和caching组件?

  3. 由于您只有2GB的内存,请确保您的Apache MaxClient处于合理的级别。 从一个较低的数字(例如25)开始,监视你的RAM使用情况,看看你能否增加一些。

  4. 2GB的Magento服务器的stream量不是很多。 你有没有考虑增加内存,或者让第二台服务器用于专用的MySQL来释放Apache的内存?

  5. 您是否使用日志分析器(例如webalizer,awstats等)进行了validation,或者甚至可能只是Apache的扩展状态模块,在过度使用内存时Apache是​​问题?

在你的apacheconfiguration文件中设置什么通常是简单的math。 你有2演出的RAM,可能是1.5可以由Apache使用。

所以这是1500美元。 确保你的magento的.htaccess文件是正常的。

php_value memory_limit 128M php_value max_execution_time 120

(说实话,我们已经把我们设置为512M,因为很多用户都在空白页上,请阅读var / log / exception.log看看是否是这种情况)

在这种情况下,您只能支持12个MaxClients! 说实话,我认为magento默认的内存限制是256.这意味着maxclients 6! 我也build议使用较less的MaxRequestsPerChild。 也许低至100.我会看到的是一些进程越来越大。 阿帕奇儿童不会释放记忆,直到他们被我的经验毁灭。 这是这个设置将会做的。 在100次请求后重新生成subprocess。

我有很多与Apache的问题。 我们有7台演出服务器,像你所描述的倒下。 我们的stream量比你的stream量要大得多。

我刚刚看到你也在这个盒子上运行mysql。 不好。 你可能想用php-fastcgi来看看运行nginx。 我得到它工作得很好,它使用更less的内存。 我们唯一的交易断路器是我们有一个扩展,使用我们需要的离子立方,我无法与之合作。 (我也用xcache代替apc作为我们的操作码caching,因为我听说apc不会在cgi进程之间共享内存)

我也使用nginx作为反向代理服务所有静态内容。 这也可能对你有用。 这是好多了,我们用了很长时间,直到我们决定实施清漆。

至less你需要为magento实现某种caching解决scheme。