这两天试用了lighttpd来代替bbs使用的apache,印象深刻

转载 2007年10月03日 16:09:00
原贴:http://bbs.sjtu.edu.cn/mgb/post/35/805

lighttpd

这两天试用了lighttpd来代替bbs使用的apache,印象深刻


bbs的在使用fweb之后一直使用 unix下的标准服务器apache作为web服务器。但是apache表现却不怎么令人满意。因为使用了php,所以还是用apache的1.3版本。 但是由于并发很高,导致随时有200+apache进程在运行,而且每个进程占用的内存随时间增加越来越多(可能是php的问题)。最后可能占用超过 700M的内存。同时apache导致系统用于nice的cpu也很高,一般在10%-20%之间。也许可以通过一些设置,比如静态文件的缓存时间,减少 每个apache进程的服务次数。这些问题是由于apache的prefork工作模式有关。每个apache进程只能同时服务于一个http连接。这种 模式好处在于每个进程不互相干扰,稳定性好;缺点也建立在优点之上,就是占用资源多,即使每个进程只使用2M内存(如果使用了php,这点内存根本不 够),100的并发连接就用掉200M的内存。不要以为100的并发很难达到,在低速连接占多数的时候,20req/s就能达到100的并发。即使在高速 连接占多数的情况(比如bbs),并发也是req/s的两倍左右。在使用apache的时候,bbs的web高峰期连接大概在150req/s,即使关掉 keepalive,还是要使用200多个进程来服务。
为了解决这个问题,我试用了其它一些http服务软件。很多短小精悍的,比如thttpd,boa之类的,不过大多不能支持fastcgi,也就不能用了。剩下有两个不错,一个是LiteSpeed Web Server(http://freshmeat.net/projects/lsws/), 还有一个就是lighttpd。先说LiteSpeed,这个不是开源软件,但标准版非商业使用是免费的,当然,只有二进制版本。这个软件速度稳定性都不 错,而且管理界面友好(web管理界面,他的配置文件是xml,很难配置),而且支持的功能也不少,文档比较齐全。但配置起来却让我摸不着头脑,总是不能 按照预期想法运行,由于没有形成一个社区,网上资源也很少,最后只能放弃。
lighttpd(www.lighttpd.net) 是一个开源软件,历史只有两三年。但功能不弱,我想用到的fastcgi,url rewrite都有,而且最重要的是,性能很强劲。在默认模式下,lighttpd使用poll()作为event handler,如果在linux2.4下,还可以选择rtsig作为event handler。如果不使用大文件(>4G)支持,lighttpd使用sendfile()来发送文件,完全的zero-copy。如果他的功能 还不能满足你的要求,你甚至可以自己写一个plugin,满足需求。
缺点就是bug比较多,软件并不稳定,而且文档太简略。尤其是使用内存,很难 说清楚具体使用量,一般在10-20M(繁忙站点),但有时候会突发到100多M,并稳定下来。不过相对apache的使用量,这个已经不算多。同时,软 件不稳定也很让人头痛,比如突然segfault,对于一个繁忙站点,这个是不能接受的!文档简略也很让人头痛,有些功能需要你自己猜测才懂得怎么配置。
不过总得来说,试用下来的感觉很好,如果配置得当,在相同并发下,使用的cpu和内存远小于apache。比如bbs,使用lighttpd后网页速度明显加快,高峰时期达到300+req/s,并发600+。但只使用了20多M内存,4%cpu。
具体配置可以参考网上的资料,下面说说要注意的地方:
1,编译的时候比较奇怪,我至今没弄清楚怎么选定只编译特定的模块。看了一下configure文件,大概是只要相应的库存在,就会编译相应的模块。比如如果有pcre的dev文件,就会编译rewrite模块。我只能放弃编译的静态版本的lighttpd的想法。
2,它的Conditional Configuration非常有用,可以实现很多想法。比如限制php只在特定目录下可以使用。简单的虚拟主机。不过似乎$HTTP["url"]的块里面不能使用mod_rewrite,只能二选其一。
3,lighttpd支持监听多端口,不过配置比较奇异,要使用Conditional Configuration。比如
$SERVER["socket"] == "0.0.0.0:8000" {}
就会让lighttpd同时监听server.port和8000端口。注意,{}里面不能再配置server.port,否则会导致重复绑定端口而退出。
4,linux2.4下使用rtsig后,性能表现要比poll要好很多,推荐使用!只需要增加
server.event-handler = "linux-rtsig"
到 配置文件就可以了。不过,软件实现方面有bug。在运行lighttpd时一定要加上-D参数,让lighttpd不自动运行到后台。否则你会发现一切正 常,但就是不能访问。估计是进程在设定socket fd的owner process后再daemonize,系统不能发送连接信号到程序。当然,一个程序运行于前台不是我们所需要的,我的解决方案是使用daemon这个软 件包。daemon是一个daemonize某个前台程序的工具,让人高兴的是,在子进程非正常退出的时候,daemon还会自动respawn!这点有 些类似于init进程,不过要比init好用点。daemon可以指定respawn的次数,间隔时间,放弃时间等等,否则,一个配置错误会让 daemon不停的respawn,让服务器假死。这样就曲线解决了lighttpd不稳定的问题。
5,如果你的站点很繁忙,那就把keepalive时间和次数减少点,比如
server.max-keep-alive-requests = 5
server.max-keep-alive-idle = 5
否则,即使lighttpd很强劲,处理太多fd也不是好想法,而且很容易导致fd overflow。
6, lighttpd使用fastcgi模式兼容php(还有python,ruby,perl等等,只要能使用fastcgi模式)。不过有一点兼容问题, 否则PATH_INFO环境变量不太对,php会报告no input file,你需要在php fcgi server配置文件里增加
"broken-scriptfilename" => "enable"
然后在php.ini里面增加
cgi.fix_pathinfo=1

lighttpd虽然不错,但大多情况下我还是推荐使用apache。
1,如果你不介意性能,或者有很充足的硬件,那就用apache吧,维护成本,bug成本,安全成本都会降低
2,你不希望出错,每一个连接都很重要,使用apache吧
3,你懒得配置lighttpd(确实要比apache复杂,如果你只是简单应用)
4,你要用php,但是fastcgi模式的php不兼容你的web应用。
5,你是apache fans
下面的情况,你需要选择lighttpd
1,你认为简单就是美,apache太庞大了
2,你没有充足的硬件,性能又很重要
3,你要尝试新事物
当然,你还可以选择同时运行apache和lighttpd,一个做前台,一个做后台。至于谁前谁后,似乎网上都有实例

下面是lighttpd官方网站给出的lighttpd特点,你可以参考参考;)

virtual hosts
virtual directory listings
URL-Rewriting, HTTP-Redirects
automatic expiration of files
Large File Support (64bit fileoffsets)
Ranges (start-end, start-, -end, multiple ranges)
on-the-fly output-compression with transparent caching
deflate, gzip, bzip2
authentication
basic, digest
backends: plain files, htpasswd, htdigest, ldap
fast and secure application controlled downloads
Server Side Includes
User Tracking
FastCGI, CGI, SSI
PHP-Support:
same speed as or faster than apache + mod_php4
includes a utility to spawn FastCGI processes (neccesary for PHP 4.3.x)
via FastCGI and CGI interface
support Code Caches like Turckmm, APC or eaccelarator
load-balanced FastCGI
(one webserver distibutes request to multiple PHP-servers via FastCGI)
Security features:
chroot(), set UID, set GID
protecting docroot
strict HTTP-header parsing

使用apache的理由还有一个 [回复]

那就是公司政治因素。往往最终选择什么产品,技术不是最主要的。。。lighthttpd这种东西也只能自己玩玩。连商业中间件都把apache集成进去作为web server。。。

Comment by Hong Liang (11/04/2005 21:59)

不懂 [回复]

折腾

Comment by cf (11/09/2005 14:56)

发表评论

 

相关文章推荐

lighttpd代替apache

  • 2008-10-28 13:26
  • 35KB
  • 下载

我只想说些我纠结这两天的历程。

在zoj论坛的图论分类里找的这个题,2682。开始因为是模拟题,我模拟了半天,觉得太繁了,后来想想,既然在图论里,那用图论知识做做。用了BFS。我做的数据都能过了。(后来事实证明,做的数据弱了 = =...

这两天比较无聊学习了jdbc,以下是我整理的心得

package com.jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared...

这两天迷上刷机

这两天迷上了手机刷机,试了试MIUI8 注意:刷此包请双清后刷入,否则wifi无法使用, 如果想保留数据的或,请先备份system和data分区 MIUI8FOR...

这两天的一些笔试题

迅雷的一道题目 求\t\r\\t\0345\r字符串的长度 http://hi.baidu.com/bshetlyijuaflxr/item/8e6585063386468b02ce1b99 h...

这两天的收获

这两天没有做用wicket完成某地方的地理信息数据的时序分析与拓扑分析,而是帮一个同学编了几个关于数据表处理的程序,还是蛮有收获的。下面是问题描述:1、有4个站点的降雨量,50年左右每天的数据都有,保...

这两天看一段程序,遇到52堆栈的问题

看到有人说  因为52高128B Indirect RAM 可以间接寻址,所以可用作堆栈又看到老古开发网的一个老帖:         MOV SP,#80H;栈底!!!!!太过分啦吧!51只有128(...

这两天调了下iic

这两天调了下iic,使用c8051f340 分别调试了BA580305传感器和24c16n存储器。下面总结一下吧。 首先说一下c8051f340,原来对单片机的时钟周期、机器周期、指令周期都搞得不太清...

这两天做作业有感

国庆节7天假,很容易就过去了,这两天在补作业,说实话,老师布置的作业都很基础的,选择填空题都是一些概念性很强的常识题。而程序设计题呢,也都是类似于谭浩强老师编的教材上的题目了。真的很基础,但是我发现那...

这两天没什么事,复习一下排序算法

说实话,本人半路出家从事web开发,计算机方面的许多知识都算是小白,算法这种东东,以前是完全没有什么概念。 后来学习JS的时候总感觉编写程序很不靠谱,所以有段时间就猛补了一下数据结构啊算法啊,设计模式...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)