今天在 squid 服务器上,无意看到一个让我无比惊讶的访问日志,随后一统计,同样的日志居然还不在少数,……
[root@tinysquid2 ~]# tail -f /cache/logs/access.log |grep HIT
1268824378.683 64 125.39.107.46 TCP_MEM_HIT/200 851 GET http://www.114.com.cn/style/css/jquery.autocomplete.css - DIRECT/117.25.130.146 text/css "http://www.114.com.cn/gindex.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QQPinyin 686; SV1; 360SE)"
居然存在 TCP_MEM_HIT/200
的情况下还 DIRECT
回源的情况!!
有同事猜测可能是当源站数据取回来后,因为 cache_mem
不够大,要转写到 cache_disk
上去,但请求并发较大,数据还没转写呢,mem 已经不足了,于是把相对较老的抛弃掉。于是在索引中标记这部分数据是 HIT 的,但实际又没有数据在 MEM 中,所以继续 DIRECT 回源取了。
不过从 squidclient 的 mgr:info 来看,不支持他的这种说法。
Cache information for squid:
Request Hit Ratios: 5min: 45.4%, 60min: 55.7%
Byte Hit Ratios: 5min: 59.2%, 60min: 62.3%
Request Memory Hit Ratios: 5min: 30.1%, 60min: 24.4%
Request Disk Hit Ratios: 5min: 26.8%, 60min: 24.0%
Storage Swap size: 354184 KB
Storage Mem size: 32196 KB
Mean Object Size: 15.91 KB
Requests given to unlinkd: 498
可以看到内存使用的很少,才 32M,而 free 是 3G,cache_mem 是 1G。
还有,之后对全部日志进行分析时发现,cache_status 不单单是 TCP_MEM_HIT
会出现这种情况,全部日志的情况如下:
[root@tinysquid2 ~]# cat /cache/logs/access.log|grep HIT|grep DIRECT|grep -v REFRESH|awk '{print $4}'|sort|uniq -c
1086 TCP_HIT/200
18386 TCP_IMS_HIT/304
45964 TCP_MEM_HIT/200
2 TCP_MEM_HIT/206
即使是 DISK 上的 TCP_HIT
也有回源的。太奇怪了!!