网站加载延迟 - 不是由 Apache、MySQL 引起的。如何查找原因?

网站加载延迟 - 不是由 Apache、MySQL 引起的。如何查找原因?

我刚刚将两个网站移至新服务器。它们都是类似的基于 Drupal 的网站。一个网站加载正常(1-3 秒),但另一个网站需要 12-15 秒。经过大量记录和测量后,我发现大部分延迟都是在等待服务器响应。也就是说,当我在浏览器中加载页面时,服务器上的 Apache 需要 10 秒才能收到请求。我仔细检查了 DNS 条目,但没有发现任何问题。

我怎样才能缩小造成这种情况的原因范围?

答案1

您需要使用可以窥视请求内部线索的工具。Devel 模块允许您查看正在运行的查询的细目以及它们所花费的时间。其他工具(如 XHProf)可为您提供更深入的见解。

归根结底,“等待响应”只是一种转移注意力的花招。它的意思与你似乎已经做出的直觉判断不一致。在这种情况下,并不是服务器延迟响应,而是服务器准备它的响应。因此,你的工作是找出服务器花费这么长时间的原因。

在过去几周里我发现了导致这种情况的常见原因:

  • settings.php 中定义的 memcached/redis 主机已失效(尤其是在无法访问的 RFC1918 子网上)
  • 失控的 MySQL 查询
  • MySQL 服务器被指定为具有慢速 DNS 服务器的主机名
  • MySQL 服务器配置为查找客户端主机名(即无skip_name_resolve
  • Cron 已经有一段时间没有运行了,有大量积压任务,并且启用了“穷人的 cron”模块

但同样,这些都是盲目的尝试;你需要借助工具并进行推理,而不是赃物用你的方式度过这一难关。

相关内容