TUX(Threaded linUX webserver)是一款HTTPD,提起HTTPD我们理所当然的首先想到了apache.它稳定,易用,有强大的功能模块和全面的文档支持,LAMP(Linux+Apache+Php+Mysql)是最流行的互联网架构。但是apache有它的局限:很少听人说过在当前流行的服务器中用apache能稳定的实现超过5000的并发(当然这个也取决于具体应用),且性能一直为人诟病,它在处理访问的时候消耗资源很多。TUX就是解决这个问题的,RedHat开发的。折腾了一阵这个东西,写点自己的一点心得。用的平台是dell 2850+debian etch,因为tux是redhat开发的,在debian中折腾还挺费劲的。
TUX分为两部分:内核空间的部分和用户空间的部分.将拷贝到2.6源码下,运行
#patch -p1 http://202.108.12.69/kernel/linux-image-2.6.18-bigsmp-universal_2850_i386.deb
用这个内核重启后在内存文件系统里面会看到tux了:/proc/sys/net/tux。这里面每个文件对应着一个tux的参数。
还需要一个user sapce的部分,作为daemon守护进程监听于某个端口。user space的tux,直接装二进制的包就行
(在debian下应用rpm,apt-get install alien即可。具体方法man一下alien和rpm。)
也可以用源码自行编译。源码在
编译demo6.so的时候会报错,给gcc打上如下patch即可解决
主要是产生了/usr/sbin/tux这个二进制程序和$src_code/tux.init这个启动脚本。
因为启动脚本是基于redhat的,我自己改了一下,脚本在
将它放在/etc/init.d/下,chmod 755 /etc/init.d/tux.init用它启动即可。阅读脚本可以看到它是从/etc/tux中读参数写入到/proc/sys/net/tux下的参数的。我的配置文件在
TUX在内核空间提供服务,用户空间只提供一个daemon,这种架构是它处理静态文件效率比apache高3倍的根本原因,它节省了从user space拷贝数据到kernel space这部分资源,内核直接响应用户请求。对于一个网站来讲,我们可以用它来处理静态请求,而动态请求则可以通过别的httpd支持。比如一个提供图片下载的网站,一般的解决方案是lamp系统,而如果在apache前面加一个tux则可以将静态内容通过tux响应,大大提高性能。
我们可以将tux作为主服务器而将apache作为第二服务器,也可以反过来。将tux作为主服务器需要将apache的httpd.conf中Port参数设置为8080,
基于安全考虑可以将BindAddress 设置为127.0.0.1(监听本地请求,只接受tux转过来的请求,不直接对外服务)。在/etc/tux.mime.types设置
TUX/redirect *.php,即php的请求都给第二服务器处理。
echo 80 > /proc/sys/net/tux/serverport
echo 8080 > /proc/sys/net/tux/clientport
整合完毕。
另外tux的一些性能参数:
/proc/sys/net/tux/threads 几个cpu就填几
/proc/sys/net/tux/documentroot tux的web根目录
/proc/sys/net/tux/cgiroot cgi的根
/proc/sys/net/tux/keepalive_timeout 保持连接的最大时间。一般为30秒即可。
/proc/sys/net/tux/logging 日志文件是否开启,开启为1,否则0
这些参数我都在tux.config做了初始化配置了。tux.init启动脚本会去读。
日志文件是2进制的。要用/usr/sbin/tux2w3c程序可以转化为符合全球网服务器软件日志文件标准的w3c格式。默认每天翻滚一次。
日志模式如下。
FAI:~# tux2w3c /var/log/tux.1
192.168.3.131 - - [16/Oct/2006:16:48:12 +0800] "GET / HTTP/1.1" 200 8 "-" ""
192.168.3.131 - - [16/Oct/2006:16:52:56 +0800] "GET /index.php HTTP/1.1" 200 21 "-" ""
192.168.3.131 - - [16/Oct/2006:16:53:13 +0800] "GET / HTTP/1.1" 304 0 "-" ""
192.168.3.131 - - [16/Oct/2006:16:53:21 +0800] "GET /index.php HTTP/1.1" 200 21 "-" ""
TUX还可以实现缓存动态内容,绑定网卡以提高效率,等等“压榨”服务器性能的诸多功能,另外用户可装载模块的API目前正在不断发展中。
网上看到有人说用tux+apache实现超过10000个并发连接,他们公司的全部web业务都是用tux,他们重写了user space的部分代码,跟apache作了无隙整合。但是另外有人说它的稳定性值得怀疑,最初redhat做它的目的是替代在kernel2.6被取消了的内核httpd:khttpd,内核之中的httpd技术都是不太稳定的。种种说法都需要一些时间去做测试——我在测试间的FAI系统目前是用tux在做服务。
对apache性能不满意的,或者喜欢折腾的,可以来试一下~ ,内核空间的东西都是跟硬件通信了。
附一些资料和当前最新版本的patch的URL:
最新patch在这儿发布。
阅读(385) | 评论(0) | 转发(0) |