请求时间较长

请求时间较长

我的 HTTP 请求的执行时间很长(例如,13 秒内执行了 42KB)。

我使用 haproxy 来平衡流量。静态文件由 lighttpd 在 varnish 加速器后面提供服务。所以...它应该在光速以下提供服务 :P

http://img580.imageshack.us/g/34411388.png/

长 DNS 查询:pic1

长接:图2

模拟下载:pic3

我使用 GoogleDNS。服务器位于美国。首先,我将 IP 添加到 /etc/hosts 以省略 DNS 查询。其次,我将静态迁移到单独的机器,省略了 haproxy。这样它就直接连接到 varnish。流量不大,因为这只是开发,但它也发生在生产中。

http://img580.imageshack.us/g/34411388.png/

修改后:图4

稍微好一点了,但还是很慢……

答案1

首先,您必须检查 Varnish 从哪里提供图像。它每次都是缓存图像还是使用后端?

您可以通过多种方式进行检查:

  1. 使用命令行开关来跟踪 VCL 并准确查看请求正在做什么(-p vcl_trace=true如果我的记忆力没问题的话)。
  2. 用于varnishlog观察对图像的某些请求并查看发生了什么(如果它是从缓存中提供的,等等)。如果您设置了 ,则必须使用此功能vcl_trace
  3. 在响应传递中添加一个标题,然后在浏览器上检查它以查看是否命中。

像这样:

sub vcl_deliver {
   if (obj.hits > 0) {
                set resp.http.X-Cache = "HIT";
                unset resp.http.cookie;
        } else {
                set resp.http.X-Cache = "MISS";
        }
}

它会在 Varnish 处理的每个请求上添加一个 X-cache 标头。在检查 Varnish 是否确实正确缓存后,我们可以查找响应时间过长的原因,但我想观察跟踪中的请求会给你一些提示。

答案2

你可能会被击中缓冲区膨胀

相关内容