分析 Apache+Mysql+Php 服务器-哪个是瓶颈?

分析 Apache+Mysql+Php 服务器-哪个是瓶颈?

如何分析 Linux + Apache + Mysql + Php 服务器的速度?

我有一台服务器,上面有一个经过大量修改的 MediaWiki 实例,运行在 Ubuntu 8.04 上。它有点慢 - 我还没有做任何优化,所以我确信有很多容易实现的方法可以让它快得多。

但为了优化,你需要先进行测量。如何找出哪些组件(Apache、Php、Mysql)占用了最多的时间来提供页面?

答案1

好吧,当您分析类似情况以找到瓶颈时,您需要逐一排除问题。您需要一个基准来进行对比。如果您安装了“ab”工具(它随 apache 一起提供),您可以使用它。

为了获得基准,我建议至少获取几百个请求的平均值。以下是示例:

$ ab -n 400 http://yousite/

查看“每个请求的时间”行的结果,它看起来像这样:

Time per request:       96.031 [ms] (mean)

记下那个时间,因为这是基线。

为了排除 apache 是罪魁祸首,请在您的服务器上创建一个静态页面(只需保存您认为速度慢/迟缓的页面的 html)并再次对其运行 ab。

将一些 PHP 放入静态页面。不必大量使用,但应该确实能做一些工作。MediaWiki 是相当不错的代码,因此如果您的系统存在 PHP 瓶颈,我会将钱花在实际将 PHP 堆栈加载到内存上,然后再次执行测试。

查看这三个数字,看看下一步之间的最大跳跃在哪里。我敢打赌 MySQL 是三者中最慢的,但很可能是因为您在页面上加载了大量图像,导致总请求时间变慢,在这种情况下,您可能需要重新考虑页面的设计。

答案2

我们运行了一个大小合适的 MediaWiki 安装,并很快注意到 MediaWiki 因拥有 memcached 实例而受益匪浅。否则它必须在每次请求时加载大量语言文件和用户数据。

答案3

僵尸弗兰克·法默有几个不错的建议(我自己很喜欢慢查询建议)堆栈溢出 697802AB对于 apache 来说,测试你所做的更改也相当有用。

答案4

prefork 模块的配置也极其重要。我大幅减少了 /etc/apache2/apache2.conf 中特定部分的数字。从那时起,我遇到了严重的延迟,页面在完成加载之前会停滞长达一分钟……使用 drupal 的跟踪和 devel 模块进行跟踪,以及使用 xdebug 进行分析让我束手无策。我设置了 APC 并修改了 MYSQL conf,但罪魁祸首实际上是 prefork 模块的值太小。我将这些值提高到中等且足够的水平,现在服务器又恢复了闪电般的速度。如果您的页面执行时间莫名其妙地过长,请注意这些数字。...

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
# original values:
#    MaxSpareServers      10
#    MaxClients          150
# far too conservative experimental values:
#    MaxSpareServers       5
#    MaxClients            5
# good compromise:
    MaxSpareServers       10
    MaxClients            20
    MaxRequestsPerChild   0
</IfModule>

这些值适用于具有 512MiB RAM + 256MiB 交换的虚拟主机环境。祝您好运找到服务器的最佳选择 ;)

相关内容