我刚刚将两个网站移至新服务器。它们都是类似的基于 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”模块
但同样,这些都是盲目的尝试;你需要借助工具并进行推理,而不是赃物用你的方式度过这一难关。