Lighttpd优化
# 1. 最大连接数
lighttpd基于线程,默认server.max-fds是1024,大流量网站推荐2048.
# 2. stat() 缓存
stat() 这样的系统调用,开销也是相当明显的.缓存能够节约时间和环境切换次数(context switches)
vim lighttpd.conf
server.stat-cache-engine = “fam” 还有simple(缓存1秒内的stat())、disabled(关闭)选项.
1
2
2
# 3.长连接
一般来说,一个系统能够打开的文件个数是有限制的(文件描述符限制),长连接占用文件描述符,对非并发的访问没有什么意义.(文件描述符的数量和许多原因有关,比如日志文件数量,并发数目等)。
这是lighttpd在keep-alive方面的默认值:
server.max-keep-alive-requests = 128
server.max-keep-alive-idle = 30
1
2
2
换言之,lighttpd最多可以同时承受30秒长的常连接,每个连接最多请求128个文件。但这个默认值确实不适合非并发这种多数情况。
lighttpd.conf 中减小 server.max-keep-alive-requests、server.max-keep-alive-idle 两个值,可以减缓这种现象。甚至可以关闭 lighttpd keep-alive。
server.max-keep-alive-requests = 0
1
# 4. 事件处理
对于Linux kernel 2.6来说,没有别的可说,在lighttpd.conf中加上这一句足矣
server.event-handler = “linux-sysepoll”
1
另外,
- linux 2.4 使用 linux-rtsig
- freebsd 使用 freebsd-kqueue
- unix 使用 poll
# 5.网络处理
lighttpd 大量使用了 sendfile() 这样一个高效的系统调用,减少了从应用程序到网卡间的距离。(同时也减少了lighttpd对cpu的占用,这部分占用转嫁到内核身上了)
根据平台,可以设置不同的参数:
- linux:server.network-backend = “linux-sendfile”
- freebsd: =freebsd-sendfile
- unix:=writev
如果有兴趣的话,也可以看看lighttpd在async io(aio)上的实现.
适合linux 2.6的lighttpd.conf参数总结:
server.stat-cache-engine = “fam”
server.network-backend = “linux-sendfile”
server.event-handler = “linux-sysepoll”
server.max-keep-alive-requests = 0
1
2
3
4
2
3
4
上次更新: 2022/06/12, 15:48:09