如何分析 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
僵尸和弗兰克·法默有几个不错的建议(我自己很喜欢慢查询建议)堆栈溢出 697802。AB对于 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 交换的虚拟主机环境。祝您好运找到服务器的最佳选择 ;)