如何启用Apache MPM Prefork来提高性能
Apache web服务器是最流行的服务器之一。Apache在处理平均流量方面做得非常好。但是,在某些情况下,如资源容量和所服务网站的复杂性,一旦您开始以高于平均负载的方式访问它,您可能会发现它有点困难。如果这描述了您正在经历的事情,那么多处理模块(MPM) Prefork模块可能是合适的。
我将向您展示如何在Apache上启用MPM Prefork模块,这里将在Ubuntu Server 18.04上进行演示。
MPM Prefork模块使用一个控制进程,该进程负责启动子进程。这些子进程侦听连接并在连接到达时提供服务。MPM Prefork是自我调节的,所以除非您需要更大的开销,否则几乎没有必要调整它的默认配置。
我将向您展示如何在Apache上启用MPM Prefork模块,我将在Ubuntu Server 18.04上进行演示。
一、如何启用mpm_prefork
很可能,mpm_prefork模块已经安装在您的Apache实例上,但是未启用。
Apache2同时支持prefork和worker。这些都是MPM,但彼此之间却有很大的不同。prefork模块在启动时会创建多个子进程,每个子进程仅处理一个线程。相反,工作程序使用子进程,该子进程在每个进程中产生许多线程,并且每个线程准备接受新的请求。尽管prefork需要相当多的RAM,但它是最安全的模块,在使用非线程安全的库时应使用它。
要检查是否已加载prefork模块,请发出以下命令:
apache2ctl -M | grep prefork
如果没有看到任何结果,则说明prefork没有加载。在加载之前,必须先卸载mpm_event模块,因为它们会发生冲突。卸载mpm_event,发出命令:
sudo a2dismod mpm_event
使用以下命令重新启动Apache:
sudo systemctl restart apache2
现在,您可以使用以下命令加载mpm_prefork:
sudo a2enmod mpm_prefork
再次使用以下命令重新启动Apache:
sudo systemctl restart apache2
二、如何配置mpm_prefork
偶尔您的Web服务器确实需要大量资源消耗,可以对prefork配置进行调整。为此,发出命令:
sudo nano /etc/apache2/mods-available/mpm_prefork.conf
在该文件中,您将看到以下选项:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 0
您可能希望将这些数字大幅度提高,如果您知道服务器将承受更大的负载(并且有足够的RAM可用),则可以这样更改配置:
StartServers 4
MinSpareServers 3
MaxSpareServers 40
MaxRequestWorkers 200
MaxConnectionsPerChild 10000
确保根据您的硬件可以处理的内容以及所需的负载来编辑这些数字。保存并关闭文件。使用以下命令重新启动Apache:
sudo systemctl restart apache2
此时,mpm_prefork已被启用和配置。如果您对测试感兴趣,可以运行Perl脚本。当这样做时,请小心使用,因为它是一个Perl脚本,您可能不知道。实际上,您可能希望下载脚本并首先仔细检查它(以检查是否有恶意代码)。
使用以下命令下载脚本:
wget https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl
阅读完它,觉得它值得信任后,请运行以下命令:
sudo perl apache2buddy.pl
命令完成后,您应该会看到有关Apache内存使用情况的报告(图A)。
Apache mpm_prefork现在正在运行。请确保调整您的配置以最佳地满足您的环境需求,这个模块将很好地为您服务。