squid命中率(转)
察看命中率的shell cat access.log|gawk ‘{print $4}’|sort|uniq -c|sort -nr
重点观察下面三个内容
- TCP_MEM_HIT
- TCP_IMS_HIT
- TCP_REFRESH_HIT
1198559749.083 0 60.4.218.18 TCP_REFRESH_HIT/200 271 GET – FIRST_UP_PARENT/d text/html 1198559813.186 1 218.106.61.11 TCP_IMS_HIT/304 233 GET – NONE/- text/html 1198559829.358 0 218.106.61.11 TCP_IMS_HIT/304 224 GET – NONE/- text/html
TCP_IMS_HIT:NONE 客户端发送确认请求,Squid发现更近来的、新鲜的请求资源的拷贝。 Squid发送更新的内容到客户端,而不联系原始服务器。(这指明Squid对本次请求,不会与任何其他服务器(邻居或原始服务器)通信。) TCP_MEM_HIT:NONE 类似 TCP_IMS_HIT:NONE, 从内存中响应 TCP_REFRESH_HIT:FIRST_UP_PARENT/d Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。
原始服务器返回304(未修改)响应,指示squid的拷贝仍旧是新鲜的。或者是重新更新文件。(Squid直接转发请求到原始服务器)
日志里的 none 就表示直接通过缓存回答客户端 direct 表示有经过原服务器进行查询了才回答客户端
经常有这样的情况,虽然hit的命中率有90%多,但是TCP_REFRESH_HIT:FIRST_UP_PARENT/d类似这样的日志非常多,表示squid性能并未到最优,每次请求仍然会往源服务器上查询一次。
检查问题发现,对于.html文件,squid能比较好的进程缓冲,对于从客户端访问的.dat文件,基本squid响应都为TCP_REFRESH_HIT:FIRST_UP_PARENT/d
在apache内增加AddType text/html .dat的配置继续测试,情况依然。 另发现,使用IE浏览器和FIREFOX访问相同路径会返回TCP_IMS_HIT:NONE,表示不经过原始服务器通信,而客户端软件内访问此地址大部分为TCP_REFRESH_HIT:FIRST_UP_PARENT/d的响应。
总结原因,可能为客户端的请求头和浏览器标准请求头略有差别导致,怀疑是否为这条Cache-Control: no-cache引起
最终测试结果发现是客户端发送了个Cache-Control: no-cache
调整squid的配置参数实现需要的效果,由于squid遵循了RFC标准,默认对于浏览器发送带的Cache-Control:no-cache 和 Pragma: no-cache的请求不进行缓冲,需要做以下配置文件的修改。
refresh_pattern -i .dat 10 100% 30 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private (其中 ignore-no-cache ignore-private 为2.6.13后的针对Cache-Control:no-cache 和 Pragma: no-cache的扩展)
By admin
read more

