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模块工作原理如图所示 。
文章插图
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模块工作原理如图所示 。
文章插图
1.当apache启动时 , apache服务器会生成一个主进程 , 这个主进程是由root来生成的 。
2.依靠主进程生成多子进程 , 至于能生成多少子进程是取决于
startserver和serverlimt 。
3.每子进程会生成多个线程 , 以及一个侦听器线程 , 该线程侦听连接并将连接到达时将其传递给服务器线程进行处理 。
至于每个进程能生成多少线程是取决于
ThreadsPerChild 。
4.每个线程同时只能处理一个HTTP请求 。
ApacheHTTPServer始终会在维护一个备用的或空闲服务器的线程池 , 这样可以保证服务器随时准备处理客户端所送过来的请求 , 客户端也无需等待新的线程即可以处理HTTP请求 。 最初启动的进程数由StartServers指令来设置 。 在服务器运行期间 , 服务器会评估所有进程中空闲线程的数量 , 如果空闲线程数太多 , 服务器会尝试终止一些线程 , 以使空闲线程数保存在最小空闲和最大空闲数之间 。 这些数据在整个过程中都是自我调节的 , 所以我们一般不要修改原来的默认值 。
服务器可以支持的同时服务的最大客户端的数量由MaxRequestWorkers指令确定 。
服务最大的活动子进程数量等于
MaxRequestWorker
- 巅峰|realme巅峰之作:120Hz+陶瓷机身+5000mAh 做到了颜值与性能并存
- 华为|骁龙870和骁龙855区别都是7nm芯片吗 性能对比评测
- 器件|苏州纳米所等在高性能柔性储能器件研究中取得进展
- 超强|RedmiNote9系列发布!天玑800U赋予超强5G性能
- iPhoneX|iPhone12和iPhoneX性能对决:差距比想象的大太多
- Redmi|Redmi Note 9系列发布,搭载天玑800U具备超强5G性能
- 首发|华为或首发联发科6纳米+A78新U:性能超强不输麒麟9000
- 华为|安兔兔10月安卓性能榜:华为Mate40 Pro第一 麒麟9000碾压骁龙865
- 骁龙865|5G手机中的性能怪兽,256+120W闪充,比iPhone12值得买
- 网间|新外观专利陆续曝光 徐起和网间透露realme极致性能新机将至