我正在使用运行 Apache2.4 和 CentOS7 的 VPS。我遇到了一些线程问题,想尝试以 prefork 模式运行 Apache。
如果我运行apachectl -V
来检查我处于哪种模式,我会得到以下结果:
Server MPM: worker
threaded: yes (fixed thread count)
forked: yes (variable process count)
然而,当我检查 MPM conf(/etc/httpd/conf.modules.d/00-mpm.conf
)时,我看到 prefork 模块已经加载:
#HTTPD=/usr/sbin/httpd.worker
#OPTIONS=
HTTPD_LANG=C
#PIDFILE=/var/run/httpd/httpd.pid
# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
进一步检查,/etc/sysconfig/httpd
我发现工作人员的那行已被注释掉:
#HTTPD=/usr/sbin/httpd.worker
#OPTIONS=
HTTPD_LANG=C
#PIDFILE=/var/run/httpd/httpd.pid
我已检查此配置是否确实应用于我正在使用的 Apache 实例。例如,模式/etc/httpd/conf.modules.d/*.conf
已包含在我的httpd.conf
文件中。这些选项是否可能在某处被覆盖,还是我遗漏了什么?谢谢!
答案1
我找到了问题所在;还有另一个 conf 文件/etc/apache2/conf.modules.d/000_mod_mpm_worker.conf
会加载mpm_worker_module
。我尝试取消注释LoadModule
此文件中的行,但随后在重新启动时收到来自 Apache 的错误,告诉我没有加载 MPM 模块。最终的解决方案是将此文件更改为并在其中000_mod_mpm_prefork.conf
加载。mpm_prefork_module