LoaRunner性能测试系统学习教程:MPM调优(6)

上期我们讲到LoaRunner性能测试编译时的配置 , 这期我们讲LoaRunner性能测试MPM调优 。
MPM调优Apache HTTP服务器是一个设计强大并灵活的web服务器 。
可以在很多平台下进行功能 , Apache通过模块化的设计 , 让其能适应各种环境 。
Apache 2.0 扩展MPM模块化设计到最基本的 web 服务器功能 。它提供了可以选择的多处理模块(MPM) , 用来绑定到网络端口上 , 接受请求 ,以及调度子进程处理请求 。
MPM:Multi-Processing Module(多通路处理模块) 。
MPM处理的模式有很多种:
prefork MPM、worker MPM、BeOS MPM
NetWare MPM、OS/2 MPM、WinNT MPM等 。
类UNIX常用的模块三种:
prefork 、worker 、event 。 windows主要使用WinNT模块 。
选择MPM不同的操作系统支持的MPM模块也有所不同 , 那么如何选择MPM呢?一般情况下我们安装好Apache服务器后 , 会有一个默认选择好的MPM模块 , 通过以下命令可以查看所选择的MPM模块 。
1)window下确定所安装的mpm模块
对于window在CMD窗口输入以下命令 。
C:\DocumentsandSettings\Administrator>C:\wamp\Apache2\bin\httpd.exe-l
Compiledinmodules:
core.c
mod_win32.c
mpm_winnt.c
http_core.c
mod_so.c
2)类unix下确定所安装的mpm模块
对类unix操作系统输入以下命令 。
[root@localhostbin]#./apachectl-l
Compiledinmodules:
core.c
mod_so.c
http_core.c
event.c
如果需要修改所选择的MPM模块 , 可以使用--with-mpm=NAME选项来设置 。 其语法格式如下:
./configure[OPTION]...[VAR=VALUE]...
./configure--with-mpm=MPM
MPM为我们需要选择的MPM模块名 。
MPM模块工作原理主要介绍常用的几种MPM模块的工作原理 。 常用的MPM模块一般有三种:
prefork、worker、event 。
1)prefork模块
prefork模块工作原理如图所示 。
LoaRunner性能测试系统学习教程:MPM调优(6)文章插图
1.当apache启动时 , apache服务器会生成一个主进程 , 这个主进程是由root来生成 。
2.依靠主进程生成多子进程 , 生成的这些子进程中 , 每个子进程会对应生成一个线程 , 至于服务器能生成多少子进程是取决于startserver和serverlimt两个参数 。
3.每子进程会生成一个线程 , 每个线程同时只能处理一个HTTP请求 , 即apache服务器最多可能同时处理的HTTP请求数是取决于服务器生成的子进程数 。
服务器会实时监控为客户端所提交的HTTP提供空闲的子进程来处理请求 , 如果没有空闲的子进程 , 那么服务器就会生成更多的子进程来处理HTTP请求 , 直到达到最大的子进程数 。
apache服务器会使用
StartServers
MinSpareServers
MaxSpareServers
MaxRequestWorkers
四个参数来自动的调节服务器所需要生成的子进程 。
MaxRequestsPerChild参数主要用于防止服务器崩溃
因为如果将MaxRequestsPerChild设置成无限大时可能会导致内存不够用 , 最后服务器崩溃 。
prefork主要的问题是不能很好地处理更多的并发业务 , 因为每个子进程只能生成一个线程 , 即每个子进程只能处理一个HTTP请求 , 如果需要让其处理更多的并发业务 , 那么就必须生成更多的子进程 , 这样就会消耗更多的系统资源 。
2)worker模块
worker模块工作原理如图所示 。
LoaRunner性能测试系统学习教程:MPM调优(6)文章插图
1.当apache启动时 , apache服务器会生成一个主进程 , 这个主进程是由root来生成的 。
2.依靠主进程生成多子进程 , 至于能生成多少子进程是取决于
startserver和serverlimt 。
3.每子进程会生成多个线程 , 以及一个侦听器线程 , 该线程侦听连接并将连接到达时将其传递给服务器线程进行处理 。
至于每个进程能生成多少线程是取决于
ThreadsPerChild 。
4.每个线程同时只能处理一个HTTP请求 。
ApacheHTTPServer始终会在维护一个备用的或空闲服务器的线程池 , 这样可以保证服务器随时准备处理客户端所送过来的请求 , 客户端也无需等待新的线程即可以处理HTTP请求 。 最初启动的进程数由StartServers指令来设置 。 在服务器运行期间 , 服务器会评估所有进程中空闲线程的数量 , 如果空闲线程数太多 , 服务器会尝试终止一些线程 , 以使空闲线程数保存在最小空闲和最大空闲数之间 。 这些数据在整个过程中都是自我调节的 , 所以我们一般不要修改原来的默认值 。
服务器可以支持的同时服务的最大客户端的数量由MaxRequestWorkers指令确定 。
服务最大的活动子进程数量等于
MaxRequestWorker