lighttpd默认的并不适合我们的一些应用.因此需要进行修改.编辑/etc/lighttpd/lighttpd.conf文件.
1.事件处理
对于linux kernel 2.6来说,没有别的可说
lighttpd.conf中加上这一句足矣
server.event-handler = "linux-sysepoll"
2.stat() 缓存
stat() 这样的系统调用,开销也是相当明显的.
缓存能够节约时间和环境切换次数(context switches),此项有三个选项:fam,simple(缓存1秒内的stat()),disabled.一般我们较多使用前两项.
在lighttpd.conf加上
server.stat-cache-engine = "fam"
3.网络处理
lighttpd 大量使用了 sendfile() 这样一个高效的系统调用.
减少了从应用程序到网卡间的距离.(同时也减少了lighttpd对cpu的占用,这部分占用转嫁到内核身上了)
server.network-backend = "linux-sendfile"
(linux)
freebsd: freebsd-sendfile
unix: writev
根据平台,可以设置不同的参数.如下所示
OS Method Config Valueall | select | select |
Unix | poll | poll |
Linux 2.4+ | rt-signals | linux-rtsig |
Linux 2.6+ | epoll | linux-sysepoll |
Solaris | /dev/poll | solaris-devpoll |
FreeBSD, ... | kqueue | freebsd-kqueue |
NetBSD | kqueue | kqueue |
4.常连接(HTTP Keep-Alive)
一般来说,一个系统能够打开的文件个数是有限制的(文件描述符限制)
常连接占用文件描述符,对非并发的访问没有什么意义.
(文件描述符的数量和许多原因有关,比如日志文件数量,并发数目等)
server.max-keep-alive-requests = 128
server.max-keep-alive-idle = 30
换言之,lighttpd最多可以同时承受30秒长的常连接,每个连接最多请求128个文件.
但这个默认值确实不适合非并发这种多数情况.
在lighttpd.conf 中减小
server.max-keep-alive-requests
server.max-keep-alive-idle
两个值,可以减缓这种现象.
对于动态程序来说,Keep Alive的意义不大,可以关闭。
server.max-keep-alive-requests = 0
5.启动的进程数
server.max-worker
lighttpd默认只启动一个进程工作,但也支持apache那样启动多个进程,我的实验显示启动多个进程同时工作时并不能提高性能。
6.server.max-fds
因为lighttpd是一个单线程(single-threaded)服务器,它的主要资源限制是文件描述符数目,默认值是1024。如果在一个高负载的站点上,可能你需要通过下面的设定增加这个限定值
server.max-fds = 2048
但这个限定只有在lighttpd做为root身份运行时才能生效。
7.server.max-connections
该项默认等同于server.max-fds
Lighttpd关于本节的优化资料
http://trac.lighttpd.net/trac/wiki/Docs%3APerformance
下面是本站的配置,您可参详一下.
server.event-handler = "linux-sysepoll"
server.stat-cache-engine = "fam"
server.network-backend = "linux-sendfile"
server.max-keep-alive-requests = 4
server.max-keep-alive-idle = 4
server.max-worker = 15
server.max-fds = 4096
server.max-connections = 4096