一,基礎配置純靜態優化.
目前服務器平臺主要基於debian和ubuntu系統。
#基於linux-sysepoll優化
server.event-handler="linux-sysepoll"
server.max-fds默認是1024
修改 server.max-fds,大流量網站推薦2048.
2 stat() 緩存
stat() 這樣的系統調用,開銷也是相當明顯的.
緩存能夠節約時間和環境切換次數(context switches)
一句話,lighttpd.conf加上
server.stat-cache-engine = “fam”
lighttpd還另外提供simple(緩存1秒內的stat()),disabled選項.
相信沒人會選disabled吧.
3 常連接(HTTP Keep-Alive)
一般來說,一個系統能夠打開的文件個數是有限制的(文件描述符限制)
常連接佔用文件描述符,對非併發的訪問沒有什麼意義.
(文件描述符的數量和許多原因有關,比如日誌文件數量,併發數目等)
這是lighttpd在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
兩個值,可以減緩這種現象.
甚至可以關閉lighttpd keep-alive.
server.max-keep-alive-requests = 0
4 事件處理
對於linux kernel 2.6來說,沒有別的可說
lighttpd.conf中加上這一句足矣
server.event-handler = “linux-sysepoll”
另外,
linux 2.4 使用 linux-rtsig
freebsd 使用 freebsd-kqueue
unix 使用 poll
5 網絡處理
lighttpd 大量使用了 sendfile() 這樣一個高效的系統調用.
減少了從應用程序到網卡間的距離.
(同時也減少了lighttpd對cpu的佔用,這部分佔用轉嫁到內核身上了)
根據平臺,可以設置不同的參數.
server.network-backend = “linux-sendfile”
(linux)
freebsd: freebsd-sendfile
unix: writev
如果有興趣的話,也可以看看lighttpd在async io(aio)上的實現.
此外,網絡方面,核心的參數也需要適當進行修改,
這裏就不需要詳細說明了.
6 本文涉及lighttpd.conf 參數總結
以下適合linux 2.6
server.stat-cache-engine = “fam”
server.network-backend = “linux-sendfile”
server.event-handler = “linux-sysepoll”
server.max-keep-alive-requests = 0