我如何知道 apache 是作为 prefork 还是 worker 运行?

我如何知道 apache 是作为 prefork 还是 worker 运行?

我如何判断 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,,preforkworker

您可以通过在 中添加mpm_<chosen>mods-available到 的符号链接来更改它。mods-enabled/etc/apache2

每次只允许一个。

答案3

Series8217 和 Andol 给出的答案都是错误的。

问题是,如何判断 Apache跑步prefork 或 worker。其他答案给出的建议只告诉了默认MPM 是(基于编译模块),而不是当前正在使用默认值或其他选择。

如果httpd -V显示 prefork,那只是意味着 prefork 是编译后的默认 MPM。可以通过更改 Apache 配置文件设置来覆盖它,如以下过程所示:

  1. 编辑配置文件(例如/etc/sysconfig/httpd在 CentOS/RedHat 上)
  2. 添加或取消注释此行:HTTPD=/usr/sbin/httpd.worker
  3. 重启 Apache

可以使用此过程显示哪个 MPM 正在实际运行:

  1. 启用 Apache mod_info
  2. 查询 mod_info url,通常curl localhost/server-info
  3. “服务器设置”部分将显示“MPM 名称:Worker”
  4. 再次运行httpd -V--它仍然会显示prefork,而不是worker

底线:

  • httpd -V显示默认选项,而不是实际正在使用的选项

很多网站上都有答案说,使用 来httpd -V判断 Apache 是在运行 prefork 还是 worker。它们都是错的。尝试上述步骤来亲自看看。

答案4

我在类似 Debian 的发行版中找到的一个方法是运行:

apachectl -V | grep -i mpm

相关内容