Apache prefork、work、event三种工作模式配置优化详解
三种工作模式配置详解及需要优化的关键配置
0.1 perfork MPM
|
|
StartServers: 数量的服务器进程开始
MinSpareServers: 最小数量的服务器进程,保存备用
MaxSpareServers: 最大数量的服务器进程,保存备用
MaxRequestWorkers: 最大数量的服务器进程允许开始
MaxConnectionsPerChild: 最大连接数的一个服务器进程服务
0.2 worker MPM
|
|
StartServers: 初始数量的服务器进程开始
MinSpareThreads: 最小数量的工作线程,保存备用
MaxSpareThreads: 最大数量的工作线程,保存备用
ThreadsPerChild: 固定数量的工作线程在每个服务器进程
MaxRequestWorkers: 最大数量的工作线程
MaxConnectionsPerChild: 最大连接数的一个服务器进程服务
Worker 由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样, 为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;
而MaxRequestWorkers 设置了同时连入的clients最大总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程
MinSpareThreads和 MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节 。
ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用 ThreadLimit指令,它的最大缺省值是20000。
Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild 值决定的,应该大于等于MaxRequestWorkers。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时 也需要显式声明ServerLimit(最大值是20000)。需要注意的是,如果显式声明了ServerLimit,那么它乘以 ThreadsPerChild的值必须大于等于MaxRequestWorkers,而且MaxRequestWorkers必须是ThreadsPerChild的整数倍,否则 Apache将会自动调节到一个相应值。
0.3 event MPM
|
|
StartServers:初始数量的服务器进程开始
MinSpareThreads: 最小数量的工作线程,保存备用
MaxSpareThreads: 最大数量的工作线程,保存备用
ThreadsPerChild: 固定数量的工作线程在每个服务器进程
MaxRequestWorkers: 最大数量的工作线程
MaxConnectionsPerChild: 最大连接数的一个服务器进程服务