apache性能优化

通过修改apache的配置文件,能对apache的很多特性进行控制和优化

一、AllowOverride

  尽量不要使用.htaccess文件,重写该文件所在目录的apache配置信息,尤其是在这个目录或其下级所有目录访问量比较大的位置,应关闭该选项(AllowOverride none),并把这些配置信息直接写在apache的配置文件里,如httpd.conf。

  如果该选项被打开 AllowOverride AuthConfig | FileInfo | Indexes | Limit,那么apache会对对被打开该选项的目录及其所有子目录的访问进行.htaccess文件检查。

  例如:

  <Directory /var/www/>

    AllowOverride All

  </Directory>

  假现在有一个对 /var/www/htdocs/images/201003/bg.jpg 的访问,那么apache会对以下目录进行.htaccess文件检查:

  /var/www/

  /var/www/htdocs/

  /var/www/htdocs/images/

  /var/www/htdocs/images/201003/

  这需要一定的系统消耗,特别是在一个访问量较大的系统中,系统消耗更加明显。

     性能最佳配置是:

  <Directory /var/www/>

    AllowOverride none

  </Directory>

 二、与DNS相关的优化

  1、关闭HostnameLookups(HostnameLookups Off)

       打开该选项会使apache对每个访问请求的client IP地址进行反向解释并对反向解释结果进行正向解释,以验证该名称的正确性。这无疑会增加apache对请求的响应时间。

  2、不要用域名进行访问控制配置,而是直接使用IP,例如:

    <Directory /var/www/>

      Deny from all

      Allow from 127.0.0.1 # 这里使用IP,而不是域名

    </Directory>

    如果使用域名,同样会造成apache进行反向及正向两次解释,apache文档原文如下:

    you will pay for two DNS lookups (a reverse, followed by a forward lookup to make sure that the reverse is not being spoofed).

 

     性能最佳配置是:

  HostnameLookups Off

  <Directory /var/www/>

    order deny allow

    Deny from all

    Allow from 127.0.0.1 # 这里使用IP,而不是域名

  </Directory>

三、FollowSymLinks 和 SymLinksIfOwnerMatch

  1、尽量打开FollowSymLinks,如:

    <Directory /var/www/>

      Options FollowSymLinks

    </Directory>

    该选项是控制是否充许用户请求符号连接的文件,如果关闭该选项,如:

    <Directory /var/www/>

      Options -FollowSymLinks

    </Directory>

    则会导致apache对每个请求,检查从/var/www/目录开始的所有目录及其下级目录与最终的文件进行检查,判断每一级目录和所指向的文件是否为符号连接,与AllowOverride类似,这将是一笔可观的开销。

  2、应尽量关闭SymLinksIfOwnerMatch,如:

    <Directory /var/www/>

      Options -SymLinksIfOwnerMatch

    </Directory>

    因为FollowSymLinksIfOwnerMatch 的选项打开,会在文件所有者与连接所有者相同时使用符号连接,其它情况不充许,会引起符号连接检查。

     性能最佳配置是:

  <Directory /var/www/>

    Options FollowSymLinks -SymLinksIfOwnerMatch

  </Directory>

 

四、MPM(Multi-Processing Module)优化

  apache具有三种MPM,但每次只能有一个MPM是活动的,必须使用 --with-mpm=(worker|prefork|event) 静态编译。

  prefork——传统MPM,每个请求使用一个进程;

  worker——较新的MPM,它使用多个进程,每个进程又有多个线程,这样就能以较低的开销获得更好的性能。

  event——最新的MPM,是一种实验性的模型,为不同的任务使用单独的线程池。

  选择使用何种MPM取决于许多因素。在event MPM 脱离实验状态之前,不应考虑这种模型,而是在使用prefork和worker之间作出选择。表面上看来,如果所有底层模块(包括 PHP 使用的所有库)都是线程安全的,线程要优于分叉(forking)。而 Prefork 是较为安全的选择;如果选择了 worker,则应该谨慎测试。

  1、确定你的apache使用的是哪种MPM

    httpd -l

    在ubuntu linux中,可用下面两种方法查看:

    方法1、

    ################

    apache2 -l

    Compiled in modules:
      core.c
      mod_log_config.c
      mod_logio.c
      prefork.c
      http_core.c
      mod_so.c

    #################

    方法2、

    #################

    dpkg -l |grep apache
    ii  apache2                         2.2.16-1ubuntu3                   Apache HTTP Server metapackage
    ii  apache2-mpm-prefork             2.2.16-1ubuntu3                   Apache HTTP Server - traditional non-threaded model
    ii  apache2-utils                   2.2.16-1ubuntu3                   utility programs for webservers
    ii  apache2.2-bin                   2.2.16-1ubuntu3                   Apache HTTP Server common binary files
    ii  apache2.2-common                2.2.16-1ubuntu3                   Apache HTTP Server common files
    ii  libapache2-mod-php5             5.3.3-1ubuntu9.1                  server-side, HTML-embedded scripting language (Apache 2 module)

    #################

  2、prefork配置实例

    ######################

    <IfModule mpm_prefork_module>
      StartServers           50
      MinSpareServers     15
      MaxSpareServers    30
      MaxClients         225
      MaxRequestsPerChild  4000
    </IfModule>

    #######################

    StartServers:Web 服务器启动时,预先启动 50 个进程

    MinSpareServers及MaxSpareServers:apache尽力保持 15 到 30 个空闲服务器运行。

    MaxClients:充许启动的最大进程数,如果这个数量超过256,必须设置 ServerLimit,大于或等于MaxClients。由于内存容量有限,这个数值过大会引起过多的内存交换(swap),从而降低整体服务质量,如果过小又不能充份利用服务器资源,所以要视具体情况而定。

    MaxRequestsPerChild:尽管一个进程能够处理许多相继的请求,但这里Apache 还是会取消连接数超过 4,000 以后的进程,这降低了内存泄漏的风险。

    实际的配置要根据你的服务器的硬件资源及访问量而定,没有一个绝对的优化数值。

posted on 2010-11-29 15:12  南腔北调  阅读(483)  评论(0编辑  收藏  举报

导航