使用Magento进行4个或更多的并发请求时,100%的CPU

目前我在运行Magento的服务器上遇到麻烦,速度令人难以置信。

这是一个用于开发的几个Magento安装VPS,所以我是唯一使用它们的。 当我每隔两秒钟完成4次请求后,我在10秒内完成。 慢,但仍然在我的耐心范围之内。 当我做4个“并发”的请求,但是(很快就打开4个标签),所有的四个核心都去100%,并留在那里一分钟。

这怎么可能?

我知道这里有很多的可能性,所以如何使Apache / PHP服务器更快的提示也是受欢迎的。

它曾经快很多,我也尝试过APC,但它一直在导致问题(PHP错误,内存池的东西),所以我已经禁用它。

顺便说一句,Magentocachingclosures,编译也closures。 我知道这使得Magento比平常慢,但我不认为任何Magento安装60秒的响应时间是正常的。

虚拟硬件:
4核和4096MB RAM
从不使用交换(使用htop检查)100GB磁盘空间,其中10%正在使用

软件:
Debian 6 DirectAdmin和apache的custombuild PHP 5.2.17(CLI)

如果你需要更多的信息,请告诉我如何得到它,因为我可能不知道如何。 我知道如何在Linux中使用命令行以及使用相当多的命令,但是我pipe理服务器的经验是有限的。

当你禁用caching的时候,Magento的速度非常慢。在vps上更是如此,因为它必须parsing大量的XML文件。 它呈现页面的方式使得在页面上添加新东西非常容易,但是它也会调用一些大量的sql查询,并且还会加载xml文件。

因此,禁用caching意味着magento必须在每次进入请求时读取这些xml文件。因此,每个进程现在都在争夺cpu和磁盘IO。 在vps磁盘上IO是你的瓶颈在90%的时间。 所以4个并发进程都要求读取很多xml文件,导致apache进程中有很多CPU等待。

如果你在其中一个apache进程上执行一个strace ,当它在magento中呈现一个页面时,你会看到它所有的xml。

两年多来我还没有碰到过magento,但是运营一个站点的stream量是一个噩梦,所以我的公司当时最终build立了自己的软件。

一般来说,build议遵循2个规则:1个内核= 2Gb RAM,2个内核= 4Gb RAM,4个内核= 8 Gb RAM。 是的,你说交换没有使用,但也许增加内存是可行的。 提示:要跟踪CPU和内存加载历史logging(不只是当前)我build议使用PotatoCommerce的性能监视扩展。

你应该弄清楚你是否在等待Magento,数据库或者其中的任何子系统。 要确定这一点,使用-ttt标志在webserver / php进程上运行strace。 每个系统调用的前缀都是一个微秒的时间戳,所以您将能够看到您的PHP进程等待数据库,DNS查找以及其他系统调用的时间。

我的第一个build议是运行MySQL tuning-primer.sh脚本,以确保您的MySQLconfiguration具有适当的基线configuration。

搞清楚你的​​问题与APC,所以你可以利用它也将是一个很好的花费你的时间。 即使只有一个32MB的SHM,APC也会有很大的改进。

你有没有做过Apache和PHP的基线优化,即删除不必要的/不需要的模块? 你使用Apache prefork与mod_php或Apache的工人与PHP的FMP?