如何判断 apache 是作为 prefork 还是 worker 运行?

46 apache-2.2

如何判断 apache 是作为 prefork 还是 worker 运行(或配置为运行)?

Chr*_*son 61

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. 重启阿帕奇

可以使用以下过程显示实际运行的 MPM:

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

底线:

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

许多网站上都有答案说,httpd -V用来判断 Apache 是运行 prefork 还是 worker。他们都错了。试试上面的过程,自己看看。

  • 在 CentOS 6.6 /usr/sbin/httpd 上,/usr/sbin/httpd.event 和 /usr/sbin/httpd.worker 都是不同的二进制文件,在编译时配置了不同的 MPM(分别为 prefork、event 和 worker)。更改 /etc/sysconfig/httpd 中的 HTTPD 设置仅控制 init 脚本运行哪个二进制文件。 (2认同)

Jor*_*eFG 55

在 Ubuntu 14.04 中

a2query -M
Run Code Online (Sandbox Code Playgroud)

告诉event, prefork,worker

您可以通过为mpm_<chosen>frommods-availablemods-enabledin添加符号链接来更改它/etc/apache2

一次只允许一个。

  • 这需要是公认的答案。 (3认同)

and*_*dol 35

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:~$ 
Run Code Online (Sandbox Code Playgroud)

在这里我们找到了模块 worker.c,因此我正在运行 worker MPM。

  • 这个答案是错误的。看我的回答。 (10认同)
  • 在 Ubuntu 上,您可以使用 `apache2ctl -M` 来列出活动模块。 (2认同)

小智 7

在 RedHat 和衍生产品上,只需启动topps aux查看 httpd 进程名称:

  • httpd 意味着 Apache 作为 prefork 运行
  • httpd.worker 意味着它作为工人运行


Hex*_*Hex 6

我在 Debian(如发行版)中找到的一种方法是运行:

apachectl -V | grep -i mpm
Run Code Online (Sandbox Code Playgroud)


小智 5

克里斯约翰逊是对的。转到httpd.conf => 添加这一行:

<Location /server-info>
SetHandler server-info
</Location>
Run Code Online (Sandbox Code Playgroud)

重启apache:/etc/init.d/httpd restart。然后通过浏览器访问localhost/server-info查看 MPM Name 部分