荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: georgehill (人生不定式), 信区: Linux
标  题: Apache的性能与稳定性  [转载](转寄)
发信站: BBS 荔园晨风站 (Sun Sep 24 08:43:51 2000), 站内信件

【 以下文字转载自 georgehill 的信箱 】
【 原文由 georgehill.bbs@smth.org 所发表 】
发信人: hhuu (种太阳), 信区: FreeBSD
标  题: Apache的性能与稳定性  [转载]
发信站: BBS 水木清华站 (Fri Sep 22 12:29:34 2000)

From freebsd.online.ha.cn

Apache:性能与稳定性

在Internet中的Web服务器领域内,Apache占有无可争议的领先地位。根据
Netcraft (http://www.netcraft.com ) 的调查,有60%的Web服务器是使用的
Apache,当然由于这个统计是基于域名进行的,由于Apache的强大功能,很多ISP
使用它来提供虚拟主机服务,因此如果基于IP地址来计算服务器数量,那么这个占
有率会低一些,当然这不会改变Apache在Web领域的领先地位。

然而,由于Apache服务器为一种自由软件,它的性能及稳定性问题一直受到质疑。
由于Apache服务器支撑着半数的Internet,对它的稳定性任何人都无法提出异议,
然而,性能问题则就不那么明显可以看出来的了。因为一个网站可以拥有多个Web
服务器,通过负载均衡的方式来在这多个服务器之间分担负载,那么不同的服务器
之间的性能差异,只要不是太明显,是不容易看出的,因此就需要使用测试软件对
它们的性能进行评测。其中与微软关系密切的Mindcraft(http://www.
mindcraft.com)去年发布的对Apache和IIS的评测,结果表明,在基本的提供静态
网页方面,IIS的性能是Apache的3.7倍,而另一个德国网站(http://www.ct.
heise.de/ct/english/99/13/186-1/)使用另一个测试软件进行的评测,却得到
Apache的性能要超过IIS的结论。为什么Apache服务器在不同的评测中会得到不同
的结果呢?我们必须讨论一下Web服务器的实现机理。


服务器提供服务的方式


网络服务器由于要同时为多个客户提供服务,就必须使用某种方式来支持这种多任
务的服务方式。一般情况下可以有三种方式来选择,多进程方式、多线程方式及异
步方式。其中,多进程方式中服务器对一个客户要使用一个进程来提供服务,由于
在操作系统中,生成一个进程需要进程内存复制等额外的开销,这样在客户较多时
的性能就会降低。为了克服这种生成进程的额外开销,可以使用多线程方式或异步
方式。在多线程方式中,使用进程中的多个线程提供服务,由于线程的开销较小,
性能就会提高。事实上,不需要任何额外开销的方式还是异步方式,它使用非阻塞
的方式与每个客户通信,服务器使用一个进程进行轮询就行了。

虽然异步方式最为高效,但它也有自己的缺点。因为异步方式下,多个任务之间的
调度是由服务器程序自身来完成的,而且一旦一个地方出现问题则整个服务器就会
出现问题。因此,向这种服务器增加功能,一方面要遵从该服务器自身特定的任务
调度方式,另一方面要确保代码中没有错误存在,这就限制了服务器的功能,使得
异步方式的Web服务器的效率最高,但功能简单。例如Unix平台上的thttpd就是这
样的一种服务器,然而由于它提供的功能少,只能是满足少部分人的需要。即便如
此,thttpd每隔一段时间还会出现一些问题,幸运的是,它出问题时从不是进入死
循环,而是被操作系统杀死,这样就可以使用一个shell循环立即重启动thttpd,
从而基本不影响Web服务。

由于多线程方式使用线程进行任务调度,这样服务器的开发由于遵从标准,从而变
得简单并有利于多人协作。然而多个线程位于同一个进程内,可以访问同样的内存
空间,因此存在线程之间的影响,并且申请的内存必须确保申请和释放。对于服务
器系统来讲,由于它要数天、数月甚至数年连续不停的运转,一点点错误就会逐渐
积累而最终导致影响服务器的正常运转,因此很难编写一个高稳定性的多线程服务
器程序。微软的IIS就是使用的多线程方式,由于微软聚集了相当多优秀程序员,
所以IIS基本上还是值得信赖的,当然我也遇到过很多系统管理员,他们根据经验
定期启动所管理的NT服务器,以预防不可预料的Web服务停止现象。

多进程方式的优势就在于稳定性,因为一个进程退出的时候,操作系统会回收其占
用的资源,从而使它不会留下任何垃圾。即便程序中出现错误,由于进程是相互隔
离的,那么这个错误不会积累起来,而是随着这个进程的退出而得到清除。


预生成进程方式的性能


由于Apache是采用的多进程方式提供服务,为了提高性能,Apache采用了一种特别
的方式,即预生成进程模型。分析多进程方式比其他两种方式开销大的主要原因,
是对每一次客户请求,都要生成一个子进程以便进行处理,因此为了避免这种开销
,可以使用预先生成的进程来提供服务,并且每个进程在提供一次服务之后也不会
立即退出,而是仍然保留在系统中,等待下一次请求。

这里就可以看出,在理想情况下,预先生成的多个进程可以全速回应相应数量的浏
览器客户请求,而没有额外的性能开销,因此就完全可以和线程或异步方式相媲美
。然而在实际运行当中,由于预先生成的进程毕竟要占用系统资源,如系统内存和
CPU处理能力,这样如果预先生成的进程超过需要,性能反而会降低。因此Apache
就采用了这样的一种策略,在系统中保持一定的空闲进程,当空闲进程较少时就自
动生成,当空闲进程较多时就让一些进程退出。

由于Apache采用这样的预生成进程模型,就导致预先要生成多少进程、保留多少空
闲进程、一个进程提供多少次服务等等成为与性能密切相关的问题,然而,这些设
置都是与具体条件密切相关的。例如,越多的进程需要占用越多的内存,所分得的
CPU处理时间就越少,因此系统的物理内存和CPU处理能力就决定了进程的最大数量
。而Apache提供的基本配置是为了适应大多数情况,在客户请求较少时也不占用过
多资源,因此并不是最高性能的设置。而大多数Web服务器测试的条件下,服务器
的内存、CPU处理能力都不是问题,甚至内存大到足以将所有要访问的文档都可以
放在系统缓冲中,因而无须考虑磁盘处理能力,这种情况和实际应用完全不同。因
此,SGI的一位开发者通过调整设置,并使用他自己对Apache代码的一些改动,在
同一个SGI Origin 200服务器上使用SPECweb96进行测试,调整后的服务器可以比
原始设置提高10倍的速度(http://oss.sgi.com/projects/apache/),当然这是
针对SPECweb96这个测试程序进行的调整,在实际使用中不可能会有这样巨大的差
别。这至少从侧面说明了测试结果并不是绝对的。

此外,Apache的另一个特点是它的功能特别丰富,而每种功能通常就需要进行特别
的处理,这会影响Apache的性能,然而对于具体的情况,却不是每种特性都是必要
的,因此可以通过减少这些功能来增加性能。此外,操作系统的调整对于增强
Apache的性能也是非常重要的。如何根据服务器的实际情况调整操作系统以及
Apache的参数,这些内容在Apache的文档中都有非常详细的描述。这些文档包含在
每个Apache安装文件中,也可以直接从它的主页得到(http://www.apache.
org/docs/misc/perf-tuning.html)。


Apache 2.0展望


虽然Apache服务器使用预生成进程的方式提高了服务器的性能,然而,进程方式本
身的不足仍然存在,随着访问数量的增多,进程方式比其他两种方式需要消耗更多
的内存和CPU处理能力,这就限制了单台计算机提供更大负载的能力。如果在低端
计算机上想服务更多的请求的话,使用异步方式的thttpd更为适合。例如,一台
512MB内存双CPU的Linux服务器提供1000个并发访问时,其负载就会变得相当高,
常常会由于内存用光而无法运行程序,这种情况是由于Linux重视物理内存,不重
视交换空间的原因,如果使用同样配置的FreeBSD作操作系统,情况会有所改变,
然而此时由于需要进行内存交换,就无法达到最优性能了。

因此,这些情况下为了支持更改的负载,完全采用进程方式就不太合适了,而应该
利用线程节约资源的优点。

然而,在即将到来的Apache 2.0中,一切都会变得更完美,Apache 2.0将充分考虑
到进程带来的稳定性特征,以及线程带来高效率的特点。它会预生成多个进程,而
每个进程中使用多个线程提供Web服务。由于存在多个进程,即使一个进程死了也
不会影响整个Web服务。对于不支持进程的操作系统,如Windows,那么就使用多个
线程提供服务,反之也是一样。然而,只有同时支持线程和进程的操作系统,才能
充分利用Apache 2.0带来的稳定性和高负载能力。

事实上当前的Apache并不是与线程无关,Windows版本的Apache是使用线程的,但
按照Apache文档的说法,Windows版本的Apache性能并不好,主要原因是它在移植
过程中是使用的Windows的POSIX子系统,而Windows本身的有些特性效率更高。而
在Apache 2.0中,使用了APR(Apache Portable Run-time)特性,这种特性对不
同的操作系统提供了一个抽象层,以便Apache能利用Windows的一些非POSIX的特性


Apache 2.0将是对现在的Apache 1.3版本的一个飞跃,然而,当前它仍然处于
Alpha状态,可以预期,当Apache 2.0正式推出之后,将有更多的用户接受它。

--
  行列中        作不朽文章
  谈笑间        论古今英雄
  痴狂里        诉红尘情爱
  来去时        不枉一生风流
                        ---------  bbs.ntu.edu.tw


※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.160.6]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.115]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店