我有一个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议:
通过运行tuning-primer.sh脚本检查你的mysqlconfiguration。 这将提供一个很好的基准,以确保您的mysqlconfiguration正确,而且不会浪费内存。
你是否利用Magento的编译和caching组件?
由于您只有2GB的内存,请确保您的Apache MaxClient处于合理的级别。 从一个较低的数字(例如25)开始,监视你的RAM使用情况,看看你能否增加一些。
2GB的Magento服务器的stream量不是很多。 你有没有考虑增加内存,或者让第二台服务器用于专用的MySQL来释放Apache的内存?
您是否使用日志分析器(例如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。