我们用鱿鱼 3.0在 Centos5.3 上,目前有 20 个用户(Internet Explorer)使用此代理。问题是通过代理访问速度较慢。即使是像 google.com(.au) 这样的简单网页也比没有代理的直接连接要多花 5 秒。看起来大约有 2-5 秒的延迟。禁用 google.com(.au) 的缓存没有帮助。明确定义 dns_nameservers 没有任何区别。
服务器参数:双核 AMD Opteron(tm) 处理器 2220、6GB 内存、60GB SCSI 硬盘
缓存内存 256 MB
cache_dir ufs /usr/local/squid/var/cache 30000 16 256
内存中最大对象大小 256 KB
最小对象大小 0 KB(0 - 200 KB - 没有真正的区别,延迟仍然存在)
最大对象大小 32 MB
如何根据服务器规格更改 squid.conf 中的这些规格。什么会导致延迟?此外,对于像 yahoo.com.au 这样的大型网页,是否有办法从缓存中接收页面的一部分,然后再接收其余部分(最后显示图像)。目前,15 秒内没有任何内容,然后出现整个网页。
答案1
我的第一个想法是使用 tcpdump 嗅探流量并将其加载到 wireshark 中以查看延迟发生的位置。
tcpdump -i any -s 0 -w /tmp/squid.pcap
(如果您通过 ssh 执行此操作,请在末尾添加“not port ssh”。)
将其加载到 wireshark 后,您应该能够看到延迟出现的位置。我建议在安静的时候执行此操作,这样就不会有太多流量遮挡您的视线。如果您是当时唯一访问代理的人,那就更好了。
可能出现的延误有:
- 浏览器联系代理
- 代理联系网络服务器
- 代理 DNS 请求
- 代理向浏览器返回响应
答案2
对于某些网页,在几乎下载完整个页面(包括图片和所有内容)之前,无法绘制页面。为了加快此类页面的加载速度,您可以采取以下措施:
- 使用 Web 缓存(正如您已经做的那样):这会更快地带来图像。
- 使用更快的机器:大部分时间可能都花在“构图”上,也就是布局网页以供显示,而不是获取信息。
- 使用更快的浏览器:这个跟上面的一样,如果使用IE5,请尝试IE6或者IE7,如果使用Firefox 2,请尝试Firefox 3或者Safari。
过去,我曾经使用 Macintosh 版 Internet Explorer 浏览网页(当时只有 68k)。我清楚地记得看到“报纸”图标,提示您等待,因为 IE 正在计算如何显示页面(未获取数据:计算...)
还有一点需要注意:有些页面会明确请求不缓存:这些请求是否被允许或拒绝取决于缓存管理员。通常,这些页面经常更改,或者 Web 管理员不想将其存储在其他地方。因此,在这样的页面中,您将产生额外的开销,因为 Web 缓存必须代表您处理该页面,即使缓存中根本没有任何页面。
我同意嗅探流量是确定延迟原因的好方法。网络流的哪一部分实际上导致了延迟?
Wireshark(和 tcpdump)有大量过滤器,可用于清理流量:您真正需要等到安静时间的唯一原因是为了避免产生大量的 TCP 转储文件。但是,只要将自己限制为直接到代理的网络流量,您就可以获得一组合理的数据:
tcpdump -s 0 -n -w tcpdump.dat port 3128
(端口 3128 是标准 squid 端口:使用适合您的端口。)
使用 Wireshark,您可以立即根据单个 TCP 流量流进行过滤:因此您不必担心不同流的混合。
还要查看 /var/log/squid 中的日志并检查请求发生了什么:它来自缓存吗?它来自远程站点吗?尝试重复请求 - 运行一次后页面是否更快地出现?
答案3
当我遇到完全相同的问题时,我发现这是一个 DNS 问题。
一旦我将 squid.conf 中的 DNS 服务器更改为我们的 ISP,延迟就消失了。