发信人: Hopper()
整理人: hahalee(2000-02-28 20:04:26), 站内信件
|
http://www.sina.com.cn 2000年1月31日 13:22 王波
调整服务器性能
前面介绍了Apache服务器的基本设置选项,通过调整这些设置,就能使Web服 务器达到非常优秀的性能。此外,还可以调整操作系统的设置,包括重新定制整 个系统,使之适合高负载的Web服务器。进一步,还可以利用Apache 提供的各种 服务器技术,如FastCGI、PHP等,充分发挥Web服务器的作用。
调整Web服务器的性能,首先就要调整系统内核的性能,需要定制一个适合服 务器要求的内核。此外,不要忘记使用egcc及更大的优化选项来编译Web服务器。
单服务器性能调整
由于Apache服务器具备高度的可配置性,因此通过调整其设置,可以极大的 提升服务器的性能。对于Web 服务器,所面对的性能问题主要可以分为两个方面 ,一个为Web服务器提供静态网页的性能,另一个为产生动态网页时的性能。其中 在产生动态网页时的性能下降是影响服务器性能的主要因素。
使用新特性提升性能
为了改善产生动态网页时的性能,可以尝试使用Apache能提供的新特性来帮 助解决性能问题。虽然CGI和SSI 都能用于产生动态网页,但都各具缺点。CGI需 要每次都要启动一个进程,因此增加了运行服务器的负担,而SSI功能简单,不适 合大部分需要。因此为了增加服务器的性能,Web服务器的开发者考虑了各种不同 的技术,以提高服务器提供动态网页时的运行速度。
增加产生动态网页的性能,可以从两个角度出发,一个基于原有的CGI程序, 设法使得一个CGI进程能提供多次 CGI服务,而不必每次都重新产生进程,增加服 务器负担,基于这种考虑的解决方式的代表为FastCGI,这是由OpenMarket 公司 开发了一个基于CGI的新标准,一个FastCGI程序能驻留在系统中,和Web服务器通 信,并多次回应CGI请求,而不必重新生成进程。FastCGI程序与标准CGI程序非常 类似,仅仅需要简单的修改原有的CGI 程序,就能支持FastCGI。FreeBSD下没有 支持FastCGI的Port,因此要支持FastCGI就需要重新手工编译安装。
另一个角度是从服务器端分析功能入手,既然SSI功能较弱,可以进一步在服 务器内部提供更复杂的功能,PHP 就是一个代表,PHP具备丰富的数据库支持能力 ,因此非常流行。然而PHP却有相应的Port支持,因此可以使用 Ports Collecti on轻松安装PHP,同时这个Port还支持和mod_ssl相集成,可以通过选择同时集成 php3和mod_ssl。需要注意的是在安装之前仍然需要清除原有设置文件,以免带 来不必要的麻烦。
Apache-PHP3具备一个预编译好的二进制软件包,如果不想重新编译Apache, 可以直接使用这个软件包。要建立一个复杂的网站,至少要使用这个预编译好的 软件包,以提供高效率的动态网页支持。
此外,由于CGI程序使用Perl编程的非常之多,因而一个非常有意义的作法为 将perl解释器和Apache 集成在一起,这样在执行perl程序时就不需要重新载入P erl解释器了,这样同样也能数倍提高服务器的效率。支持集成perl到Apache中的 模块为mod_perl,它充分发挥了perl的强大功能。在这种方式下,不但可以直接 执行perl编写的CGI程序,还可以在嵌入perl语句,甚至使用perl控制Apache服务 器的行为,包括使用perl来编写Apache的内部功能处理模块。mod_perl同样也没 有Port Collection支持,需要自己下载软件重新编译Apache。
FastCGI、PHP3和嵌入的perl只是在Apache服务器上最流行的几种新特性,使 用它们可以非常高效的完成动态网页的生成。这些新特性对于建立一个高负载的 站点是必需的。但是,也没有必要同时都提供支持,不同的使用者会喜欢使用不 同的动态网页生成方式。其中PHP3的安装和设置非常简单,它又是服务器端分析 方式,因此是在做新站点时的首选方式。而如果有大量原有的CGI程序需要继承, 就可以选择FastCGI,perl的忠实拥护者则会选择modperl。
调整系统设置
由于Apache服务器是采用传统的生成子进程的方式来提供服务的形式,这种 形式比较适合服务比较复杂的情况,但性能却没有单进程的服务器高,尤其在高 负载的情况下更是如此。一些使用单进程的Web服务器,都其声称提供静态网页的 速度为Apache服务器的几倍,例如能通过Ports Collection安装的boa,或者另一 个非常简单的服务器thttpd,它们提供静态网页的速度的确是Apache服务器无法 与之相比的。当然,这些服务器除了因为其是单进程的服务,效率较高之外,还 因为这些服务器没有提供复杂的特性,包括安全认证等,例如安全认证就需要We b服务器读取其上面各级目录的访问许可,这些额外的文件操作会明显降低服务器 的效率。然而,由于执行CGI处理时,服务器都必须启动外部进程,这些简易的服 务器就不再具备什么优势了。
因此,如果使用者仅仅是想提供简易的静态网页服务,完全可以不必使用Ap ache服务器,单进程服务器性能更好,但使用者也无法利用Apache服务器提供的 各种优秀特性了。然而,即使是使用Apache服务器,对提高效率也提供了很多设 置参数,如果能将这些参数调整的合适,就能进一步提高服务器的性能,缩小与 单进程服务器性能的差别。
有些性能损失,如提供安全控制的特性造成的损失,只能尽量减少,而无法 消除。为了减少这些特性造成的损失,对于安全控制,可以在设置文件中针对根 目录指定AllowOverrider None禁止查找.htaccess文件,只对于特定需要访问控 制的目录才打开访问控制功能。此外,还要设置XbitBack为Off来关闭缺省文档的 SSI 功能,只使用AddHandler指令执行SSI文档。
除了高级特性找成的性能损失之外,还有的性能损失是由于子进程服务的方 式造成的,Apache服务器在这个方面做了很大的努力,由于使用服务器的用户需 求多种多样,因此缺省需求并不一定最适合服务器,便需要调整参数设置。
为了提升服务器性能,Apache服务器所做的一个有效的改动为使一个子进程 能服务多次HTTP请求,这样就不再需要不断生成进程造成的性能损耗。但同时为 了避免一个进程服务提供过多的次数的服务造成内存垃圾,Apache定义了一个Ma xRequestPerChild来规定一个进程提供服务的次数,缺省设置为30。如果服务器 提供的为静态网页,产生内存垃圾的机会就很少,可以将其设置为2000或者更高 。即使服务器载入了各种不同的功能模块,产生内存垃圾的机会就多一些,可以 相应将这个值的设置降低一些。
此外,还可以定义另一个参数MaxClients,用于设置Apache服务器可以同时 拥有的最多进程数。进程数目越多,那么占用的内存数量就越大,一旦占用的内 存超过系统的物理内存,那么就必须有多余的进程被交换到交换空间中,这样的 事情一旦发生,服务器的效率就急剧降低了。因此,即使希望服务器能同时提供 较多的服务,也不能超过服务器的物理内存限制进行设置。通常这可以通过计算 进行估计,根据每个httpd守护进程占用空间的大小计算出这个数值的上限。或者 可以根据系统维护命令,如top等,观察每个子进程占用的空间及系统内存分配情 况。一般来讲,Apache服务器占用的空间并不会特别厉害,但一旦载入特别的模 块,特别是modperl,它就会使用较多的内存。
原则上虽然可以使用物理内存来估算MaxClients的值,但是一方面还要考虑 CPU的处理能力,当系统进程过多的时候,系统在进程之间切换造成的资源损失太 大,就得不偿失了(top命令中的CPU利用率选项中,有一项sys 就用于标识内核 占用的处理器处理时间的比率,这一个比率不应该过大)。另一方面,由于Free BSD是合并内存和磁盘缓冲区的机制,因此应该给磁盘缓冲区留下一定的大小,毕 竟Web服务器中磁盘I/O的性能也非常重要。
FreeBSD中,编译时设定了最大的客户进程数为512,这是一个硬性设置,不 能通过配置文件来更改的。如果想想将MaxCliets设置为大于512,就必须使用新 的HARD_SERVER_LIMIT定义重新编译Apa che服务器。在非Ports Collection编译 的Apache版本中,它的缺省设置为256。
因此就需要综合考虑这些因素来设置MaxClients,首先要为磁盘缓冲区留下 足够的空间,并以不交换到交换设备上为原则,定出一个上限值,然后根据处理 器的情况进行分析。如果这个站点主要提供的是静态网页,那么对处理器的要求 不大,就可以设置MaxClients为接近内存许可的上限值。如果这个站点有很多CG I程序,尤其是当这些CGI 程序需要执行繁重的处理任务时,那么系统启动过多的 CGI程序,都不会迅速结束,反而不如让系统启动较少的CGI程序效率高,因此就 要考虑适当降低MaxClients的设置。
考虑Maxclients设置的前提是同时有超出现有Maxclients设置的并发请求发 生,如果系统本来就没有那么多的并发请求,就不必考虑增加这个设置的值,而 应该使用最大并发访问请求数来设置这个参数。
为了确定服务器的最优设置,可以通过使用Apache提供的一个性能测试软件 ab来进行模拟访问,这个程序缺省被安装到/usr/local/sbin中。例如使用ab向本 地服务器的一个网页同时发起50个连接,共进行1000次连接,就执行:
bash-2.02$ /usr/local/sbin/ab -n 1000 -c 50 localhost/
This is ApacheBench, Version 1.2
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustec h.net/
Copyright (c) 1998-1999 The Apache Group, http://www.apache.org/
Server Software: Apache/1.3.4
Server Hostname: localhost
Server Port: 80
Document Path: /
Document Length: 360 bytes
Concurrency Level: 50
Time taken for tests: 3.881 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 607212 bytes
HTML transferred: 360720 bytes
Requests per second: 257.67
Transfer rate: 156.46 kb/s received
Connnection Times (ms)
min avg max
Connect: 0 0 1
Processing: 26 190 1034
Total: 26 190 1035
先调整相应的设置,然后使用ab模拟真实情况下的连接,来测试服务器的性 能,并进一步调整参数以获得最佳的设置。
为了避免服务器进程在系统空闲时被无意义的杀死,可以简单的将MinSpare Servers、MaxSpa reServers和StartServers的值设置为与MaxClients的值相同。 这种设置方式对于总是处于重负载的专业Web站点的设置方式,对于业余站点,就 没有必要如此设置,这些值都可以设置得较小,以便来没有客户访问时,系统负 载可以降低,留出处理能力完成其他任务。
未完,待续。。。
-- 小多子:你知道我们佟家百年不衰的道理么?
那就是,不要一条路走到黑!
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.190.123]
|
|