蒙面人生蒙面人生

Apache 性能优化调整

Apache音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部。相传阿帕奇是一个武士,他英勇善战,且战无不胜,被印第安人奉为勇敢和胜利的代表,因此后人便用他的名字为印第安部落命名,而阿帕奇族在印第安史上也以强悍著称。Apache是世界使用排名第一的Web服务器。它可以运行在几乎所有广泛使用的计算机平台上。

  在进行web性能容量规划的时候首先利用Apahce首先计算内存消耗:

  apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2

  apache_max_process = apache_max_process_with_good_perfermance * 1.5

  为什么会有一个apache_max_process_with_good_perfermance和apache_max_process呢?原因是在低负载下系统可以使用更多的内存用于文件系统的缓存,从而进一步提高单个请求的响应速度。在高负载下,系统的单个请求响应速度会慢不少,而超过 apache_max_process,系统会因为开始使用硬盘做虚拟内存交换空间而导致系统效率急剧下降。此外,同样的服务:2G内存的机器的 apache_max_process一般只设置到1G内存的1.7倍,因为Apache本身会因为进程过多导致性能下降。

  例子1:

  一个apache + mod_php的服务器:一个apache进程一般需要4M内存

  因此在一个1G内存的机器上:apache_max_process_with_good_perfermance < (1g / 4m) * 2 = 500

  apache_max_process = 500 * 1.5 = 750

  所以规划你的应用让服务尽量跑在500个进程以下以保持比较高的效率,并设置Apache的软上限在800个。

  例子2:

  一个apache + mod_resin的服务器: 一个apache进程一般需要2M内存

  在一个2G内存的机器上:

  apache_max_process_with_good_perfermance < (2g / 2m ) * 2 = 2000

  apache_max_process = 2000 * 1.5 = 3000

  Apache所在的机器与操作系统环境是对性能影响最大因素,很明显,一以368的PC与一台P4或双处理器的机器不会有同样的性能。不过,如果不涉及硬件的改变,我们可以做的最大的事是首先看一下Apache是否运行在一台专用的服务器上,如果与其它应用共用一台服务器肯定会影响服务器的性能。

  在大多数情况下,告别是对静态网站而言,内存数量是一个影响性能的关键因素,因为它决定了Apache可以缓存多少内容。它缓存的内容越多,在硬盘上读取内容的机会就越少,而存取硬盘上的特定文件是一件很费时的操作。如果你的网站主要是一些静态内容,你最好使用mod_cache选项,如果你的内存足够大,可以使用mod_mem_cache选项。

  第一个选项将信息缓存在磁盘上,当它与mod_include选项一起使用时会有很好的效果,这个选项在建立一个页面时在缓存中保存它的最终版本。使用mod_mem_cache将缓存内容保存在一个可以被所有Apache进程共享的内存堆中。

  使用更快的磁盘或进一步使用RAID可以提高Apache对磁盘文件的访问速度。注意,如果你做了下面的所有这些优化,一个硬件的(而非软件)升级方案是更好的选择。最后一个谈到的关于硬件的问题是CPU能力,这对动态内容网站的影响很大,动态内容越多要求越高。

  以下是影响Apache的性能配置参数:

  Timeout  300

  指定站点响应的时间秒数。若超过这段时间仍未收到或送出数据,就断开连接。意思是该参数指定Apache在接收请求或发送所请求内容之前的最长等待时间(秒),若超过该时间Apache则放弃处理该请求,并释放连接。该参数默认值为120,推荐设置为60,对于访问量较大的网站可以设置为30。

  KeepAlive On|Off

  启用此项,表示允许保持持久连接,让每次连接能提出多个请求。避免每请求一个文件就跟服务器建立一次连接。也就是控制Apache是否允许在一个连接中有多个请求,默认打开。但对于大多数论坛类型站点来说,通常设置为off以关闭该支持。

  MaxKeepAliveRequests 100

  每次连接可提出请求的数量,设置为0表示数量不限,默认值为100。.

  KeepAliveTimeout 15

  连续两个请求之间的时间如果超过15秒还未到达,则视为连接中断。这种做法可以最大限度地利用有限的资源,这也是Apache性能如此优越的原因之一。

  MinSpareServers 5

  MaxSpareServers 20

  Apache在运行时会根据负载的轻重自动调整空闲子进程的数目。

  提供浏览服务的httpd进程的数目需要随连接数目的多少而变化,因此需要随时保持几个闲置的httpd进程等候新的连接请求。若闲置的进程数少于5个(默认值),则表示闲置进程太少,需要将其增加到5个;

  若多于20个(默认值)则表示闲置进程太多,需将其减少到20个。

  MaxClients 150

  同时接入的数目太多时会降低系统访问性能,设置此参数可限制同时连接的最大数值,默认值为150,它设定的就是Apache可以同时处理的请求,这是对Apache性能影响最大的参数

  MaxClients和MaxRequestPerchild;MaxClients指定Apache在同一时间内最多允许有多少客户端能够与其连接,如果超过MaxClients个连接,客户端将会得到一个“服务器繁忙”的错误页面。我们看到默认情况下MaxClients设置为15,这对一些中型站点和大型站点显然是远远不够的!也许您需要同时允许512个客户端连接才能满足应用需求,好吧,那么就让我们把MaxClients修改为512,保存httpd.conf并退出,重启Apache,很遗憾,在重启过程当中您看到了一些错误提示,Apache重启失败。错误提示中告诉您 MaxClients最大只能设定为256,相信您一定很失望。不过不要沮丧,Apache作为世界一流的Web Server一定不会如此单薄的!在默认情况下,MaxClients的确只能设定为不超过256的整数,但是,如果您有需要完全可以随意定制,此时就需要使用ServerLimit参数来配合使用,简单的说ServerLimit就像是水桶,而MaxClients就像是水,您可以通过更换更大的水桶(将ServerLimit设定为一个较大值)来容纳更多的水(MaxClients),但要注意,MaxClients的设定数值是不能大于 ServerLimit的设定数值的!下面让我们了解一下MaxRequestPerChild参数,该参数指定一个连接进程中可以有多少个线程同时工作。也许这样解释过于专业,那么您只要想想“网络蚂蚁”、“网际快车FlashGet”中的“多点同时下载”即可,该参数实际上就是限制最多可以用几个“点”。默认设置为0,即为:不限制。但需要注意,如果将该值设置的过小会引起访问问题,如果没有特殊需要或者访问量压力并非很大可以保持默认值,如果访问量很大则推荐设置为2048

  优化建议:

  # 升级 Apache 到最新版本,新版本往往包含性能提升和安全更新。

  # 在 httpd.conf 中设置 "HostNameLookups off" 能避免针对每个访问者的 DNS 域名的反向查询。

  # 对于繁忙的网站,在 httpd.conf 中设置 "MaxClients 230" 或者更高。这项设置让更多的 httpd 进程同时响应请求,并避免了处理器排队的情况发生。

  # 采用另外一台服务器处理图片文件。

  # 缺保您的 Web 页面和 CGI 页面采用了浏览器缓冲技术。具体的文章可以参考本站:采用 mod_gzip 加速 Zope 和 Apache

  # 保持您的 Apache 苗条,编译那些仅仅需要的模块,在编译之前,修改 src/Configuration 文件,在那些不需要的模块之前用 # 号注释掉。

  # 如果不需要流量日志,那么把 httpd.conf 中的 TransferLog 指向到 /dev/null/

  # 除非你确定使用 .htaccess 文件来控制一些目录的权限,否则设置 "AllowOverride None" ,这样就免去 Apache 在每个目录搜索 .htaccess 文件的劳役之苦。

  # 不要让不需要的后台进程运行。

  # 千万不要把页面或者日志文件写到网络磁盘上,例如 NFS。

  # 不要让 Apache (httpd) 运行于 inetd 模式。

  # 不要让 X Windows 运行在你的 Web 服务器上,用 Ctrl-Alt-Backspace 关闭 X 。

  # 避免使用 SSI tag。

  # 在 CGI 脚本中:

  * 文件 I/O:打开的文件数目越少越好。

  * Shell 命令:采用全路径来调用 shell 命令。

  * 如果你的网站主要以 CGI 来驱动,那么请使用 mod_perl。

  * 在你的 Web 页面目录中,不要让文件数超过 1000 个,文件越多花费在定位上的时间也越多。

  # 在 Web 服务器上的图片越少越好,保证每个图片都经由图片压缩器运行。

  # 对你的网站做压力测试,建议采用 Apache 自带的 ab 命令来测试。

  # 为了最好的性能,最好把网线拔掉,这样你的 Web 服务器就十分安全,而且负载马上降为 0,

本原创文章未经允许不得转载 | 当前页面:蒙面人生 » Apache 性能优化调整

评论