我有一台 CentOS 5.5. 服务器,正在尝试从 MPM Prefork 切换到 MPM worker。我目前安装了标准的 yum httpd 包,根据我的阅读,我做了以下事情:
- 取消注释 /etc/sysconfig/httpd 文件中的 httpd.worker 行。
- 我还确保 httpd.worker 文件存在于 /usr/sbin/ 目录中。
- 在进行上述更改之前,我还确保 httpd 服务已停止。
确保已为 Apache 禁用 PHP。我对此很满意,一旦我启动并运行 MPM 工作程序,我就会使用 FastCGI 来处理 PHP 文件。
重新启动httpd服务,一切正常。
- 执行 # httpd -V
- 控制台告诉我它仍在使用 prefork。
如果我执行 # vi /etc/init.d/httpd,httpd.worker 行仍被注释掉。我也尝试过更改它,但没有任何区别。
有什么建议吗?需要注意什么?我的应用程序需要 worker MPM,所以我能想到的唯一选择是使用 ubuntu 或其他具有专用 apache2-mpm-worker 包的版本。yum 存储库中是否有类似的东西?
提前致谢!
答案1
在我的系统上,我刚刚编辑了 /etc/sysconfig/httpd 文件以启用 httpd.worker。
重新启动 httpd 后,我运行“ps -ef | grep -i http”并得到以下结果:
[root@localhost httpd]# ps -ef | grep -i http
root 16334 17289 0 10:44 pts/1 00:00:00 grep -i http
root 30536 1 0 10:00 ? 00:00:00 /usr/sbin/httpd.worker
apache 30539 30536 0 10:00 ? 00:00:00 /usr/sbin/httpd.worker
apache 30541 30536 0 10:00 ? 00:00:02 /usr/sbin/httpd.worker
[root@localhost httpd]#
如果我将 /etc/sysconfig/httpd 切换回默认值,ps 输出将如下所示:
[root@localhost httpd]# ps -ef | grep -i http
root 16447 1 0 10:47 ? 00:00:00 /usr/sbin/httpd
apache 16448 16447 0 10:47 ? 00:00:00 /usr/sbin/httpd
apache 16449 16447 0 10:47 ? 00:00:00 /usr/sbin/httpd
apache 16450 16447 0 10:47 ? 00:00:00 /usr/sbin/httpd
apache 16451 16447 0 10:47 ? 00:00:00 /usr/sbin/httpd
apache 16453 16447 0 10:47 ? 00:00:00 /usr/sbin/httpd
apache 16454 16447 0 10:47 ? 00:00:00 /usr/sbin/httpd
apache 16455 16447 0 10:47 ? 00:00:00 /usr/sbin/httpd
apache 16456 16447 0 10:47 ? 00:00:00 /usr/sbin/httpd
root 16458 17289 0 10:47 pts/1 00:00:00 grep -i http
[root@localhost httpd]#
在这种情况下,“httpd -V”输出与之前相同。
由于正在运行的进程数与我在“/etc/httpd/conf/httpd.conf”中设置的 prefork 和 worker 模块的配置选项相匹配,所以我相信它可以按宣传的那样运行。
我怀疑“httpd -V”报告了默认编译。因为:服务器二进制名称不同。httpd(prefork,default)!= httpd.worker(非默认)
担
答案2
我猜想最快的方法是用 httpd 替换 httpd.worker,然后重新启动 httpd。有时您的应用程序使用绝对路径调用 httpd。