我如何判断 apache 是否正在运行(或配置为运行)作为 prefork 还是 worker?
答案1
MPM 在编译时配置。事后找出它的一种方法是列出已编译的模块。该列表将包括所选的 MPM。可以使用 -l 标志运行 apache 二进制文件来完成列表。
andreas@halleck:~$ apache2 -l
Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
worker.c
http_core.c
mod_so.c
andreas@halleck:~$
在这里我们找到了模块 worker.c,因此我正在运行 worker MPM。
答案2
在 Ubuntu 14.04 中
a2query -M
告诉event
,,prefork
worker
您可以通过在 中添加mpm_<chosen>
从mods-available
到 的符号链接来更改它。mods-enabled
/etc/apache2
每次只允许一个。
答案3
Series8217 和 Andol 给出的答案都是错误的。
问题是,如何判断 Apache跑步prefork 或 worker。其他答案给出的建议只告诉了默认MPM 是(基于编译模块),而不是当前正在使用默认值或其他选择。
如果httpd -V
显示 prefork,那只是意味着 prefork 是编译后的默认 MPM。可以通过更改 Apache 配置文件设置来覆盖它,如以下过程所示:
- 编辑配置文件(例如
/etc/sysconfig/httpd
在 CentOS/RedHat 上) - 添加或取消注释此行:
HTTPD=/usr/sbin/httpd.worker
- 重启 Apache
可以使用此过程显示哪个 MPM 正在实际运行:
- 启用 Apache mod_info
- 查询 mod_info url,通常
curl localhost/server-info
- “服务器设置”部分将显示“MPM 名称:Worker”
- 再次运行
httpd -V
--它仍然会显示prefork,而不是worker
底线:
httpd -V
显示默认选项,而不是实际正在使用的选项
很多网站上都有答案说,使用 来httpd -V
判断 Apache 是在运行 prefork 还是 worker。它们都是错的。尝试上述步骤来亲自看看。
答案4
我在类似 Debian 的发行版中找到的一个方法是运行:
apachectl -V | grep -i mpm