squid纯内存缓存

看见网上不少介绍squid的使用经验,说可以用ramdisk/tmpfs内存文件系统来加速squid. 个人认为完全没有必要,直接简单配置一下,就可以让Squid直接充分利用大内存:
maximum_object_size 32768 KB
cache_mem 1512 MB # Cache使用的最大内存
maximum_object_size_in_memory 128 KB # Cache在memory中最大Object的大小
memory_pools_limit 150 MB # 小对象内存池的大小
cache_dir null /tmp # 使用null disk
一些需要注意的事项: squid在编译的时候,要支持nullfs. maximum_object_size_in_memory应该尽量大于最大的object的尺寸,但是也不要太大,否则会影响内存分配的效率.

考虑一下实际应用的情况: 平均页面对象都不是很大,对象个数也不是很多,同时又有充足的内存余量,内容跟新还算频繁,这个时候,1.5G和20G或者40G的cache的请求命中率其实相差非常细微,不过是99%和99.9%的区别,这个时候,完全有理由,抛下缓慢的disk cache,直接使用memory cache,这样不但能有效降低系统load,还能使squid自身更加轻快便捷.


 

Comments»

1.
Frank Liu - January 10, 2007

非常好

2.
slls - January 16, 2007

受教!
但不知cache_mem和memory_pools_limit的大小是何关系。请指教!
谢谢!

3.
scaner - January 20, 2007

我以前对memory_pool_limit理解也有错误, memory_pool_limit并不是小对象池的大小,相当于malloc的cache,squid并不直接对释放的对象调用free操作,而是等到这个大小超过到这个大小超过memory_pool_limit才会真正释放. 感觉比较合适的大小是cache_mem + memory_pool_limit < 实际内存量, memory_pool_limit在150M左右就差不多了.当然还有为系统别的程序留一点余量。比如说如果是2G内存我的cache_mem是 1648M,memory_pool_limit是120M

4.
charles
- March 10, 2007

不知道你有没有留意到,如果用 null 方式的存储,全部放内存后,SQUID 的 response time 会变成非常高。

在我的应用,是 2ms 升到 30ms,这有可能是因为 SQUID 主进程不单止要接受请求,还要去从存储(null 的方式是存在内存)里面查找相应的数据,再返回。

而用 aufs 或 diskd 方式,squid 可以马上响应下一个请求,而将查找的工作交给 diskd 进程去处理。

5.
scaner - March 13, 2007

真还没注意过这个现象。30ms这个好像有点夸张啊,我现在一个主squid的峰值请求处理数能到1200hits/s了。对象信息都是保存在内存中的,直接内存处理,再怎么也要比aufs/diskd再倒一次手要快很多吧,我的意思是说,有submit任务到aufs/diskd的功夫,内存查找早就搞定了。

6.
charles
- March 19, 2007

你可能架一个 MRTG 来查看一下就知道了。只要压力很大,response 的值就会非常高。

在我的应用中,也是将数据保存到内存里面的,使用 diskd 直接读写 /dev/shm 等。

7.
scaner - March 19, 2007

赫赫,你看得是那一个图阿?

client_http.requests = 1271.172566/sec
client_http.hits = 1209.615937/sec
client_http.all_median_svc_time = 0.000000 seconds
client_http.miss_median_svc_time = 0.000911 seconds
client_http.nm_median_svc_time = 0.000000 seconds
client_http.nh_median_svc_time = 0.001789 seconds
client_http.hit_median_svc_time = 0.000000 seconds

8.
charles
- March 31, 2007

你先确定一下,是不是用了 epoll ?

如果是用了 epoll,我觉得有这样的响应时间,我觉得正常。在不支持 epoll 的环境下,squid 的响应时间会慢,而且 CPU 占用较高。

另外,我现在在关注这个:http://varnish.projects.linpro.no

用squid就是因为epoll阿.没有epoll连接数一多CPU就跑上去了.varnish这个东西看着不错啊,不过看了上面一个评测的链接,lighttpd居然是吞吐量最强的,寒一个.还是祈求上天Light 1.5赶快release吧.

9.
scaner - April 3, 2007
此条目发表在article分类目录,贴了标签。将固定链接加入收藏夹。