如何在 Ubuntu 14.04 上使用线程安全 PHP 启用事件 MPM Apache 2.4?

如何在 Ubuntu 14.04 上使用线程安全 PHP 启用事件 MPM Apache 2.4?

我升级到了 Ubuntu Server 14.04,希望默认的 apache 安装能够使用新的事件 MPM,但是却发现旧的占用大量内存的 prefork。

我已经在 Arch Linux 中成功设置了事件 MPM,但在 Ubuntu 上却无法设置。我不断收到以下信息:

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP

我已经安装php-fpm并配置了 apache2 来使用它,但由于 apache2 的配置文件在 Ubuntu 上不同,我不太确定我是否在正确的地方执行此操作。

关于如何使 PHP 线程安全以便我可以使用 apache2 event-mpm,您有什么想法吗?(当然,无需手动重新编译 php)

答案1

要禁用event MPM,您可以执行以下操作sudo a2dismod mpm_event,然后要启用prefork,您应该执行以下操作sudo a2enmod mpm_prefork

最后重新启动apache:

sudo service apache2 restart

答案2

这对我有用。

首先检查您是否安装了此包:

dpkg -l | grep libapache2-mod-php5

如果有的话,只需将其删除:

apt-get remove libapache2-mod-php5

答案3

您可以安装多种方式让 Apache 与 PHP 并行通信。除了 fastcgi/php-fpm 之外,也许您(仍然)安装了旧的 mod_php。

你可以使用以下命令查看 Apache 在运行时加载了哪些模块

apache2ctl -M

如果需要,使用sudo获取 root 权限。如果您php5_module (shared)在 Apache 当前正在使用的模块中看到,则旧的 mod_php 仍安装并阻止您使用mpm_workermpm_event

答案4

在 Apache 配置文件的加载模块部分中查找以下内容:

LoadModule mpm_event_module modules/mod_mpm_event.so

并将其替换为以下模块:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

相关内容