版本V1.0
时间2012-10-04
版权GPL
作者itnihao 邮箱 itnihao@qq.com
博客 http://itnihao.blog.51cto.com
如需重新发行,请注明以上信息,谢谢合作
前言
本文档基于对apache的学习整理而成的笔记。本文档详细的记录了apache各种应用,以及一些个人的理解,如果偏差,请和我联系,以在下一个版本中进行更正。其中大部分文档均来自网络,感谢网络上各位朋友的分享,才有此文档的出现。其中本人对参考的部分网络文档进行适当的修改,以达到更好的参考效果。也希望各位积极的分享文档,为开源事业做出自己力所能及的贡献。
itnihao 2012年10月04日于成都
第十七章 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 使用控制文件类型的指令,如ErrorDocument,SetoutputFilter
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,则不进行限制。推荐将它设置得更大一些。