Lighttpd 配置與效能最佳化

來源:互聯網
上載者:User
文章目錄
  • Lighttpd 配置與效能最佳化
Lighttpd 配置與效能最佳化

 前提:還是針對高負載,靜態頁面,freebsd系統的web應用。 Ke-&E Ghp 
如果非要在LSWS(LiteSpeed Web Server)和lighttpd中間做的選擇的話,我覺得是困難的。從現存的網上資料中很難有個權威的說法。因為測試沒有特別的標準。例如在當前情況下,web server的配置是不是達到最優,甚至當你只對一中webserver測試的時候,你也會發現同種配置下連續測試,他們的結果都可能在波動。所以有時候很可能分不清哪種配置是最優秀的,適合當前情況。在這種情況下只能經過大量的反覆的實驗和觀察。 
下面是LSWS官方網站的一個測試圖,可以看出LSWS和lighttpd在keep alive情況下差不大,當然不排除他們對自己的web server的偏向,或則他們更熟悉自己的server徹底配置。

就使用的技術而言,lighttpd使用了Linux 2.6+使用epoll,而在FreeBSD上使用了kqueue。預設的都是poll,而我們的系統是freebsd,很不幸的是,當我在bsd上使用 kqueue特性時,測試的結果顯示,效率明顯變低。我沒想明白為什麼,c10k的文章我沒有足夠時間去讀,可以做個參考。
For more infomation in this topic take a look at http://www.kegel.com/c10k.html 

再一個就是sendfile()技術,他能最小化應用程式所做的工作,直接把一個檔案送到網卡。
在Linux 2.6+上使用sendfile64,可見現在好多小的httpd都對Linux 2.6+支援的很好,比如tux。

在針對我們的應用情況下,對設定檔進行一些修改。Time per request: 能達到0.65 [ms]左右相對於以前測的0.734[ms]左右,效能有很大提高。如果有大量的時間對每個效能指標進行測試,去掉不必要的模組和特性,應該在效能上還會有所提高,估計最好能到0.61[ms]左右。最近測試如下:
lighttpd 設定檔:去掉了很多不必要的特性。 J-mgEUci 
#######lighttpd.conf.
server.port           = 7983 ,
server.modules = ("mod_access") 
server.document-root         = "/usr/home/yangjian/lighttpd/doc/"
server.pid-file         = "/usr/home/yangjian/lighttpd/lighttpd.pid"
mimetype.assign         = ( 
".html"       =>     "text/html",
".js"       =>     "text/javascript",
)

server.max-keep-alive-requests =4000
dir-listing.activate = "disable"

測試強度: ./ab -n 100000 -c 1000 http://192.168.241.109:7983/index.html

 erver Software:     lighttpd/1.4.7 2
Server Hostname:     192.168.241.109

Server Port:         7983 k[4jjd6 

Document Path:       /index.html
Document Length:     449 bytes

Concurrency Level:     1000
Time taken for tests:   65.180092 seconds
Complete requests:     100000
Failed requests:     0
Write errors:       0
Total transferred:     68281158 bytes
HTML transferred:     44953431 bytes
Requests per second:   1534.21 [#/sec] (mean)
Time per request:     651.801 [ms]cpx 
Time per request:     0.652 [ms] (mean, across all concurrent requests)
Transfer rate:       1023.01 [Kbytes/sec] received

LiteSpeed的測試都是在預設配置下。它的結果不太穩定,最好的記錄是0.603ms,這是lighttpd所沒有過的好成績,但大多數情況下都在 0.70左右,有好多次在0.76以上。我這裡說的都是LiteSpeed的標準版,pro版是要花錢的效能當然要好些。LiteSpeed是同過web 管理的,這是它的一個比較好的特性。如果經過最佳化我想它和lighttpd應該還是不差上下的。
8 'D]i 
我暫時先選擇相對穩定點的lighttpd作為我們的web server,然後對它的配置和最佳化進行說明。Lighttpd設定檔很簡單,相信大家配過apache的都能看明白。我就只對影響效能的指標挑出來討論。參考文章http://www.lighttpd.net/documentation
]T Bi8 
可以看出我上面的那個設定檔非常簡短。我去掉了所有不必要的特性。添加的模組只有mod_access,如果沒有它訪問是就會出現403錯誤。除了它之外系統預設啟用的模組有
mod_indexfiles ,mod_dirlisting, mod_staticfile。但在預設已經編譯進去的模組清單如下: ZBFxS p 
對於這些已經編譯進去的在啟用時就非常簡單了,enable一下就ok了。Lighttpd想添加一個功能一般情況下只需要添加一兩行指令到設定檔中,比apache易配置多了。
Plugins:
enabled:
mod_access  
mod_accesslog
mod_alias  
mod_auth
mod_cgi
mod_compress
mod_dirlisting
mod_evhost
mod_expire
mod_fastcgi  
mod_indexfiles
mod_proxy
mod_rrdtool
mod_scgi
mod_secdownload
mod_setenv
mod_simple_vhost
mod_staticfile
mod_status
mod_userdir
mod_usertrack
mod_webdav
disabled:
mod_cml
mod_mysql_vhost
mod_redirect
mod_rewrite

Features:
enabled: ;
auth-crypt
compress-bzip2
compress-deflate
compress-gzip
large-files
network-ipv6
disabled:
auth-ldap
network-openssl
regex-conditionals
stat-cache-fam 1
storage-gdbm 9
storage-memcache
webdav-properties
每個模組的作用和我上次寫的apache的效能最佳化中提到的大同小異。所以我想如果只保留核心功能,效能應該會提升一些的。配置選項:
server.chroot
使用chroot提高安全性時,web伺服器的root目錄。建議使用

server.username = "..." server.groupname = "..."
放棄root許可權。 {

dir-listing.activate {
如果沒有找到index檔案就列出目錄。建議disable。
 
server.event-handler  
設定時間處理方式。Default: "poll"。Bsd上預設就可以,使用kqueue反而影響了效率。原因不明。以下是各種作業系統對應的方式: 
OS Method Config-Value *w                 
all 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
server.max-request-size
maximum size in kbytes of the request (header + body)
Default: 2Gb 

server.max-worker
lighttpd預設只啟動一個進程工作,但也支援apache那樣啟動多個進程,我的實驗顯示啟動多個進程同時工作時並不能提高效能。

server.max-keep-alive-requests
這一條比較關鍵,對效能的影響比較大。在一個keep-alive會話終止串連前能接受處理的最大請求數。Default: 128,對一個高負載的應用來說是不夠的。我用了4000。
fb4q79m1u 
server.max-keep-alive-idle
一個空閑keep-alive串連被丟棄前,存在的的最大秒數。Default: 30。

頁面找不到時候的處理,對效能沒什麼影響,指出來一下,例如:

server.max-fds
因為lighttpd是一個單線程(single-threaded)伺服器,它的主要資源限制是檔案描述符數目,預設值是1024。如果在一個高負載的網站上,可能你需要通過下面的設定增加這個限定值
server.max-fds = 2048 但這個限定只有在lighttpd做為root身份運行時才會生效。

onnection.kbytes-per-second,server.kbytes-per-second

還有值得一提的時lighttpd可以限制每個串連或則特定虛擬機器的流量。

compress.cache-dir,compress.filetype
如果文本稍微大點可以考慮使用壓縮演算法,減少頻寬同時也能提高效率。例如:
compress.cache-dir = "/var/www/cache/"
compress.filetype = ("text/plain", "text/html")

server.stat-cache-engine = "fam"
這一條能明顯提升效能,stat() cache。一個stat調用代價可能是昂貴的。為它設一個cache能省時間又避免環境切換。替代每次都stat()來確定檔案的存在,它只stat ()一次,然後會監視目錄,如果目錄不變,他裡面的檔案也就沒有變化。我們的記憶體檔案系統中有沒必要保留,依情況而定。
server.stat-cache-engine = "fam"   # either fam, simple or disabled

在FreeBSD上可能提升一些效能同過 啟用accept-filters僅僅編譯你的核心用下面選項:options   ACCEPT_FILTER_HTTP
先寫這麼多,以後隨著lighttpd應用再對內容進行豐富。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.