[zt]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 http://msg.ppstream.com/msg/msg.dat - FIRST_UP_PARENT/d text/html
1198559813.186 1 218.106.61.11 TCP_IMS_HIT/304 233 GET http://msg.ppstream.com/test.html - NONE/- text/html
1198559829.358 0 218.106.61.11 TCP_IMS_HIT/304 224 GET http://msg.ppstream.com/msg/msg.dat - 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的扩展)
客户端的请求头
GET /msg/msg.dat HTTP/1.1
Accept: */*
User-Agent: Agent16205421
Host: msg.ppstream.com
Cache-Control: no-cache
Cookie: pps_client_id=AALOMYINCT7T7BQKTOS4RZCNT4DEKLTO; pps_client_ver=1.0.0.2506
响应
HTTP/1.0 200 OK
Date: Tue, 25 Dec 2007 06:04:44 GMT
Server: Apache
Last-Modified: Mon, 24 Dec 2007 15:50:02 GMT
ETag: "51d701-0-2e601e80"
Accept-Ranges: bytes
Content-Length: 0
Content-Type: text/html; charset=GB2312
X-Cache: HIT from cache
Connection: close
IE浏览器的请求头
GET /msg/msg.dat HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
If-Modified-Since: Mon, 24 Dec 2007 15:50:02 GMT; length=0
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
Host: msg.ppstream.com
Connection: Keep-Alive
Cookie: pps_client_id=AALOMYINCT7T7BQKTOS4RZCNT4DEKLTO; pps_client_ver=1.0.0.2506
响应
HTTP/1.0 304 Not Modified
Date: Tue, 25 Dec 2007 06:12:10 GMT
Content-Type: text/html; charset=GB2312
Last-Modified: Mon, 24 Dec 2007 15:50:02 GMT
ETag: "51d701-0-2e601e80"
X-Cache: HIT from cache
Connection: close
firefox的请求头
GET /msg/msg.dat HTTP/1.1
Host: msg.ppstream.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: x-gbk,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: __utma=46731238.370718705.1195540611.1196400491.1196407367.12; CoreSessionID=2007-12-19+10%5E30%5E46_1aeadaddf0a3629f8158d579a4aec8cf; SessionID=769917d3475362a416e0a; __utmz=46731238.1195632676.3.2.utmccn=(referral)|utmcsr=pps.tv|utmcct=/tv_online.php|utmcmd=referral
If-Modified-Since: Mon, 24 Dec 2007 15:50:02 GMT
If-None-Match: "51d701-0-2e601e80"
Cache-Control: max-age=0
响应
HTTP/1.0 304 Not Modified
Date: Tue, 25 Dec 2007 06:14:10 GMT
Content-Type: text/html; charset=GB2312
Last-Modified: Mon, 24 Dec 2007 15:50:02 GMT
ETag: "51d701-0-2e601e80"
X-Cache: HIT from cache
Connection: close
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 http://msg.ppstream.com/msg/msg.dat - FIRST_UP_PARENT/d text/html
1198559813.186 1 218.106.61.11 TCP_IMS_HIT/304 233 GET http://msg.ppstream.com/test.html - NONE/- text/html
1198559829.358 0 218.106.61.11 TCP_IMS_HIT/304 224 GET http://msg.ppstream.com/msg/msg.dat - 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的扩展)
客户端的请求头
GET /msg/msg.dat HTTP/1.1
Accept: */*
User-Agent: Agent16205421
Host: msg.ppstream.com
Cache-Control: no-cache
Cookie: pps_client_id=AALOMYINCT7T7BQKTOS4RZCNT4DEKLTO; pps_client_ver=1.0.0.2506
响应
HTTP/1.0 200 OK
Date: Tue, 25 Dec 2007 06:04:44 GMT
Server: Apache
Last-Modified: Mon, 24 Dec 2007 15:50:02 GMT
ETag: "51d701-0-2e601e80"
Accept-Ranges: bytes
Content-Length: 0
Content-Type: text/html; charset=GB2312
X-Cache: HIT from cache
Connection: close
IE浏览器的请求头
GET /msg/msg.dat HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
If-Modified-Since: Mon, 24 Dec 2007 15:50:02 GMT; length=0
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
Host: msg.ppstream.com
Connection: Keep-Alive
Cookie: pps_client_id=AALOMYINCT7T7BQKTOS4RZCNT4DEKLTO; pps_client_ver=1.0.0.2506
响应
HTTP/1.0 304 Not Modified
Date: Tue, 25 Dec 2007 06:12:10 GMT
Content-Type: text/html; charset=GB2312
Last-Modified: Mon, 24 Dec 2007 15:50:02 GMT
ETag: "51d701-0-2e601e80"
X-Cache: HIT from cache
Connection: close
firefox的请求头
GET /msg/msg.dat HTTP/1.1
Host: msg.ppstream.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: x-gbk,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: __utma=46731238.370718705.1195540611.1196400491.1196407367.12; CoreSessionID=2007-12-19+10%5E30%5E46_1aeadaddf0a3629f8158d579a4aec8cf; SessionID=769917d3475362a416e0a; __utmz=46731238.1195632676.3.2.utmccn=(referral)|utmcsr=pps.tv|utmcct=/tv_online.php|utmcmd=referral
If-Modified-Since: Mon, 24 Dec 2007 15:50:02 GMT
If-None-Match: "51d701-0-2e601e80"
Cache-Control: max-age=0
响应
HTTP/1.0 304 Not Modified
Date: Tue, 25 Dec 2007 06:14:10 GMT
Content-Type: text/html; charset=GB2312
Last-Modified: Mon, 24 Dec 2007 15:50:02 GMT
ETag: "51d701-0-2e601e80"
X-Cache: HIT from cache
Connection: close