前言

本文档基于对apache的学习整理而成的笔记。本文档详细的记录了apache各种应用,以及一些个人的理解,如果偏差,请和我联系,以在下一个版本中进行更正。其中大部分文档均来自网络,感谢网络上各位朋友的分享,才有此文档的出现。其中本人对参考的部分网络文档进行适当的修改,以达到更好的参考效果。也希望各位积极的分享文档,为开源事业做出自己力所能及的贡献。

                                             itnihao  20121004日于成都

第十七章 apache 性能调优

17.1对程序本身的优化

   在GCC的默认情况下,大多数程序和库都是带调试符号(默认使用GCC-g选项)编译的,Apache也不例外,这些调试符通常只在调试程序的时候使用,它不但能给出内存地址,还能给出变量和函数名称。但是这对生产服务器来说是不必要的,因为没有人在服务器上调试Apache.而且因为调试符号的存在,Apache在运行的时候会占用更多的内存,虽然数量不大,但是如果大量的Apache进程运行,内容累积起来,也不是一个小数目

[root@localhost ~]# ls /usr/local/apache/bin/httpd  -l

-rwxr-xr-x. 1 root root 1879241 Aug 22 19:31 /usr/local/apache/bin/httpd

[root@localhost ~]# strip /usr/local/apache/bin/httpd

[root@localhost ~]# ls /usr/local/apache/bin/httpd  -l   

-rwxr-xr-x. 1 root root 564968 Oct  3 00:45 /usr/local/apache/bin/httpd 

此处可以看到清除调试符后的体积只有原先的30%,具体视情况而定

17.2 Apache的监控模块mod_status

Mod_status可以监控的对象

当前工作的进程数量

空闲的进程数量

服务器已经运行的时间

当前正在连接的主机的请求

单个进程的CPU使用率和Apache当前CPU使用的百分比

每秒平均请求量,每秒发送字节数,每个请求发送字节数

修改配置文件httpd.conf

LoadModule status_module modules/mod_status.so

添加监控内容

<location /server-status>
    SetHandler server-status
    Order Deny,Allow
          Deny from all
          Allow from 127.0.0.1 192.168.16.90
</location>

ExtendedStatus  On

http://192.168.16.30/server-status           访问监控页面

http://192.168.16.30/server-status?refresh=1  1秒刷新一次

http://192.168.16.30/server-status?notable    不支持表格的浏览器,使用此参数

http://192.168.16.30/server-status?auto       提供易读的报告

http://192.168.16.30/server-status?auto?refresh=1 易读的报告,每秒刷新一次


17.3运用cacti监控apache

APACHE端安安装配置snmp

com2sec mynetwork 127.0.0.1 public

com2sec mynetwork 192.168.16.254 public  #cacti监控机为192.168.16.254

group MyROGroup v2c mynetwork

view all included .1 80

access MyROGroup "" any noauth prefix all none non

cacti添加主机

模板下载地址http://forums.cacti.net/about25227.html&highlight=apachestats 

添加默认模板,方便以后所有主机添加该模板

 

注意,apache端需要允许cacti监控,即 Allow from 127.0.0.1 192.168.16.90

17.4 mod_info的使用

Httpd.conf开启该模块,去掉注释

LoadModule info_module modules/mod_info.so

添加以下模块

<location /server-info>

SetHandler server-info

    Order Deny,Allow          

    Deny from all          

    Allow from 127.0.0.1 192.168.16.90 192.168.16.254

</location>

17.5 .htaccess文件的调优

Apache中,通常都是在httpd.conf文件中完成对服务器的配置,但是对于一些管理员来说,更简单更精细化的控制目录可以更有用。

AccessFileName  .config  指定.htaccess文件名为.config

调用参数 AllowOverride  选项

All         使用所有能在.htaccess文件中使用的指令

AuthConfig  使用授权指令,如AuthName AuthType

Fileinfo     使用控制文件类型的指令,如ErrorDocumentSetoutputFilter

Indexes     使用目录索引指令

Options     使用控制目录功能指令

Limit       使用主机访问控制指令

例如,启动.htaccess文件功能,并让htaccess文件支持目录索引指令

AllowOverride  Indexes

例如在/var/www/html/web目录下的.htaccess中写入下面的内容后,该目录就可以支持CGI

Option  +EsecCGI

AddHandler cgi-script  cgi  pl

使用.htaccess好处

可以随时对目录功能和权限进行控制

二是写入.htaccess文件后无需重启Apache服务

  虽然.htaccess有如此多的优点,但它存在的缺点会导致服务器性能的急速下降,这是因为使用看了AllowOerride指令允许使用.htaccess文件后,无论是否使用.htaccess文件,Apache都会在每个目录下面查找.htaccess文件,其次,当每个请求链接到来时,Apache会查找链接所请求目录下面的.htaccess文件,并且查找它的上级目录中的.Htaccess文件以使。Htaccess文件内的设置都能生效;另外还存在安全问题,.Htaccess文件可以修改和覆盖服务器的指令。

  解决办法:

     在<Directory>容器中使用AllowOverride指令开启。另外严格制定执行,目录,尽量不用ALL参数来启动所有指令

17.6 模块加载的调优

DSO中模块的加载顺序:

   DSO模块装入顺序决定了Apache使用它们处理URL的顺序,DSO模块总是以最后装入的模块为优先进行处理,而第一个装入的模块则是在最后一个被处理

例如:

LoadModule alias_module modules/mod_alias.so

LoadModule rewrite_module modules/mod_rewrite.so

mod_rewrite模块会在mod_alias之前处理请求的URL。因此,可以通过调整加载顺序来改变执行的优先级,但此问题在2.X版本中表现不是很明显。

17.7 Apache所提供的性能调优指令

KeepAlive:        通过“on”与“off”开关来设置是否使用HTTP持久连接

MaxKeepaliveRequest 一个持久连接中允许的最大请求数量,默认为100,推荐设置更大

KeepaliveTimeout    设置持久连接中服务器在两次请求之间等待的秒数,默认为5秒,对于高负荷服务器来说,KeepaliveTimeout值较大会导致一些性能问题,超时值越大,与空闲客户端保持连接的进程就越多。因此,用户需要测试一下自己的系统再决定这个值的大小

MaxKeepaliveRequest 在启用了持久连接后每个连接允许的请求数量,如果将此值设为0,则不进行限制。推荐将它设置得更大一些。