我如何知道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文件设置来覆盖,如下所示:
/etc/sysconfig/httpd
) HTTPD=/usr/sbin/httpd.worker
哪个MPM实际运行可以使用这个过程显示:
curl localhost/server-info
httpd -V
– 它仍然会显示prefork,而不是worker 底线:
httpd -V
显示默认选项,而不是实际使用的选项 许多网站上都有答案,使用httpd -V
来告诉Apache是否正在运行prefork或worker。 他们都是错的。 尝试上面的程序来看看你自己。
在Ubuntu 14.04
a2query -M
告诉event
, prefork
, worker
你可以通过添加符号链接来从mods-available
为mpm_<chosen>
添加符号链接, mpm_<chosen>
在/etc/apache2
mods-enabled
。
一次只允许一个。
在RedHat和衍生物上,只需启动top
或ps 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