squid纯内存缓存 November 20, 2006

原贴:http://blog.scaner.i.thu.cn/index.php/2006/11/20/squid-pure-memory-cache/

squid纯内存缓存 November 20, 2006

Posted by scaner in : Linux, Web , trackback

看见网上不少介绍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

9. scaner - April 3, 2007

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

 

你可能感兴趣的:(squid)