hew 2008-8-21 14:07
SQUID基本理论及优化研究
1.每G的磁盘缓冲.约使用32M的内存,具体大小决定于系统体系结构以及object大小.
2.squid使用临时端口对每个连入链接进行服务,所以当服务器负载比较大时,需要对端口数进行优化
[color=green]echo[/color]
[color=#8b00]"[/color][color=red]1024 40000[/color][color=#8b00]"[/color][color=gray] > /[/color][color=blue]proc[/color][color=gray]/[/color][color=blue]sys[/color][color=gray]/[/color][color=blue]net[/color][color=gray]/[/color][color=blue]ipv4[/color][color=gray]/[/color][color=blue]ip_local_port_range[/color]
3.日志文件路径.
日志分为cache.log,记录squid状态和调试信息
access.log文,记录对squid发起的每个客户请求
store.log,记录进入和离开缓存的每个目标的记录
[color=blue]cache_log[/color][color=gray] /[/color][color=blue]squid[/color][color=gray]/[/color][color=blue]logs[/color][color=gray]/[/color][color=blue]cache[/color][color=gray].[/color][color=blue]log[/color]
[color=blue]cache_access_log[/color][color=gray] /[/color][color=blue]squid[/color][color=gray]/[/color][color=blue]logs[/color][color=gray]/[/color][color=blue]access[/color][color=gray].[/color][color=blue]log[/color]
[color=blue]cache_store_log[/color][color=gray] /[/color][color=blue]squid[/color][color=gray]/[/color][color=blue]logs[/color][color=gray]/[/color][color=blue]store[/color][color=gray].[/color][color=blue]log[/color]
当需要极端性能的时候,可以将日志记录取消
[color=blue]cache_log[/color][color=gray] /[/color][color=blue]dev[/color][color=gray]/[/color][color=green]null[/color]
[color=blue]cache_access_log[/color][color=gray] /[/color][color=blue]squid[/color][color=gray]/[/color][color=blue]logs[/color][color=gray]/[/color][color=blue]access[/color][color=gray].[/color][color=blue]log[/color]
[color=blue]cache_store_log[/color]
[color=blue]none[/color]
4.visible_hostname
我们知道没有指定可见主机名,squid将无法启动
其原因是squid在提供服务时,会把主机头插入http via以及x-cache头部
提供用户更详细的信息.而且将会把主机名使用在检测转发环路中
5.日志滚动
[color=blue]squid[/color][color=gray] -[/color][color=blue]k[/color]
[color=blue]rotate[/color]
6.no_cache
此项用于指定内容是否会被squid缓存.由于此项使用no.在语意上会造成一定的混淆
no_cache allow 是允许指定内容进行缓冲
no_cache deny 是让指定目标不被缓存
7.L1以及L2缓冲
squid存储方式ufs,aufs,和diskd中,会使用L1,L2级目录
L1和L2参数指定了第一级和第二级目录的数量,默认的是16和256
如果针对特定的缓冲对象数量进行服务
则可以通过L1,L2参数的调整,使得每个L2目录下的文件数量保持在一个合理值之内
8.maximum_object_size
如果对象包含Content-Length头部
则SQUID在直接比较两个值之后做出缓冲与否的判断
否则将会在将对象存放在本地磁盘之后再对比文件大小
9.cache_dir写入选择算法
Squid有2个cache_dir选择算法。默认的算法叫做lease-load;替代的算法是round-robin。
least- load算法,就如其名字的意义一样,它选择当前工作负载最小的cache目录。负载概念依赖于存储机制。对aufs,coss和diskd机制来说,负载与挂起操作的数量有关。对ufs来说,负载是不变的。在cache_dir负载相等的情况下,该算法使用自由空间和最大目标大小作为附加选择条件。
round-robin算法也使用负载作为衡量标准。它选择某个负载小于100%的cache目录,当然,该目录里的存储目标没有超出大小限制,并且不是只读的。
10.删除缓存对象
[color=blue]squidclient[/color][color=gray] -[/color][color=blue]r[/color]
[color=blue]http[/color][color=gray]:[/color][color=#ffa50]//www.lrrr.org/junk >/tmp/foo[/color]
11.删除个别对象
[color=blue]squidclient[/color][color=gray] -[/color][color=blue]m[/color]
[color=blue]PURGE[/color]
[color=blue]http[/color][color=gray]:[/color][color=#ffa50]//www.lrrr.org/junk[/color]
12.删除一组对象
[color=blue]awk[/color]
[color=#8b00]'[/color][color=red]{print $7}[/color][color=#8b00]'[/color][color=gray] /[/color][color=blue]usr[/color][color=gray]/[/color][color=blue]local[/color][color=gray]/[/color][color=blue]squid[/color][color=gray]/[/color][color=green]var[/color][color=gray]/[/color][color=blue]logs[/color][color=gray]/[/color][color=blue]access[/color][color=gray].[/color][color=blue]log[/color][color=gray] \
| [/color][color=blue]grep[/color]
[color=blue]www[/color][color=gray].[/color][color=blue]example[/color][color=gray].[/color][color=blue]com[/color][color=gray] \
| [/color][color=blue]xargs[/color][color=gray] -[/color][color=blue]n[/color]
[color=maroon]1[/color]
[color=blue]squidclient[/color][color=gray] -[/color][color=blue]m[/color]
[color=blue]PURGE[/color]
13.删除全部对象
首先必须确认squid没有在运行
[color=green]echo[/color]
[color=#8b00]''[/color][color=gray] > /[/color][color=blue]usr[/color][color=gray]/[/color][color=blue]local[/color][color=gray]/[/color][color=blue]squid[/color][color=gray]/[/color][color=green]var[/color][color=gray]/[/color][color=blue]cache[/color][color=gray]/[/color][color=blue]swap[/color][color=gray].[/color][color=blue]state[/color]
14.refresh_pattern
refresh_pattern规则仅仅应用到没有明确过时期限的响应。原始服务器能使用Expires头部,或者Cache-Control:max-age指令来指定过时期限。
[color=blue]refresh_pattern[/color][color=gray] -[/color][color=blue]i[/color][color=gray] \.[/color][color=blue]htm[/color][color=gray]$ [/color][color=maroon]0[/color]
[color=maroon]20[/color][color=gray]% [/color][color=maroon]1440[/color]
15.文件系统优化
设置noatime
设置async
16.squid堆叠
通常把一组互相转发请求的cache(或代理)叫做cache堆叠。把cache堆叠的成员叫做邻居或对等伙伴
邻居cache有2种关系:父子或兄弟。从拓扑上看,父cache在堆叠里位于顶层,而兄弟cache位于同一层。两者真正的不同在于,父cache能为子cache转发cache丢失,然而兄弟cache之间不允许转发cache丢失。
17.HTCP与ICP
使用HTCP相对于ICP的主要优势在于更少的假命中。HTCP有更少的假命中,因为查询消息包含了完整的HTTP请求头部,包含了来自客户端的任何 Cache-Control要求。使用HTCP的主要不足在于HTCP查询更大,要求更多的CPU来处理产生和解析消息。测量显示,HTCP查询大约是 ICP查询的6倍大,这归咎于HTTP请求头部的存在。然而,squid的HTCP响应典型的比ICP响应小。
18.cache_peer_domain中域名的差异
如果是.test.com
则匹配test.com以及所有*.test.com
如果是test.com
则只匹配test.com
19.squid缓冲deflate压缩内容
squid 2.6之后对http/1.1的支持增强.支持ETAG以及Vary.
这样就能够对deflate压缩后的文件进行缓冲
cache_vary on
[color=#000099]原文地址[/color][url=http://www.hiadmin.com/squid%e5%9f%ba%e6%9c%ac%e7%90%86%e8%ae%ba%e5%8f%8a%e4%bc%98%e5%8c%96%e7%a0%94][color=#0000ff]http://www.hiadmin.com/squid%e5%9f%ba%e6%9c%ac%e7%90%86%e8%ae%ba%e5%8f%8a%e4%bc%98%e5%8c%96%e7%a0%94[/color][/url]