Lighttpd有硬盘级别的cache-(mod_cache)和内存级别的cache(mod_mem运维
Lighttpd有硬盘级别的cache-(mod_cache)和内存级别的cache(mod_mem_cache),内存级别的cache是国人的产品,我喜欢用lighttpd就是因为它具有2种选择的cache,像我的实际需求,由于系统存在很多图片,但是容量不大,一般都少于40k,图片,js,CSS等我都喜欢放到内存里面,毕竟磁盘i/o是一个真正的计算机瓶颈制造者,而一些其他资源cache就放到硬盘级别的cache
1) squid和modcache的对比:squid是个功能全面的系统、但效率不高;modcache是功能不多,但效率高的缓存系统;请求数不多的情况下 (<100 req/s),两者差别不大;请求数超过100 req/s,modcache完胜 2) Linux系统的优化也很重要,比如打开最大文件数等等。不一定非要改linux kernel source,参数调优事半功倍 3)如何用尽多核CPU。首先要用多个进程(server.max-workers=4);用Linux的setaffinity系统调用把CPU0空闲出来,再根据服务情况选择是否把缓存加载到内存中;最后就是给足够大的负载了(大部分时候瓶颈在IO上,而不在CPU上)。 其实lighttpd在请求高(>1k req/s)的情况下,CPU也不忙,比Squid好太多;也就是说lighttpd不属于CPU计算量大的程序,而大部分时间在处理、等待网络IO,磁盘IO 4) keepalive 尽量关闭。lighttpd 1.4.23新加的server.defer-accept选项不错,可设置成server.defer-accept=30 5) 小文件缓存到内存;大文件放硬盘,硬盘没必要用raid 6) 加载 mod_status,设置 status.statistics-url = "/lighttpd_status"。然后访问http://ip/lighttpd_status 可看到modcache 的缓存命中率 7) modcache 使用两级hashmap管理内存缓存,效率不错,支持上千万的项目快速存取 8) 单进程和多线程。单进程适合现代的硬件和软件;多线程的弱势在于锁:一般多线程使用多个全局锁,当请求数量超过一定值后,全局锁会导致性能急剧下降;多线程的扩展性比单进程差不少。 多线程适合不同线程做不同工作,或者请求数量可控、且不高的情况
以下是关键配置
#模块的加载-------------------------------------------------------
server.modules = (
"mod_compress", "mod_access", "mod_status", "mod_mem_cache", #memcache 内存级的cache "mod_cache", #disk cache 硬盘级别的cache "mod_proxy"
#模块的排序是有规则的,如果不合理排序,容易产生问题
#硬盘级别cache的设置----------------------------------------
#模块参数说明:http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModCache
#mod_mem_cache作者的最新主页
######## disk cache ######### cache.support-queries = "enable" #cache允许查询 cache.bases = ("/data/cache") #cache存放的根目录 cache.refresh-pattern = ( #以下是允许cache的文件类型以及cache的有效期,单位:分) "/.(?i)(flv)$" => "0 fetchall-for-range-request flv-streaming", "/.(?i)(js|css|xml)$" => "240", # update js/css/xml every 4 hours "/.(?i)(htm|html|shtml)$" => "30 update-on-refresh", #update html/htm/shtml every 30 minutes and on refresh requests "/.(?i)(jpg|bmp|jpeg|gif|png)$" => "2880", "/.(?i)(rar|zip|wmv|avi|mp3|ape|rm|mpeg|mpg|wma|asf|rmvb|flv)$" => "0 fetchall-for-range-request", "." => "30 update-on-refresh" )
#内存级别的cache设置-----------------------------------------------
#模块详细参数说明:http://redmine.lighttpd.net/wiki/1/Docs:ModMemCache ######## memory cache ############### mem-cache.enable = "enable" mem-cache.filetypes = ("application/x-javascript", "text/css","text/javascript","image/jpeg","image/gif","image/png") #定义内存cache的文件类型 mem-cache.max-memory = 64 #允许使用的最大内存大少,单位:M mem-cache.max-file-size = 1024 #单个文件大小 ,单位:KB mem-cache.expire-time = 180 #过期时间,默认单位:分
#调度目标的web-server列表
proxy.server = ( "/" => ( ( "host" => "192.168.10.1","port" => 80)
( "host" => "192.168.10.2","port" => 80)
( "host" => "192.168.10.3","port" => 80)
) )
结果测试:用iE装了httpwatch后抓包查看,首先第一次访问proxy_cache后,关掉,接着清空本地cookies,再次打开,速度是几何级别的提升,页面一下子刷出来了,查看http_header时,发现如下关键字:
#硬盘cache的命中
(Status-Line) HTTP/1.1 200 OK Accept-Ranges bytes Cache-Control max-age=13873 Content-Length 2974 Content-Type application/x-javascript Date Thu, 22 Jul 2010 11:26:54 GMT ETag "0f3b8da1939ca1:4aa7" Expires Thu, 22 Jul 2010 15:18:07 GMT Last-Modified Sat, 19 Sep 2009 11:10:54 GMT Server lighttpd/1.4.26 X-Cache HIT #命中缓存 X-Powered-By ASP.NET
#内存cache的命中
(Status-Line) HTTP/1.1 200 OK Cache-Control max-age=172721 Content-Length 13952 Content-Location http://192.168.3.120/uploads/userup/2192/myface.jpg #我的proxy_cache地址 Content-Type image/jpeg Date Thu, 22 Jul 2010 11:19:29 GMT ETag "22bc68d74227cb1:4e86" Expires Sat, 24 Jul 2010 11:18:10 GMT Last-Modified Mon, 19 Jul 2010 13:03:54 GMT Server lighttpd/1.4.26 X-Cache TO MEMCACHE #命中内存 X-Powered-By ASP.NET
小结:这只是一般情况下的案例测试,具体需要涉及实际情况,例如php动态文件,媒体文件等的cache,还有图片网站或者视频网站等设置cache内容,过期时间等均要不同设置才能做到最大限度优化,不能一视同仁。
本文由来源 21aspnet,由 javajgs_com 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。