摘 apache专栏
|-转 性能测试—Apache多处理模块MPM相关参数设置
本章节主要讲解:“Apache多处理模块MPM相关参数设置解析”,MPM模块常见的相关参数包括:
MaxSpareServers、MinSpareServers、ServerLimit、StartServers、ThreadsPerChild、MaxConnectionsPerChild 、MaxRequestWorkers、ListenBackLog、ListenCoresBucketsRatio、MaxMemFree和ReceiveBufferSize。
1) MaxSpareThreads
- 表示最大空闲线程数
- 语法:MaxSpareThreads number
- 适合的MPM模块:event,worker,mpm_netware,mpmt_os2
该指令设置空闲子进程的最大数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。只有在非常繁忙机器上才需要调整这个参数,此参数设的通常不能设置过大,直到空闲线程的数量小于该数量为止。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成“MinSpareServers+1”。
对于worker和event来说,该荐默认值为 MaxSpareThreads 250。
对于mpm_netware默认为 MaxSpareThreads 100。
mpmt_os2的工作与mpm_netware。对于 mpmt_os2默认值10。
注意:
MaxSpareThreads值的范围受到限制。Apache httpd将根据以下规则自动更正给定值:
mpm_netware该值需要大于 MinSpareThreads。
对于worker和event,该值必须大于或等于
MinSpareThreads和 ThreadsPerChild的和。
2) MinSpareServers
- 表示可用于处理请求峰值的最小空闲线程数
- 语法:MinSpareThreads number
- 适合的MPM模块:event,worker,mpm_netware,mpmt_os2
表示处理请求峰值的最小空闲线程数。不同的MPM处理此指令的方式有所不同。
worker模块和event模块该项默认值为 MinSpareThreads 75。如果服务器的空闲线程数小于所设置的值,则会创建子线程,直到空闲线程数大于我们所设置的最小空闲线程数。
如果服务器中没有足够的空闲线程,则将创建子进程,直到空闲线程的数量大于number为止。如果ListenCoresBucketsRatio 启用,可能会创建其他进程/线程。mpm_netware模块的默认值为 MinSpareThreads 10,对于 mpmt_os2模块默认值为5。
3) ServerLimit
- 表示可配置进程数的上限
- 语法:ServerLimit number
- 适合的模块:event,worker,prefork
对于preforkMPM来说是通过MaxRequestWorkers来配置的,因为preforkMPM是一个子进程只生成一个线程。
对于worker和eventMPM来说会通过ThreadLimit和MaxRequestWorkers两个参数来配置其最大值。MaxRequestWorkers指令可以在服务器重启过程中修改。
使用这个指令时必须特别注意的是,ServerLimit的值不能设置的比实际的使用的值高出太多,如果设置的值过大,则会分配很多我们并不需要使用的内存。如果将ServerLimit和MaxRequestWorkers都设置为高于系统可以处理的值,则Apache httpd可能无法启动,或者系统可能变得不稳定。
- 注意:一般来说ServerLimit最大的值可以设置到20000,这是由服务器限制的,如果需要设置为更大的值,那么需要修改mpm源文件中的MAX_SERVER_LIMIT值。
4) StartServers
- 表示服务器启动时创建的子进程数
- 语法:StartServers number
- 合适的MPM模块:event,worker,prefork,mpmt_os2
- StartServers指令用于设置启动时创建的子服务器进程的数量。通常会根据:MinSpareThreads、MaxSpareThreads、MinSpareServers、MaxSpareServers来动态调整StartServers的值。
缺省值因MPM而异。worker和event默认为StartServers 3,prefork默认为5,mpmt_os2 默认为2。
5) ThreadsPerChild
- 表示每个子进程创建的线程数
- 语法:ThreadsPerChild number
- 适合的模块:event,worker,mpm_winnt
该指令表示设置每个进程创建的线程数,服务器启动时先是创建子进程数,再创建线程,如使用mpm_winnet模块,则只会生成一个子进程,那么该指令设置应该需要大于服务器处理的最大负载,如果使用worker模块,会生成多个子进程,则线程总数应大于服务器的负载。
- mpm_winnt该指令的缺省值为25。其它的MPM缺省值ThreadsPerChild是 64。
- ThreadsPerChild设置的值不能超过ThreadLimit的值。如果配置了更高的值,它将在启动时自动减小并记录警告日志信息。
6) MaxConnectionsPerChild
- 表示每个线程最多可以处理的连接数
- 语法:MaxConnectionsPerChild number
- 默认:MaxConnectionsPerChild 0
- 模块:event,worker,prefork,mpm_winnt,mpm_netware,mpmt_os2
- 兼容性:可用的Apache HTTP Server 2.3.9和更高版本。老的版本该参数为MaxRequestsPerChild 。
MaxConnectionsPerChild这个指令主要是设置单个子进程最多可以处理的连接数。如果子进程伺服的连接数达到这个最大值,那么该子进程就会被杀掉。...