使用 Magento 执行 4 个或更多并发请求时 CPU 占用率为 100%

使用 Magento 执行 4 个或更多并发请求时 CPU 占用率为 100%

目前,我的运行 Magento 的服务器遇到了问题,它的速度慢得令人难以置信。

这是一台 VPS,上面安装了一些 Magento,用于开发,所以只有我一个人在使用。当我在 2 秒内发出 4 个请求时,我在 10 秒内就完成了。虽然很慢,但仍然在我的耐心范围内。但是,当我发出 4 个“并发”请求时(连续打开 4 个选项卡,非常快),所有四个核心都达到 100% 并保持大约一分钟。

这怎么可能?

我知道这里有很多可能性,所以任何关于如何让 Apache/PHP 服务器运行更快的提示也都受到欢迎。

以前它的速度要快得多,我也尝试过 APC,但它总是导致问题(PHP 错误、内存池问题),所以我禁用了它。

顺便说一句,Magento 缓存已关闭,编译也已关闭。我知道这会使 Magento 比平时慢,但我认为 60 秒的响应时间对于任何 Magento 安装来说都不正常。

虚拟硬件:
4 核处理器和 4096MB RAM,
从未使用过交换空间(使用 htop 检查),100GB 磁盘空间,其中 10% 已使用

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

如果您需要更多信息,请告诉我如何获取,因为我可能不知道如何获取。我确实知道如何在 Linux 中使用命令行以及相当多命令的用法,但我管理服务器的经验有限。

答案1

禁用缓存后,Magento 会变得非常慢。在 vps 上尤其如此,因为它必须解析大量 XML 文件。它呈现页面的方式使得在整个页面上添加新内容变得非常容易,但它也需要一些大量的 sql 查询以及加载 xml 文件。

因此,禁用缓存意味着 magento 必须在每个请求传入时读取这些 xml 文件。因此,每个进程现在都在争夺 CPU 和磁盘 IO。在 VPS 上,磁盘 IO 是 90% 的时间瓶颈所在。因此,4 个并发进程都要求读取大量 xml 文件,导致 apache 进程大量 CPU 等待。

如果您strace在 magento 中渲染页面时对其中一个 apache 进程执行操作,您将看到它必须渲染的所有 xml。

我已经有两年多没有接触过 magento 了,但是运行一个流量很大的网站简直是一场噩梦,所以我当时的公司最终构建了自己的软件。

答案2

通常,建议遵循 2x 规则:1 核 = 2GB RAM,2 核 = 4GB RAM,4 核 = 8GB RAM。是的,您说没有使用交换,但也许增加 RAM 是一个选择。提示:要跟踪 CPU 和内存负载历史记录(而不仅仅是当前历史记录),我建议使用 PotatoCommerce 的性能监控扩展。

答案3

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

答案4

我的第一个建议是运行MySQL 调优入门.sh脚本以确保您的 MySQL 配置具有正确的基线配置。

找出 APC 的问题,以便利用它,这也是一项值得花费时间的工作。即使只是 32MB 的 APC SHM 也能带来显著的改进。

您是否对 Apache 和 PHP 进行过基础优化,例如删除了不必要的模块?您是否使用带有 mod_php 的 Apache prefork 或带有 php-fpm 的 Apache worker?

相关内容