Apache2.0是一个多用途的web服务器,其设计在灵活性、可移植性和性能中求得平衡。虽然没有在设计上刻意追求性能指标,但是Apache2.0仍然在许多现实环境中拥有很高的性能。
相比于Apache 1.3 ,2.0版本作了大量的优化来提升处理能力和可伸缩性,而且大多数的改进在默认状态下就可以生效。但是,在编译时和运行时,都有许多可以显著提高性能的选择。本文阐述在安装Apache2.0时,服务器管理员可以改善性能的各种方法。其中,部分配置选择可以使httpd更好地利用硬件和操作系统的兼容性,其他则是以功能换取速度。
硬件和操作系统
影响web服务器性能的最大的因素是内存。一个web服务器应该从不使用交换机制,因为交换产生的滞后使用户总感觉"不够快",所以用户就可能去按"停止"和"刷新",从而带来更大的负载。你可以,也应该,控制MaxClients的设置,以避免服务器产生太多的子进程而发生交换。这个过程很简单:通过命令计算出每个Apache进程平均消耗的内存,然后再为其它进程留出足够多的内存。
其他因素就很普通了,装一个足够快的CPU,一个足够快的网卡,几个足够快的硬盘,这里说的"足够快"是指能满足实际应用的需求。
操作系统是很值得关注的又一个因素,已经被证实的很有用的经验有:
*
选择能够得到的最新最稳定的版本并打好补丁。近年来,许多操作系统厂商都提供了可以显著改善性能的TCP协议栈和线程库。
*
如果你的操作系统支持sendfile()系统调用,则务必安装带有此功能的版本或补丁(对Linux来说,就是使用Linux2.4或更高版本,对Solaris8的早期版本,则需要安装补丁)。在支持sendfile的系统中,Apache2可以更快地发送静态内容而且占用较少的CPU时间。
运行时的配置
相关模块 相关指令
* mod_dir
* mpm_common
* mod_status
* AllowOverride
* DirectoryIndex
* HostnameLookups
* EnableMMAP
* EnableSendfile
* KeepAliveTimeout
* MaxSpareServers
* MinSpareServers
* Options
* StartServers
HostnameLookups 和其他DNS考虑
在Apache1.3以前的版本中,HostnameLookups默认被设为 On 。它会带来延迟,因为对每一个请求都需要作一次DNS查询。在Apache1.3中,它被默认地设置为 Off 。如果需要日志文件提供主机名信息以生成分析报告,则可以使用日志后处理程序logresolve ,以完成DNS查询,而客户端无须等待。
推荐你最好是在其他机器上,而不是在web服务器上执行后处理和其他日志统计操作,以免影响服务器的性能。
如果你使用了任何"Allow from domain"或"Deny from domain"指令(也就是domain使用的是主机名而不是IP地址),则代价是要进行两次DNS查询(一次正向和一次反向,以确认没有作假)。所以,为了得到最高的性能,应该避免使用这些指令(不用域名而用IP地址也是可以的)。
注意,可以把这些指令包含在段中使之局部化。在这种情况下,只有对这个区域的请求才会发生DNS查询。下例禁止除了.html和.cgi以外的所有DNS查询:
HostnameLookups off
HostnameLookups on
如果在某些CGI中偶尔需要DNS名称,则可以调用gethostbyname来解决。
FollowSymLinks 和 SymLinksIfOwnerMatch
如果网站空间中没有使用 Options FollowSymLinks ,或使用了 Options SymLinksIfOwnerMatch ,Apache就必须执行额外的系统调用以验证符号连接。文件名的每一个组成部分都需要一个额外的调用。例如,如果设置了: