如何调整Linux服务器上的Apache prefork mpm值

目前我在Apache / 2.4.23版本,我在我的networking服务器上运行多个虚拟主机站点在ELB后面。 我的ELB下有4个实例,每个都有8GB的内存。 在这些Web服务器上,我看不到在我的httpd.conf文件中设置的任何mpm指令,因为我可以在httpd-mpm.conf文件(位于/usr/share/doc/httpd24-2.4)中看到mpm模块指令的默认值0.23)。 我的networking服务器正在使用prefork mpm模块

httpd -V | grep MPM Server MPM: prefork 

目前,所有4个networking服务器只剩下大约200MB的剩余空间,而且我发现总共有大约60个httpd进程正在运行。 以下是指标

 [root@ip ~]# ps -ef | grep httpd | wc -l 58 [root@ip ~]# ps -ylC httpd | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Proccess Size (MB): "x/((y-1)*1024)}' Apache Memory Usage (MB): 1640.18 Average Proccess Size (MB): 38.1438 [root@ip ~]# free -m total used free shared buffers cached Mem: 7986 7755 231 51 114 233 -/+ buffers/cache: 7407 579 Swap: 0 0 0 

为了增加我的服务器性能,我打算用下面的prefork mpm指令更新我的httpd.conf文件。 我想改变的唯一的是MaxRequestWorkers值从250到400。

 <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 400 MaxConnectionsPerChild 0 </IfModule> 

编辑 :下面是httpd-mpm.conf文件中的默认设置。 但是我没有在httpd.conf文件中看到任何prefork mpm模块设置,从而假设我的web服务器正在使用低于默认值

 <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 250 MaxConnectionsPerChild 0 </IfModule> 

以下是最高的输出:

 top - 13:26:31 up 21:08, 1 user, load average: 0.27, 0.17, 0.12 Tasks: 201 total, 1 running, 199 sleeping, 0 stopped, 1 zombie Cpu(s): 0.7%us, 0.3%sy, 0.0%ni, 98.3%id, 0.7%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 8178632k total, 7985364k used, 193268k free, 113336k buffers Swap: 0k total, 0k used, 0k free, 189448k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 26918 apache 20 0 764m 53m 39m S 0.0 0.7 0:01.65 httpd 24963 apache 20 0 769m 50m 36m S 0.3 0.6 0:01.39 httpd 26026 apache 20 0 769m 49m 34m S 0.0 0.6 0:00.81 httpd 26116 apache 20 0 769m 47m 32m S 0.0 0.6 0:01.06 httpd 25766 apache 20 0 769m 47m 32m S 0.0 0.6 0:00.95 httpd 27620 apache 20 0 769m 47m 32m S 0.0 0.6 0:00.47 httpd 26548 apache 20 0 769m 47m 32m S 0.0 0.6 0:00.66 httpd 27128 apache 20 0 769m 46m 32m S 0.0 0.6 0:01.16 httpd 28247 apache 20 0 769m 46m 31m S 0.0 0.6 0:00.24 httpd 27670 apache 20 0 769m 46m 31m S 0.0 0.6 0:00.32 httpd 27424 apache 20 0 769m 46m 31m S 0.0 0.6 0:00.41 httpd 24378 apache 20 0 763m 46m 33m S 0.0 0.6 0:01.28 httpd 26800 apache 20 0 763m 45m 32m S 0.0 0.6 0:00.75 httpd 27672 apache 20 0 763m 45m 31m S 0.0 0.6 0:00.53 httpd 26614 apache 20 0 762m 45m 33m S 0.0 0.6 0:00.88 httpd 25098 apache 20 0 762m 44m 32m S 0.0 0.6 0:01.20 httpd 26671 apache 20 0 763m 44m 31m S 0.0 0.6 0:00.64 httpd 27635 apache 20 0 763m 44m 31m S 0.0 0.6 0:00.61 httpd 23499 apache 20 0 763m 43m 29m S 0.0 0.5 0:01.77 httpd 26285 apache 20 0 767m 43m 29m S 0.3 0.5 0:00.70 httpd 27868 apache 20 0 761m 42m 31m S 0.3 0.5 0:00.70 httpd 26444 apache 20 0 763m 42m 29m S 0.0 0.5 0:00.73 httpd 26081 apache 20 0 763m 42m 29m S 0.0 0.5 0:00.68 httpd 25467 apache 20 0 763m 42m 29m S 0.0 0.5 0:00.99 httpd 26412 apache 20 0 763m 42m 28m S 0.0 0.5 0:00.53 httpd 27412 apache 20 0 763m 42m 29m S 0.0 0.5 0:00.45 httpd 26720 apache 20 0 763m 42m 29m S 0.0 0.5 0:00.51 httpd 26179 apache 20 0 763m 42m 29m S 0.0 0.5 0:00.59 httpd 25943 apache 20 0 763m 42m 29m S 0.0 0.5 0:00.78 httpd 27570 apache 20 0 763m 42m 28m S 0.0 0.5 0:00.28 httpd 26721 apache 20 0 763m 42m 28m S 0.0 0.5 0:00.46 httpd 27252 apache 20 0 763m 42m 28m S 0.0 0.5 0:00.54 httpd 27408 apache 20 0 763m 42m 28m S 0.0 0.5 0:00.29 httpd 27612 apache 20 0 763m 42m 28m S 0.0 0.5 0:00.36 httpd 27576 apache 20 0 763m 42m 28m S 0.0 0.5 0:00.28 httpd 27668 apache 20 0 883m 41m 28m S 0.0 0.5 0:00.31 httpd 27626 apache 20 0 763m 41m 28m S 0.0 0.5 0:00.32 httpd 

我的问题是,这种改变是否会帮助我的networking服务器使用更less的系统内存,并且能够有效地处理负载。 而且,由于我的networking服务器上的可用空间较less,MaxRequestWorkers的值从250更改为400会导致进一步的问题 ? 有没有更好的解决scheme来优化我的服务器上的内存消耗?

我不知道为什么你会selectprefork工人。 既然你已经在使用Apache / 2.4.23了。 请参阅: 这里的答案将主要用于工作者 ,也是高效的内存和并发。

工人

mpm_worker使用线程 – 这对于并发是一个很大的帮助。 工作人员将一些subprocess分离出来,然后再分离子线程; 类似于prefork,如果可能的话,一些备用线程保持准备就绪,以服务传入的连接。 这种方法对RAM更友善,因为线程数并不直接影响内存使用,例如prefork中的服务器数量。 它也更容易处理并发,因为连接只需要等待一个空闲线程(通常是可用的)而不是prefork中的备用服务器。

PS。 由于分数不足而无法评论。