vlambda博客
学习文章列表

Web服务器05-Apache优化深入

Web服务器05-Apache优化深入

ab压力测试工具

1、ab压力测试工具概述

       Apache附带的压力测试工具ab,非常容易使用,并且完全可以模拟各种条件对Web服务器发起测试请求。

       ab可以直接再Web服务器本地发起测试请求,这对于需要了解服务器的处理性能至关重要,因为它不包括数据的网络传输时间以及用户PC本地的计算机时间,从而可以通过观察各种时间标准判断Web服务器的性能,以便进行参数的优化调整。在进行性能调整优化过程中,可用ab压力测试工具进行优化效果的测试。


2、ab压力测试使用的注意事项

       ·优化前先使用ab进行压力测试

       ·优化后,重启服务,再使用ab进行压力测试

       ·对比两次测试的结果,看优化效果是否明显

       ·为了能更客观的评价Web服务的性能,一般优化前后都要运用4种以上测试工具进行多次测试,取测试结果的评价值进行对比


3、格式:ab -nN1 -cN2 网站网址

       -n       请求数总和

       -c       并发用户数

示例:[root@www ~]# ab -n2000 -c800 www.amber.com/index.html

Web服务器05-Apache优化深入

Web服务器05-Apache优化深入

Web服务器05-Apache优化深入

ab测试结果参数说明:

Server Hostname              请求的URL中的主机名

Server Port                     测试的Web服务器软件的监听端口

Concurrency Level              用户并发数

Time taken for tests       所有请求被处理完成所花费的总时间

Complete requests              总请求数

Failed requests              失败的总请求数

Requests per second       服务器吞吐率,每秒处理的请求数

Time per request              用户平均请求的等待时间

Time per request (mean,across all concurrent requests)       服务器平均请求处理时间

Percentage of the requests served within a certain time (ms)       描述每个请求处理时间的分布情况

 


Apache工作模式概述

       Apache作为现今Web服务器用的最广泛也是最稳定的开源服务器软件,其工作模式有许多种,源码包安装httpd时可查看httpd-mpm.conf文件,该文件位于extra/conf目录中。

       目前主要有两种模式:prefork模式和worker模式。


、prefork工作模式

1、prefork工作模式概述

       prefork是一个多路处理模块(MPM),实现了一个进程型的、预派生的Web服务器,适合于没有线程安全库、需要避免线程兼容性问题的系统。

       在要求每个请求相互独立的情况下具有很好的特性,若一个请求出现问题不会影响到其他请求。具有很强的自我调节能力,只需要很少的配置指令进行调整就可以适合于企业应用要求。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以避免所需要的内存超出物理内存的大小。


2、工作方式

       一个单独的控制进程(父进程)负责产生子进程,子进程用于监听请求并作出应答,因此在内存中会一直存在一些备用的(spare)或是空闲的子进程用于相应新的请求,可加快相应速度。

       父进程通常以root身份运行,以绑定80端口,子进程通常以一个低特权的用户运行,可通过配置项的User和Group配置。运行子进程的用户必须要对网站内容有读取权限,但是对其他资源必须拥有尽可能少的权限,以保证系统安全。

       编译安装时没有指定工作模式,默认会使用prefork模式,可用httpd -l或httpd-V查看。

[root@www ~]# httpd -l |grep prefork

  prefork.c

Web服务器05-Apache优化深入

在httpd-mpm.conf配置文件中,以下是prefork模块的定义

Web服务器05-Apache优化深入

StartServers              服务器启动时建立的子进程数量

MinSpareServers       空闲子进程最小数量,当空闲子进程数少于该数值将产生新的子进程

MaxSpareServers       空闲子进程最大数量,当空闲子进程数大于该数值将杀死多于子进程

MaxClients              限定最大用户并发数

MaxRequestsPerChild       每个子进程在其生存期内允许伺服的最大请求数量。如果设置为“0”,                                   子进程将永远不会结束。

       其中MaxRequestsPerChild建议设定为一个非零值,子进程达到设置的值的限制后,子进程将结束。能够防止内存泄漏无线进行,从而避免内存耗尽,有助于当服务器负载减轻的时候减少活动进程的数量。


3、配置prefork工作模式

优化时要根据企业网站情况进行调整

[root@www ~]# vim /usr/local/httpd/conf/httpd.conf

Web服务器05-Apache优化深入

[root@www ~]# /etc/init.d/httpd stop

Web服务器05-Apache优化深入

[root@www ~]# cd /usr/local/httpd/conf/extra/

[root@www extra]# cp -p httpd-mpm.conf httpd-mpm.conf.origin

[root@www extra]# vim httpd-mpm.conf

Web服务器05-Apache优化深入

上图为虚拟机512M内存的参考配置

[root@www extra]# /etc/init.d/httpd restart

 


配置优化建议:

       ·StartServers与MinServers应该一样

       ·根据网站的访问量进行设置,如设置MaxClients的数量为较大的一个值,以满足请求

       ·MaxRequestsPerChild应该设置一个值(经验值10000~30000)

       ·要结合系统的内存数量及负载进行配置

       ·默认的MaxClients最大是150个进程,如配置更大值,就得配置ServerLimit(服务极限)这个参数,20000是该参数的最大值,如需更大值,则需重新编译。


ab压力测试与调整前对比

Web服务器05-Apache优化深入

三、worker工作模式

1、worker工作模式概述

       work也是多路处理模块(MPM),使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。

       控制该MPM的最重要的指令是:控制每个子进程允许建立的线程数ThreadsPerChild指令和控制允许建立的总线程数的MaxClients指令。

prefork模式与worker模式的对比

prefork

worker

多进程

多线程

较慢

较快

CPU占用率高

CPU占用率低

稳定

较不稳定

对bug自我排错

无法自我排错

小流量网站使用

大流量网站使用


 


2、工作方式

       每个进程能够拥有的线程数量是固定的,服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程能够建立ThreadsPerChild数量的服务线程和一个监听线程,监听线程监听接入请求并将其传递给服务线程处理和应答。

       Apache总是会维持一个备用(spare)或是空闲的服务线程池,客户端无需等待新的线程或进程的建立即可得到服务。

       父进程一般都是以root身份启动,以绑定80端口;随后,Apache以较低权限的用户建立子进程和线程。User和Group指令用于配置Apache子进程的运行用户。子进程要对网页内容拥有读权限,但应该尽可能限制权限。

在httpd-mpm.conf中worker的定义

Web服务器05-Apache优化深入

StartServers              服务器启动时建立的子进程数量

MaxClients              限定最大用户并发数(数值为ServerLimit的值乘以ThreadsPerChild的值)

MinSpareThreads       空闲子线程最小数量,当空闲子线程数少于该数值将产生新的子线程

MaxSpareServers       空闲子线程最大数量,当空闲子线程数大于该数值将杀死多于子线程

MaxRequestsPerChild       每个子进程在其生存期内允许伺服的最大请求数量。如果设置为“0”,

                                   子进程将永远不会结束。

优化时要根据企业网站情况进行调整

Web服务器05-Apache优化深入

[root@www extra]# /etc/init.d/httpd restart


配置优化建议:

       ·根据网站的繁忙程度设置空闲进程数

       ·所有的线程数要大于MaxClient的设置值

       ·根据网站的实际运营情况适当调整

       ·考虑系统的内存与实际负载情况

 


Apache目录属性

       在Apache的配置文件中,对每一个目录都会有相关属性的设置。目录的权限设置使用 这对语句为主目录或虚拟目录设置权限,它们是一对容器语句,必须成对出现,它们之间封装的是具体的设置目录权限语句,这些语句仅对被设置的目录及其子目录起作用。


1、Options:用于定义目录使用那些特性

Indexes              当客户仅指定要访问的目录,但没有指定要访问哪个文件,而且目录下不存在默认网页时,返回目录中的文件和子目录列表

MultiViews       内容协商的多重试图,Apache的一个智能特性。当客户访问目录中一个不存在的对象时,如访问“http://www.amber.com/test/a”,Apache会查找到这个目录下所有a.*文件,如test目录存在a.gif文件,会将a.gif文件返回给客户,而不返回错误信息。

ExecCGI              允许在该目录下执行CGI脚本

FollowSymLinks       可以在该目录中使用符号链接

Includes                     允许服务器端包含功能

IncludesNoExec       允许服务器端包含功能,但禁止执行CGI脚本

All                     包含了除MultiViews之外的所有特性,如果没有Options语句,默认为All


2、AllowOverride:用于定义位于每个目录下.htaccess(访问控制,就是用于填写授权访问指令的文件,可在httpd-default.conf文件中指定文件名称)文件中的指令类型

None       不搜索该目录下的.htaccess文件

All              可在.htaccess文件中可以使用所有访问控制指令


[root@www ~]# vim /usr/local/httpd/conf/httpd.conf

Web服务器05-Apache优化深入

[root@www ~]# /etc/init.d/httpd stop

[root@www ~]# /etc/init.d/httpd start


Web服务器05-Apache优化深入

Web服务器05-Apache优化深入

Web服务器05-Apache优化深入

Web服务器05-Apache优化深入

Web服务器05-Apache优化深入

Web服务器05-Apache优化深入

[root@www ~]# /etc/init.d/httpd stop

[root@www ~]# /etc/init.d/httpd start


3、企业配置举例

Options                     应设置为None,以防止目录上内容暴露出去,造成安全隐患

AllowOverride              设置为None,禁止使用.htaccess文件,而将目录访问控制放在主配置文                                   件的 之间

根据目录的企业需求设置好allow与deny的控制对象,以控制客户端的访问。