返回   青蛙论坛 » IT论坛 » 操作系统类
用户名
密码
帮助 会员 日历 标记论坛为已读

回复
 
主题工具 显示模式
旧 11-20-2006, 02:04   #1
chyangwa
蝌蚪-小毛驴
 
chyangwa的头像
 
注册日期: Nov 2000
来自: 上海
帖子: 8,285
精华: 6
Lighttpd 配置与性能优化

Lighttpd 配置与性能优化

http://www.pc51.net/c_read11346.html


前提:还是针对高负载,静态页面,freebsd系统的web应用。 2O&fcge_>
如果非要在LSWS(LiteSpeed Web Server)和lighttpd中间做的选择的话,我觉得是困难的。从现存的网上资料中很难有个权威的说法。因为测试没有特别的标准。例如在当前情况下,web server的配置是不是达到最优,甚至当你只对一中webserver测试的时候,你也会发现同种配置下连续测试,他们的结果都可能在波动。所以有时候很可能分不清哪种配置是最优秀的,适合当前情况。在这种情况下只能经过大量的反复的实验和观察。 Z&@NmhX49
下面是LSWS官方网站的一个测试图,可以看出LSWS和lighttpd在keep alive情况下差不大,当然不排除他们对自己的web server的偏向,或则他们更熟悉自己的server彻底配置。 cW bqQ6]B
图片太大,显示不完,建议拽出来看。[url]http://www.litespeedtech.com/images/bench/ka.gif[url] 7 Iy~ sM
|! M?N>%
wp , l
PK C{G7c
就使用的技术而言,lighttpd使用了Linux 2.6+使用epoll,而在FreeBSD上使用了kqueue。默认的都是poll,而我们的系统是freebsd,很不幸的是,当我在bsd上使用kqueue特性时,测试的结果显示,效率明显变低。我没想明白为什么,c10k的文章我没有足够时间去读,可以做个参考。 MA(H,/
For more infomation in this topic take a look at http://www.kegel.com/c10k.html WmIUh"{
c&8I5se
再一个就是sendfile()技术,他能最小化应用程序所做的工作,直接把一个文件送到网卡。 adsf"'BU9
在Linux 2.6+上使用sendfile64,可见现在好多小的httpd都对Linux 2.6+支持的很好,比如tux。 8C# \
\'"[#T5;f
在针对我们的应用情况下,对配置文件进行一些修改。Time per request: 能达到0.65 [ms]左右相对于以前测的0.734[ms]左右,性能有很大提高。如果有大量的时间对每个性能指标进行测试,去掉不必要的模块和特性,应该在性能上还会有所提高,估计最好能到0.61[ms]左右。最近测试如下: ztsI6?z
lighttpd 配置文件:去掉了很多不必要的特性。 b% L\j]IQ
#######lighttpd.conf. VL#e`Z>[[
server.port = 7983 4-oB)9t
server.modules = ("mod_access") ?J7JIE0&X
server.document-root = "/usr/home/yangjian/lighttpd/doc/" }xjQbdp9
server.pid-file = "/usr/home/yangjian/lighttpd/lighttpd.pid" !4~2Q '
mimetype.assign = ( K;-k*N0
".html" => "text/html", zO=Vlve
".js" => "text/javascript", AI\MtttR
) {"l06d*\
server.max-keep-alive-requests =4000 @G7=(&vW
dir-listing.activate = "disable" X:z~HDkf
^BEF;4J=D
测试强度: ./ab -n 100000 -c 1000 http://192.168.241.109:7983/index.html O#c*|V,&
A(6\eVgx
Server Software: lighttpd/1.4.7 wrDe)\h,
Server Hostname: 192.168.241.109 "%(t S.d
Server Port: 7983 a L !:62K
|THj.H=O
Document Path: /index.html {j*B{kQ\
Document Length: 449 bytes {1_BFq)z
YoBT8]
Concurrency Level: 1000 UN<z_ 
Time taken for tests: 65.180092 seconds OucC d_VV
Complete requests: 100000 hPR)gDE&O
Failed requests: 0 Z 2QTs'W
Write errors: 0 3wRX=([
Total transferred: 68281158 bytes r| $9#w S2
HTML transferred: 44953431 bytes U+hk"
Requests per second: 1534.21 [#/sec] (mean) 4%-{sZ}4?F
Time per request: 651.801 [ms] (mean) E`ZxzC
Time per request: 0.652 [ms] (mean, across all concurrent requests) D:` YA;D
Transfer rate: 1023.01 [Kbytes/sec] received TBF(\_(X
MLMV}
LiteSpeed的测试都是在默认配置下。它的结果不太稳定,最好的记录是0.603ms,这是lighttpd所没有过的好成绩,但大多数情况下都在0.70左右,有好多次在0.76以上。我这里说的都是LiteSpeed的标准版,pro版是要花钱的性能当然要好些。LiteSpeed是同过web 管理的,这是它的一个比较好的特性。如果经过优化我想它和lighttpd应该还是不差上下的。 )w!k{ED
H,FU,x@W
我暂时先选择相对稳定点的lighttpd作为我们的web server,然后对它的配置和优化进行说明。Lighttpd配置文件很简单,相信大家配过apache的都能看明白。我就只对影响性能的指标挑出来讨论。参考文章http://www.lighttpd.net/documentation y6m4+_Z
@.8@jF5
可以看出我上面的那个配置文件非常简短。我去掉了所有不必要的特性。添加的模块只有mod_access,如果没有它访问是就会出现403错误。除了它之外系统默认启用的模块有 <P>k7~^
mod_indexfiles ,mod_dirlisting, mod_staticfile。但在默认已经编译进去的模块清单如下: l|b :l`B,V
对于这些已经编译进去的在启用时就非常简单了,enable一下就ok了。Lighttpd想添加一个功能一般情况下只需要添加一两行指令到配置文件中,比apache易配置多了。 ;7x2"f
Plugins: X~o}&5u
enabled: K\\ rd#
mod_access nBLWoA@sj
mod_accesslog B{67*4A$cd
mod_alias _(PC=r
mod_auth uV!&LHw
mod_cgi i )tHv(?0
mod_compress ykG1z#L ?
mod_dirlisting \f,<LA=b
mod_evhost =$j~d/Ez
mod_expire GSH[eZ|#`
mod_fastcgi )-4nQ|5,
mod_indexfiles -OP]gm+|H
mod_proxy VF>M<ZY1
mod_rrdtool [+u3Lf
mod_scgi :l$>@V@
mod_secdownload i]i4^'B
mod_setenv 92 FW [r
mod_simple_vhost Ac>~kbD
mod_staticfile Pvv?_ 1>S
mod_status {tkC}8XY
mod_userdir D60=d}#M
mod_usertrack K~5W"O/
mod_webdav R</eDkC2
disabled: FUTtC\
mod_cml e2r`[\K7c?
mod_mysql_vhost $y&1]e
mod_redirect #\!{w"u
mod_rewrite 4 7}o$&
mod_ssi }P{C9[W}C
mod_trigger_b4_dl tgVb
d$b=Hj@
Features: WDt]*>!.A
enabled: k39v<Pm
auth-crypt @#GypHh
compress-bzip2  zjnuU
compress-deflate j: ODI
compress-gzip phX}[; 2
large-files STcpm0rXo
network-ipv6 xi )"c#s
disabled: H5\^#P
auth-ldap H ' zd
network-openssl X0e ~1JW
regex-conditionals @@D`I}wu
stat-cache-fam .nj8r<@>^m
storage-gdbm >Ux=b} 
storage-memcache aln4H[`
webdav-properties DE,+/?d*|
每个模块的作用和我上次写的apache的性能优化中提到的大同小异。所以我想如果只保留核心功能,性能应该会提升一些的。配置选项: iHfhYa<J
server.chroot z!~@Eek=R
使用chroot提高安全性时,web服务器的root目录。建议使用。 )e KZmZE
S,!i eq p
server.username = "..." server.groupname = "..."  Cp6Hgda
放弃root权限。 . 0,].pBw
RHh[VcpU3
dir-listing.activate XT@@yQQB
如果没有找到index文件就列出目录。建议disable。 IO Nu(-j
M5ek;'Vg0
server.event-handler  +d_Bp%|
设置时间处理方式。Default: "poll"。Bsd上默认就可以,使用kqueue反而影响了效率。原因不明。以下是各种操作系统对应的方式: .NGC{2fe
OS Method Config-Value rvfR1_{f{
all select select Ilsj 2tS
Unix poll poll rW]TXX~7
Linux 2.4+ rt-signals linux-rtsig X +vUu%j&
Linux 2.6+ epoll linux-sysepoll g`h(^J
Solaris /dev/poll solaris-devpoll #[FUFN&
FreeBSD, ... kqueue freebsd-kqueue w !U>8HW
server.max-request-size B me|&D
maximum size in kbytes of the request (header + body) H{4bs!/
Default: 2Gb 8`=[2!^MX
AXN
server.max-worker 4^NfV7
lighttpd默认只启动一个进程工作,但也支持apache那样启动多个进程,我的实验显示启动多个进程同时工作时并不能提高性能。 1WAnrBU
bW=a d
server.max-keep-alive-requests 6.(f]d
这一条比较关键,对性能的影响比较大。在一个keep-alive会话终止连接前能接受处理的最大请求数。Default: 128,对一个高负载的应用来说是不够的。我用了4000。 &xn}]RK
= ycL
server.max-keep-alive-idle dX>0aaZ'
一个空闲keep-alive连接被丢弃前,存在的的最大秒数。Default: 30。 $Hc;mf'|[n
,9[7M[n
5HHCq *
server.error-handler-404 Vi$-M&Fc
页面找不到时候的处理,对性能没什么影响,指出来一下,例如: \Q\@t
server.error-handler-404 = "/error-404.php" -llx-`iE
G{A`lU 
server.max-fds k^{>]2mS
因为lighttpd是一个单线程(single-threaded)服务器,它的主要资源限制是文件描述符数目,默认值是1024。如果在一个高负载的站点上,可能你需要通过下面的设定增加这个限定值 b5bJjSb
server.max-fds = 2048 但这个限定只有在lighttpd做为root身份运行时才能生效。 x]h)5 `y
Aje;0^
'sx6K&D<j
connection.kbytes-per-second,server.kbytes-per-second 'DI@IQg7
还有值得一提的时lighttpd可以限制每个连接或则特定虚拟机的流量。 TS4hk;3
!dr^VR
62^:rW9u
compress.cache-dir,compress.filetype =07
如果文本稍微大点可以考虑使用压缩算法,减少带宽同时也能提高效率。例如: hEt-?u
compress.cache-dir = "/var/www/cache/" B.0 &{s*
compress.filetype = ("text/plain", "text/html") x TCNTs
rQ~'7 
lIVZL_X
server.stat-cache-engine = "fam" T]&@f<U:6
这一条能明显提升性能,stat() cache。一个stat调用代价可能是昂贵的。为它设一个cache能省时间又避免上下文切换。替代每次都stat()来确定文件的存在,它只stat()一次,然后会监视目录,如果目录不变,他里面的文件也就没有变化。我们的内存文件系统中有没必要保留,依情况而定。 @ oD~G5_"
server.stat-cache-engine = "fam" # either fam, simple or disabled .^"9&Sn (v
!BCAmGj
:2o E+
在FreeBSD上可能提升一些性能同过 启用accept-filters仅仅编译你的内核用下面选项:options ACCEPT_FILTER_HTTP 4x~3U-t
先写这么多,以后随着lighttpd应用再对内容进行丰富。欢迎讨论。
chyangwa离线中   回复时引用此帖
旧 11-20-2006, 02:38   #2
chyangwa
蝌蚪-小毛驴
 
chyangwa的头像
 
注册日期: Nov 2000
来自: 上海
帖子: 8,285
精华: 6
回复: Lighttpd 配置与性能优化

Lighttpd下配置虚拟主机

Lighttpd中支持下面这种配置方式:
[field] [operator] [value] {


}
其中,[field]可以是$HTTP[”host”],所以我们可以通过这个来在Lighttpd中配置虚拟主机。在lighttpd.conf文件中添加:
$HTTP[”host”] == “www.hlddn.com” {
server.name = “www.hlddn.com“
server.document-root = “/yourwebroot”
server.errorlog = “/yourwebroot/error.log”
accesslog.filename = “/yourwebroot/access.log”
}
就可以在你的lighttpd运行一个虚拟主机了,上面的几行很明了,不用多解释了。
Apache中有一个ServerAlias命令,作用就是例如域名www.hlddn.com的根目录是/www/hlddn/,域名aaa.hlddn.com的根目录也是/www/hlddn/,这样只需要在www.hlddn.com的虚拟主机中添加ServerAlias aaa.hlddn.com就可以了。
在lighttpd中更加简单,只需要将上面这个改成这样就行:
$HTTP[”host”] =~ “(^|\.)hlddn\.com” {

}
这样hlddn.com,www.hlddn.com,或者是aaa.hlddn.com都工作在同一个目录下了。具体的正则表达式是如何工作的就不多说了。
chyangwa离线中   回复时引用此帖
回复


主题工具
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭
论坛跳转



所有的时间均为北京时间。 现在的时间是 07:04.


NewvBB Core 1.1 Final - vBulletin v3.0.3
中文化与插件制作 NewVBB.com™ 2024。
友情连接        
摩托车.上海.中国        
         
         
         
         
         

上海市通信管理局
沪ICP备010502
沪ICP备05000578号