作者:手机用户2502904917 | 来源:互联网 | 2014-01-19 13:05
apachectlstatus命令是检查服务器状态的快捷道路。假如该命令的输出成果并没有始终如一的显示出可用的工作过程。那么最好增大MinSpareServers或者MinSpareThreads值(在Apache2.0采用线程化MPM的情况下)。同时你可能还需要增大MaxClients值。
本文提出了配置Apache 1.3或者Apache 2.0服务器的5个技巧。我们将论述以下的配置计划:调剂Apache的accept()串行化、Apache 2.0线程、采用mod_ssl的SSL会话缓存、优化keep-alive超时值以及检查服务器负载以平衡服务器可处理的恳求量等。
AcceptMutex
Apache 1.3.21和Apache 2.0中引进了AcceptMutex 唆使符,该唆使符给调节服务器的性能带来了一个难得的机会。该唆使符配置Apache的accept()处理方法。在某些只有一个侦听器的系统上是不需要接收阻塞的。这就叫Single Listen Unserialized Accept (SLUA)。可是,对那些具有多个侦听器的配置或者在接收系统调用函数上(不管有多少个侦听器)存在thundering herd标题的把持系统上,连接接收程序就必需进行串行化了。
Covalent的Sander Temme对accept()阻塞策略进行了必定程度的性能分析。这份报告总结了Apache 1.3.21在这一方面的有关调剂策略,如下所示:
-
Irix的uslock (uslock)
-
POSIX跨过程阻塞 (pthread)
-
SystemV Semaphores (sysvsem)
-
fcntl()阻塞(fcntl)
-
flock()阻塞 (flock)
-
OS/2 Semaphores (os2sem)
-
TPF 阻塞 (tpfcore)
-
None(无)
尽管采用AcceptMutex none也是可能的,但是你的系统在这种配置下有可能受到thundering herd标题和逝世锁的困扰。这些标题会导致服务器减慢处理速度乃至结束响应。none选项尽对不能用在实际系统上。在非正式的测试下,pthread锁应当是最好的解决计划。然而,pthread跨过程阻塞并不是所有系统都可用的。
采用2.0版和线程(worker MPM)
Apache 2.0有一个明显的改良特征就是支撑线程。某些把持系统,比如Solaris,在采用线程技巧的条件下可以明显地改良系统性能。而其他把持系统,比如Linux,其性能改良就可能并不是很明显。
在采用Apache 2.0的情况下,处理恳求的策略已经理论化了,这就是所谓的MPM:多过程模式(Multi Process Model)。而老一些的Apache 1.3模式则以prefork MPM为代表,在Unix平台上就是默认MPM for 2.0 。在这种模式下有一个独立的过程处理每一恳求。可是,假如你编译Apache 2.0的时候带 --with-mpm=worker 选项,那么服务器恳求就会由线程来处理。这种方法在精心设计线程实现计划的情况下会大大下降把持系统处理恳求的负载。
SSL会话缓存
假如你对Apache 1.3或者在Apache 2.0采用了mod_ssl补充插件(在在Apache 2.0中则已经包含在内),那么你可以采用会话缓存晋升系统性能。这种改良会明显下降SSL连接负载。设置会话缓存有三种道路:
-
DBM (dbm),这是一种在磁盘上存储项目标常用格局(htpasswd可以DBM格局存储密码)
共享内存循环缓存(shm 或者shmcb)
共享内存哈系表(shmht)
在采用以上选项的时候需要指定文件路径。在应用DBM变量的情况下,文件将被写进磁盘。而对共享内存变量来说,文件将被用做把持系统优选共享内存机制的存储备份。值得留心的是,大多数把持系统不答应共享内存段建立在通过网络装载(mount)的驱动器上,比如NFS等,所以必需给服务器供给文件路径。
我们建议你采用共享内存,不过,在那些没有共享内存的平台上则不妨采用DBM计划。
SSL会话缓存的更多信息和有关语法请见:
KeepAliveTimeout
假设某位用户在浏览网站上的某一网页,然后它单击某一导向站内另一网页的链接。假如这一过程产生在KeepAliveTimeout 周期之内(默认为15秒),那么就不必创立新的TCP服务器连接。这样做大大减少了盘算机的负载。然而,在这一时间区域内服务器也不能处理更多的恳求。KeepAliveTimeout周期过后,服务器才可以处理来自不同客户机的最新恳求。因此,你必需增加恳求过程或者线程的数目以满足空闲恳求的需要。这个值应当进行仔细的调剂以达到最佳状态。
采用mod_status
采用mod_status检查服务器负载情况可以从中获得调剂服务器性能的重要信息。
apachectl status命令是检查服务器状态的快捷道路。假如该命令的输出成果并没有始终如一的显示出可用的工作过程。那么最好增大MinSpareServers或者MinSpareThreads值(在Apache 2.0采用线程化MPM的情况下)。同时你可能还需要增大MaxClients值。
有关mod_status和Apache模块mpm_common的更多信息请参考mod_status 和mpm_common 。
小结
你完整可以采用本文提出的技巧使服务器的性能最大化同时保持网站的正常运行。