我如何知道Apache是​​否以prefork或worker的身份运行?

我如何知道apache是​​否正在运行(或configuration为运行)作为prefork或worker?

    MPM是在编译时configuration的。 之后解决的一个方法是列出编译模块。 该清单将包括所选的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:~$ 

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

    Series8217和Andol给出的答案都是不正确的。

    问题是,如何判断Apache是​​否正在运行 prefork或worker。 其他答案给出的build议只能告诉默认 MPM是什么(基于编译模块),而不是当前正在使用默认或其他选项。

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

    1. 编辑configuration文件(例如CentOS / RedHat上的/etc/sysconfig/httpd
    2. 添加或取消注释以下行: HTTPD=/usr/sbin/httpd.worker
    3. 重新启动Apache

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

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

    底线:

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

    许多网站上都有答案,使用httpd -V来告诉Apache是​​否正在运行prefork或worker。 他们都是错的。 尝试上面的程序来看看你自己。

    在Ubuntu 14.04

     a2query -M 

    告诉eventpreforkworker

    你可以通过添加符号链接来从mods-availablempm_<chosen>添加符号链接, mpm_<chosen>/etc/apache2 mods-enabled

    一次只允许一个。

    在RedHat和衍生物上,只需启动topps aux并查看httpd进程名称即可:

    • httpd意味着Apache正在作为prefork运行
    • httpd.worker意味着它作为worker运行

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

     <Location /server-info> SetHandler server-info </Location> 

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

    在RHEL / Fedora /等上运行httpd -V 。 你会得到一些输出,其中包括以下内容:

     Server version: Apache/2.2.21 (Unix) ... Architecture: 64-bit Server MPM: Prefork ... 

    这里“Server MPM”是“Prefork”,所以我的服务器正在运行prefork MPM。

    克里斯·约翰逊的回答是对的。

    启用信息模块后,如Apache文档( http://httpd.apache.org/docs/2.2/mod/mod_info.html )中所述,这一个class轮将为您提供您正在使用的MPM:

     links -dump http://localhost/server-info/?server | grep "MPM Name" 

    这是另一种我期望在确定使用哪个MPM时应该可靠的方法。 将以下内容添加到您的httpd.conf

     <IfModule prefork.c> Header append X-MPM prefork </IfModule> <IfModule worker.c> Header append X-MPM worker </IfModule> 

    然后使用curl -I localhost | grep X-MPM检查标题 curl -I localhost | grep X-MPM

    我在Debian中发现的一种方式就是运行:

     apachectl -V | grep -i mpm 

    在centos(或rhel)上你可以运行这个命令:

     ps -ef | grep httpd 

    如果看到/usr/sbin/httpd.worker正在运行,那么它正在使用worker MPM。 如果你看到/usr/sbin/httpd正在运行,那么它正在使用prefork