分享
 
 
 

FreeBSD连载(90):单服务器性能调整

王朝system·作者佚名  2006-11-23
窄屏简体版  字體: |||超大  

调整服务器性能前面介绍了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 Collection轻松安装PHP,同时这个Port还支持和mod_ssl相集成,可以通过选择同时集成php3和mod_ssl。需要注意的是在安装之前仍然需要清除原有设置文件,以免带来不必要的麻烦。

Apache-PHP3具备一个预编译好的二进制软件包,如果不想重新编译Apache,可以直接使用这个软件包。要建立一个复杂的网站,至少要使用这个预编译好的软件包,以提供高效率的动态网页支持。

此外,由于CGI程序使用Perl编程的非常之多,因而一个非常有意义的作法为将perl解释器和Apache集成在一起,这样在执行perl程序时就不需要重新载入Perl解释器了,这样同样也能数倍提高服务器的效率。支持集成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服务器无法与之相比的。当然,这些服务器除了因为其是单进程的服务,效率较高之外,还因为这些服务器没有提供复杂的特性,包括安全认证等,例如安全认证就需要Web服务器读取其上面各级目录的访问许可,这些额外的文件操作会明显降低服务器的效率。然而,由于执行CGI处理时,服务器都必须启动外部进程,这些简易的服务器就不再具备什么优势了。

因此,如果使用者仅仅是想提供简易的静态网页服务,完全可以不必使用Apache服务器,单进程服务器性能更好,但使用者也无法利用Apache服务器提供的各种优秀特性了。然而,即使是使用Apache服务器,对提高效率也提供了很多设置参数,如果能将这些参数调整的合适,就能进一步提高服务器的性能,缩小与单进程服务器性能的差别。

有些性能损失,如提供安全控制的特性造成的损失,只能尽量减少,而无法消除。为了减少这些特性造成的损失,对于安全控制,可以在设置文件中针对根目录指定AllowOverrider None禁止查找.htaccess文件,只对于特定需要访问控制的目录才打开访问控制功能。此外,还要设置XbitBack为Off来关闭缺省文档的SSI功能,只使用AddHandler指令执行SSI文档。

除了高级特性找成的性能损失之外,还有的性能损失是由于子进程服务的方式造成的,Apache服务器在这个方面做了很大的努力,由于使用服务器的用户需求多种多样,因此缺省需求并不一定最适合服务器,便需要调整参数设置。

为了提升服务器性能,Apache服务器所做的一个有效的改动为使一个子进程能服务多次HTTP请求,这样就不再需要不断生成进程造成的性能损耗。但同时为了避免一个进程服务提供过多的次数的服务造成内存垃圾,Apache定义了一个MaxRequestPerChild来规定一个进程提供服务的次数,缺省设置为30。如果服务器提供的为静态网页,产生内存垃圾的机会就很少,可以将其设置为2000或者更高。即使服务器载入了各种不同的功能模块,产生内存垃圾的机会就多一些,可以相应将这个值的设置降低一些。

此外,还可以定义另一个参数MaxClients,用于设置Apache服务器可以同时拥有的最多进程数。进程数目越多,那么占用的内存数量就越大,一旦占用的内存超过系统的物理内存,那么就必须有多余的进程被交换到交换空间中,这样的事情一旦发生,服务器的效率就急剧降低了。因此,即使希望服务器能同时提供较多的服务,也不能超过服务器的物理内存限制进行设置。通常这可以通过计算进行估计,根据每个httpd守护进程占用空间的大小计算出这个数值的上限。或者可以根据系统维护命令,如top等,观察每个子进程占用的空间及系统内存分配情况。一般来讲,Apache服务器占用的空间并不会特别厉害,但一旦载入特别的模块,特别是modperl,它就会使用较多的内存。

原则上虽然可以使用物理内存来估算MaxClients的值,但是一方面还要考虑CPU的处理能力,当系统进程过多的时候,系统在进程之间切换造成的资源损失太大,就得不偿失了(top命令中的CPU利用率选项中,有一项sys就用于标识内核占用的处理器处理时间的比率,这一个比率不应该过大)。另一方面,由于FreeBSD是合并内存和磁盘缓冲区的机制,因此应该给磁盘缓冲区留下一定的大小,毕竟Web服务器中磁盘I/O的性能也非常重要。

FreeBSD中,编译时设定了最大的客户进程数为512,这是一个硬性设置,不能通过配置文件来更改的。如果想想将MaxCliets设置为大于512,就必须使用新的HARD_SERVER_LIMIT定义重新编译Apache服务器。在非Ports Collection编译的Apache版本中,它的缺省设置为256。

因此就需要综合考虑这些因素来设置MaxClients,首先要为磁盘缓冲区留下足够的空间,并以不交换到交换设备上为原则,定出一个上限值,然后根据处理器的情况进行分析。如果这个站点主要提供的是静态网页,那么对处理器的要求不大,就可以设置MaxClients为接近内存许可的上限值。如果这个站点有很多CGI程序,尤其是当这些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.2Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Copyright (c) 1998-1999 The Apache Group, http://www.apache.org/ Server Software: Apache/1.3.4Server Hostname: localhostServer Port: 80 Document Path: /Document Length: 360 bytes Concurrency Level: 50Time taken for tests: 3.881 secondsComplete requests: 1000Failed requests: 0Total transferred: 607212 bytesHTML transferred: 360720 bytesRequests per second: 257.67Transfer rate: 156.46 kb/s received Connnection Times (ms) min avg maxConnect: 0 0 1Processing: 26 190 1034Total: 26 190 1035

先调整相应的设置,然后使用ab模拟真实情况下的连接,来测试服务器的性能,并进一步调整参数以获得最佳的设置。

为了避免服务器进程在系统空闲时被无意义的杀死,可以简单的将MinSpareServers、MaxSpareServers和StartServers的值设置为与MaxClients的值相同。这种设置方式对于总是处于重负载的专业Web站点的设置方式,对于业余站点,就没有必要如此设置,这些值都可以设置得较小,以便来没有客户访问时,系统负载可以降低,留出处理能力完成其他任务。

未完,待续。。。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有