2006年08月07日
Squid优化(一)

Hot!几个SQUID重要参数:

maximum_object_size 是 能cache最大的文件大小。对应wmv,rm文件,建议设置为32768 kB
maximum_object_size_in_memory 是在内存中cache的最大文件大小。
cache_mem 是SQUID可用到的最大内存。经实践,4G内存的服务器用2G;超过2G导致SQUID运行不稳

首先要分析SQUID所cache内容:

运行

squidclient -p 80 cache_object://localhost/info

能看到如下内容:

Storage Swap size: 7549104 KB
Storage Mem size: 418804 KB
Mean Object Size: 160.46 KB

Mean Object Size是平均内容大小,一般要把maximum_object_size_in_memory设置成离它最近的128的倍数。在这个例子中maximum_object_size_in_memory 的值应该是256kB。

cache_mem 一般设置成服务器内存的一半或更多,只要运行过程中LINUX没有使用SWAP就可以。

再就是按业务分SQUID。
比如某个论坛,用户能上载图片和视频;当然我们要把上载的图片、视频放在单独的域名上,比如img.example.com, video.example.com;这两个域名只提供静态文件服务。

根据统计,图片的平均大小在100KB,视频的平均大小在4M,差别是很大,应该建两个squid分别作图片和视频的CACHE。图片SQUID的 maximum_object_size_in_memory 设置为256KB,视频的SQUID的maximum_object_size_in_memory设置为8196KB。

Squid优化(2)

Hot!探讨动态内容的CACHE。

BBS,论坛是典型动态内容,要保证内容更新及时的同时,提高访问速度,降低数据库负担不是个简单任务。经实践发现如下办法取得很好效果:

1) 配置SQUID,对动态内容强制CACHE,用到的配置参数是refresh_pattern

refresh_pattern ^/forum/viewthread.php 1440 1000% 1440 ignore-reload

/forum/viewthread.php的内容将强制保持1天

2) 修改论坛程序在用户回复帖子后,向SQUID发送PURGE命令清除相应帖子的页面CACHE,保证失效性
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~实现过这一功能,但是有时候生效,有时候无效,还未进一步查明原因.(Edit by Sean)  

3) 有些频繁更新的页面可以不CACHE,用no_cache参数

acl no_forum_cache urlpath_regex ^/forum/forumdisplay.php<br />no_cache DENY no_forum_cache

差不多学习了2周的squid,向高手请教,网上查找资料,学习例子,现在做个小小的总结。

squid这东西有2个用处:1、代理服务器;2、web服务器缓存。我学习的是后者。

什么安装,目录结构就不多说了

说一说配置的注意事项:
————————————————-
http_port 80
————————————————-
squid监听的端口,不能和服务器上目前的服务端口有冲突。需要特别注意,当时吃了不少亏。

————————————————-
cache_mem 32 MB
maximum_object_size 32768 KB
maximum_object_size_in_memory 16 KB
cache_dir ufs /data/squid/var/cache 500 16 256
————————————————–
存储策略,目前还没有深入涉及到,以后再看。

—————————————–
refresh_pattern
—————————————–
关于refresh_pattern,可以参见阙老大的文章,受益匪浅,过一会儿转过来,哈哈。

—————————————–
acl
http_access
—————————————–
第一个制定位置/端口/域名,第二个制定是否allow还是deny!!
在这里吃过亏,记牢点!!恩恩。

—————————————–
httpd_accel_port 8080
httpd_accel_single_host off
httpd_accel_with_proxy off
httpd_accel_uses_host_header on
——————————————
以上为真正的web服务器的运行端口。

—————————————–
acl PURGE method PURGE
acl llhost src 127.0.0.1/255.255.255.255
http_access allow PURGE llhost
—————————————–
PURGE!!掉一个页面咯!

启动:./squid -Cd1
修改:./squid -k reconfigre
暂停:./squid -k kill

如何去purge一个页面呢?
1、使用squidclient
./squidclient -p 80 mgr:objects   
查看缓存了哪些页面
./squidclient -p 80 -m purge http://*.*.*.*:8080/XXX.jsp
purge某页
2、发送http请求
——————————
PURGE /XXX.jsp HTTP/1.1
Host: *.*.*.*
Connection: close
——————————
这个为http头请求;编写代码
Socket server=new Socket(ipaddr,iport);
BufferedWriter write = new BufferedWriter(new OutputStreamWriter(server.getOutputStream()));
write.write(purgestr);
write.flush();
write.close();
server.close();

就可purge掉页面!!恩恩。

南戴河之旅

第一次看到了海,海水还算清澈,但是不美。

吃了螃蟹、虾,但是不好吃。