配置Apache1.3或者Apache2.0服务器的5个技巧

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

本文提出了配置Apache1.3或者Apache2.0服务器的5个技巧。我们将阐述以下的配置方案:调整Apache的accept()串行化、Apache2.0线程、采用mod_ssl的SSL会话缓存、优化keep-alive超时值以及检查服务器负载以平衡服务器可处理的请求量等。

AcceptMutex

Apache1.3.21和Apache2.0中引入了AcceptMutex指示符,该指示符给调节服务器的性能带来了一个难得的机会。该指示符配置Apache的accept()处理方式。在某些只有一个侦听器的系统上是不需要接受阻塞的。这就叫SingleListenUnserializedAccept(SLUA)。可是,对那些具有多个侦听器的配置或者在接受系统调用函数上(不管有多少个侦听器)存在thunderingherd问题的操作系统上,连接接受程序就必须进行串行化了。

Covalent的SanderTemme对accept()阻塞策略进行了一定程度的性能分析。这份报告总结了Apache1.3.21在这一方面的有关调整策略,如下所示:

Irix的uslock(uslock)
POSIX跨进程阻塞(pthread)
SystemVSemaphores(sysvsem)
fcntl()阻塞(fcntl)
flock()阻塞(flock)
OS/2Semaphores(os2sem)
TPF阻塞(tpfcore)
None(无)

尽管采用AcceptMutexnone也是可能的,但是你的系统在这种配置下有可能受到thunderingherd问题和死锁的困扰。这些问题会导致服务器减慢处理速度乃至停止响应。none选项绝对不能用在实际系统上。在非正式的测试下,pthread锁应该是最好的解决方案。然而,pthread跨进程阻塞并不是所有系统都可用的。

采用2.0版和线程(workerMPM)

Apache2.0有一个显著的改进特性就是支持线程。某些操作系统,比如Solaris,在采取线程技术的条件下可以显著地改进系统性能。而其他操作系统,比如Linux,其性能改进就可能并不是很显著。

在采用Apache2.0的情况下,处理请求的策略已经理论化了,这就是所谓的MPM:多进程模式(MultiProcessModel)。而老一些的Apache1.3模式则以preforkMPM为代表,在Unix平台上就是默认MPMfor2.0。在这种模式下有一个独立的进程处理每一请求。可是,假如你编译Apache2.0的时候带--with-mpm=worker选项,那么服务器请求就会由线程来处理。这种方法在精心设计线程实现方案的情况下会大大降低操作系统处理请求的负载。

SSL会话缓存

如果你对Apache1.3或者Apache2.0采用了mod_ssl补充插件(在在Apache2.0中则已经包含在内),那么你可以采用会话缓存提升系统性能。这种改进会显著降低SSL连接负载。设置会话缓存有三种途径:

DBM(dbm),这是一种在磁盘上存储项目的常用格式(htpasswd可以DBM格式存储密码)
 
共享内存循环缓存(shm或者shmcb)

共享内存哈系表(shmht)

在采用以上选项的时候需要指定文件路径。在使用DBM变量的情况下,文件将被写入磁盘。而对共享内存变量来说,文件将被用做操作系统优选共享内存机制的存储备份。值得注意的是,大多数操作系统不允许共享内存段建立在通过网络装载(mount)的驱动器上,比如NFS等,所以必须给服务器提供文件路径。

我们建议你采用共享内存,不过,在那些没有共享内存的平台上则不妨采用DBM方案。

--------------------------------------------------------------------------------
SSL会话缓存的更多信息和有关语法请见:
modssl.org
Apache.org

--------------------------------------------------------------------------------

KeepAliveTimeout

假设某位用户在阅读网站上的某一网页,然后它单击某一导向站内另一网页的链接。假如这一过程发生在KeepAliveTimeout周期之内(默认为15秒),那么就不必创建新的TCP服务器连接。这样做大大减少了计算机的负载。然而,在这一时间区域内服务器也不能处理更多的请求。KeepAliveTimeout周期过后,服务器才可以处理来自不同客户机的最新请求。因此,你必须增加请求进程或者线程的数量以满足空闲请求的需要。这个值应该进行仔细的调整以达到最佳状态。

采用mod_status

采用mod_status检查服务器负载情况可以从中获得调整服务器性能的重要信息。

Apachectlstatus命令是检查服务器状态的快捷途径。假如该命令的输出结果并没有始终如一的显示出可用的工作进程。那么最好增大MinSpareServers或者MinSpareThreads值(在Apache2.0采用线程化MPM的情况下)。同时你可能还需要增大MaxClients值。

--------------------------------------------------------------------------------

有关mod_status和Apache模块mpm_common的更多信息请参考mod_status和mpm_common。

--------------------------------------------------------------------------------

小结

你完全可以采用本文提出的技巧使服务器的性能最大化同时维持网站的正常运行。

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值