我在数字海洋上有一个8GB的液滴。我们今天推出了我们的网站,我们获得了大量的流量,我们有大约 3000 个并发用户。
我试图提高并发连接的数量(在apache2buddy的建议下(,但建议MaxRequestWorkers为482。这是文件:
<IfModule mpm_prefork_module>
ServerLimit 482
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 482
MaxConnectionsPerChild 0
</IfModule>
Apache2 使用mdm_prefork,我们已经读到如果我们使用mdm_worker会更好。
所以我尝试禁用mdm_prefork,以便我可以启用mdm_worker:
a2dismod mpm_prefork
我收到以下错误:
ERROR: The following modules depend on mpm_prefork and need to be disabled first: php7.3
我必须做什么才能启用mpm_worker?
我找到了在我的 ubuntu 服务器上解决此问题的可能解决方案,不知道您是否也在运行 ubuntu,但我觉得我采取的步骤对于几乎所有发行版都是相同的,只需一步进行更改,您需要安装一个新软件包,并且该命令可能会根据您使用的发行版而更改。
所以第一步是
$ sudo a2dismod php7.3 mpm_prefork
这将禁用预分叉模块,但在此之前它将禁用 php7.3 模块以阻止依赖项错误的发生。
接下来,我们启用工作线程模块
$ sudo a2enmod mpm_worker
现在,输出将建议您重新启动 apache Web 服务器。所以,我们做同样的事情
$ sudo systemctl restart apache2
现在,如果您去检查您的网站主页,它可能会抛出错误或加载空白页面。
那么,我们如何解决这个问题;我搜索了多个社区论坛,并找到了与之相关的解决方案,但它适用于 freebsd 平台,因此在 ubuntu 上尝试了相同的方法,需要在 ubuntu 端进行一些调整才能使步骤正常工作。
基于 ubuntu 操作系统的解决方案:
首先,我们启用代理,proxy_fcgi和setenvif模块,然后安装与您的php版本相对应的php-fpm软件包
$ sudo a2enmod proxy
$ sudo a2enmod proxy_fcgi
$ sudo a2enmod setenvif
$ sudo apt-get install php7.3-fpm -y
php7.3-FPM 安装命令是您可能需要根据您使用的发行版检查安装步骤的命令。
一旦安装了php-fpm服务,您需要确保它被启用,然后启动它,所以为此
$ sudo a2enconf php7.3-fpm
$ sudo systemctl enable php7.3-fpm.service
$ sudo systemctl start php7.3-fpm.service
一旦 php-fpm 服务成功启动,只需重新启动 apache 服务即可确保所有所做的更改正确生效
$ sudo systemctl restart apache2
执行这些步骤后,请检查/刷新您的网站主页,错误页面或空白页面将更改为正确的网站页面。
最终结果;您的网站已经从使用prefork模块转变为worker模块来处理请求。
另外,如果你想切换到事件模块而不是工作模块;只需在第二步中启用事件模块代替工作模块;禁用php7.3和prefork模块后将采用
的那个取代
$ sudo a2enmod mpm_worker
跟
$ sudo a2enmod mpm_event
其余所有步骤保持不变,无论启用工作线程还是事件模块。
这些步骤帮助我在服务器上从预分叉模块切换到工作模块,所以希望它可以帮助您并帮助其他在这个问题上偶然发现的人。