Apache 在小型网站上占用大量 CPU

Apache 在小型网站上占用大量 CPU

我有一台 CentOS 5.5 VPS 服务器,配备 512MB RAM。

其上托管有 1 个网站,通过 Apache/PHP/MySQL 构建,采用流行的电子商务框架 Magento。

当我浏览该网站时,大约需要 10 秒钟才能加载,运行时top会显示以下内容:

我知道 Magento 是一款相对较重的软件并且需要进行大量处理,但对于一个网站来说这太荒谬了。

它还没有启动,但我担心的是,当它启动时,如果几个人同时浏览主页,可能会引起问题。

我不是服务器人员,所以真的不知道在配置方面该怎么做。512MB 的 RAM 足以运行这个网站。

我的 Apache 配置如下,任何建议都很好!

Timeout 120
KeepAlive Off
StartServers       2
MinSpareServers    2
MaxSpareServers    7
ServerLimit       25
MaxClients        25
MaxRequestsPerChild  500

答案1

第一个瓶颈很明显。查看 TOP 输出,特别是8.7% 加元- 您受到 I/O 限制。所以您认为的 CPU 使用率,其实是您的 HDD 无法以足够快的速度提供数据。

这对于 VPS 来说非常典型,因为 IO 是一种共享资源,因此其他人的活动将严重影响您的性能。

Magento 并不大,也不慢,其性能与任何其他 Web 应用程序一样好 - 但如果您的服务器很慢,那么它肯定不会有帮助。

仔细阅读http://s.onas.si/xg4h有关配置的一些提示

但是其他答案是正确的,虽然在有 1 个用户的情况下仍然可以实现快速的页面加载时间,但如果有高于该数字的用户,则几乎肯定无法实现。

我在这里对 Magento 在 VPS 上的表现进行了很好的分析https://serverfault.com/a/367861/113375

答案2

Magento 占用大量资源。如果您没有启用 magento 的所有缓存,那么在具有 5 倍配置的服务器上,其速度会很慢。

因此请确保启用所有缓存。

即使打开了缓存,magento 仍然占用大量内存,因此,如果使用 512MB 的 RAM,你很难获得 5 个并发连接。

我曾是一家公司的系统管理员,该公司从 magento 起步,然后构建了自己的解决方案,因为构建我们自己的平台比使用 magento 并通过投入硬件来扩展更便宜。

答案3

根据您的 Apache/PHP 设置方式,占用 CPU 时间的是 PHP 代码而不是 Apache 本身(如果您通过 modPHP 运行,则 PHP 的 CPU 使用率将计入 Apache 的 CPU 使用率,如果您使用 CGI/FastCGI,则 PHP 进程应在top的输出中单独列出)。

我对 Magento 一无所知(他们的支持路线是寻求针对其脚本的帮助的更好的地方)是否有可能存在一些错误配置导致它尝试做太多工作 - 仔细检查文档以查看是否有关于优化 CPU 使用率的任何提示。

这可能是因为它正在运行一次又一次的任务,预先存储一堆内容,然后将其缓存以供以后使用,在这种情况下,问题可能不会出现在以后的请求中。

也可能是您的 VPS 在 CPU 方面超载,因此,如果使用专用的 CPu 核心,则需要一秒或更短的时间,但由于您的 VPS 正在与其他 VPS 争夺 CPU 的使用权,因此可能需要 10 秒。我见过许多虚拟机挤在一台双核机器上,当大多数虚拟机的 CPU 相对空闲时,这种情况是可以的(这在 web/sql 机器中很常见,因为它们大部分时间都在等待网络或磁盘 I/O,而不是忙于处理 CPU 的工作,但情况并非总是如此)。

您是否尝试过在您自己的一台机器上运行 VM 的安装副本上比较性能?如果它在那里表现良好,那么就表明您的 VPS 的某些方面没有得到充分说明,如果它在您的(可能已卸载的)本地 VM 上运行缓慢,那么问题更可能出在脚本或其配置上。您还可以尝试运行一个简单的 CPU 基准测试,以查看 VM 是否“CPU 缓慢” - 我建议进行单进程单线程测试,因为看起来让 Apache 忙碌的只是一个进程/线程(整体 vCPU 使用率为 10-20%,具体取决于您计算的内容,而 Apache 进程列出的百分比约为 80%,这意味着它使用一个虚拟 CPU,其余的或多或少处于空闲状态)。

答案4

您的 apache 配置对该站点可处理的流量量设置了相当严格的限制。

正如 Mike 所说,Magento 非常大而且很慢。

由于 httpd 占用了 CPU,我推测 PHP 正在以 mod_php 的形式运行。请确保为 PHP 运行留出足够的内存,并使用操作码缓存。此外,请确保您正在执行所有常规操作来调整应用程序。

相关内容