当前mod_fastcgi请求分配算法是只考虑fastcgi进程当前请求数,没有考虑累计请求数,因此前几个fastcgi进程会特别忙,后面fastcgi进程非常闲
打完补丁,重新编译,在lighttpd.conf中加载module mod_status,设置 status.statistics-url = "/lighttpd_status"。然后访问http://ip/lighttpd_status 可 mod_fastcgi状态
讲座ppt下载。
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) 单进程和多线程。单进程适合现代的硬件和软件;多线程的弱势在于锁:一般多线程使用多个全局锁,当请求数量超过一定值后,全局锁会导致性能急剧下降;多线程的扩展性比单进程差不少。
多线程适合不同线程做不同工作,或者请求数量可控、且不高的情况
9) nginx 和 lighttpd对比
i) nginx 各模块结合比较紧密,效率比lighttpd高些
ii) nginx 代码更新频繁,比lighttpd好不少
iii) nginx 强项是做proxy,而且proxy种类也比lighttpd多,实际也见到不少这样的使用案例。
一般使用 lighttpd 和 nginx 差别不大,具体用哪个看个人偏好
应火炬的邀请,6月28日(星期天)下午2:30我将在 第五期 beta技术沙龙上做 lighttpd和modcache的技术讲座,内容丰富。
地点是西直门旁的奇遇花园咖啡馆,现场可容纳不超过100人。
讲座后还有Q&A环节,欢迎有兴趣的童鞋来现场捧场,就lighttpd和modcache的方方面面提问、交流。
讲座免费,无需提前报名,直接到讲座地点听即可
奇遇花园咖啡馆地理位置

modcache v1.7.0 发布后,在使用过程中感觉到压缩内容的处理不大顺畅。因此发布v1.8.0版本,以改进压缩内容的处理逻辑
处理逻辑的改动:
- v1.7.0的gzip输出功能是需要后端服务器的支持,v1.7.0会区分后端服务器提供的压缩和非压缩内容,但自己并不做压缩
- v1.8.0中改成由modcache做内存缓存的压缩,而本地文件的压缩可由mod_compress提供,后端服务器不需要压缩输出内容
具体配置的改动:
- 删除 'support-accept-encoding' 和 ‘try-gzip-deflate-only' 两个选项
- 增加 'memory-compress' 和 'ignore-vary' 两个选项
'memory-compress' 选项就是压缩内存中缓存的未压缩内容,当客户端发出带"Accept-Encoding: gzip, deflate"这样的请求时,modcache会输出gzip压缩后的内容,以达到节省带宽的目的
'ignore-vary' 选项让modcache忽略后端服务器中的“Vary”输出。根据RFC,当后端服务器输出带“Content-Encoding: gzip”的内容时,应该同时输出"Vary: Accept-Encoding"。但有部分http server 在不带“Content-Encoding: gzip”时也输出“Vary: Accept-Encoding"头,此时就需要这个选项忽略它
modcache 1.7.0 新增加的重大功能是可以把缓存存到内存里,而不只是本地硬盘。这个功能适合缓存小文件,比如小图片,JS,CSS,html文件。实际系统运行对比squid的nullfs,性能提高了5~10倍,还是不错的。
新增加的配置项是:
- cache.max-memory-size,单位是Mbytes,缺省是256(256M内存)。modcache使用的内存缓存不会超过这个数值
- cache.lru-remove-count,缺省是256。这个参数基本不用动
原来的cache.support-accept-encoding选项被取消了。
refresh-pattern也增加了三个选项:
- use-memory:用内存作为缓存空间
- support-accept-encoding:支持缓存压缩后的内容
- use-gzip-deflate-only:对于带“Accept-Encoding"的请求,如果没有压缩后的缓存内容,则modcache不吐未压缩的内容,而把请求传递到后端服务器;
举例:
一: 图片缓存服务器
cache.max-memory-size = 2000 #maxium 2000M
cache.refresh-pattern = (
"\.(?i)(jpg|bmp|jpeg|gif|png|ico)$" => "0 use-memory",
"." => "120 no-cache"
)
二:页面缓存服务器
cache.max-memory-size = 1500 #maxium 1500M
cache.refresh-pattern = (
"\.(?i)(jpg|bmp|jpeg|gif|png|ico)$" => "0 use-memory",
"\.(?i)(css|js)$" => "1440 use-memory support-accept-encoding",
"\.(?i)(html|htm)$" => "10 use-memory support-accept-encoding",
"." => "120 no-cache"
)
如果后端服务器配置了mod_deflate,则可以改成:
cache.max-memory-size = 1500 #maxium 1500M
cache.refresh-pattern = (
"\.(?i)(jpg|bmp|jpeg|gif|png|ico)$" => "0 use-memory",
"\.(?i)(css|js)$" => "1440 use-memory support-accept-encoding use-gzip-deflate-only",
"\.(?i)(html|htm)$" => "10 use-memory support-accept-encoding use-gzip-deflate-only",
"." => "120 no-cache"
)