我已经将 PHP 安装为 Apache 模块。我一直在prefork
运行它。我读到过它worker
会消耗更少的内存,同时提供更高的性能]1。因此,我编辑/etc/sysconfig/httpd
并取消了注释:
HTTPD=/usr/sbin/httpd.worker
并重新启动 Apache。
但是,当我运行时httpd -l
,仍然会出现以下情况:
core.c prefork.c http_core.c mod_so.c
我想这意味着prefork
仍在运行但没有运行worker
。
现在,当我运行 top 命令时,我会得到httpd.worker
列COMMAND
,而不仅仅是httpd
。
我的问题是:我当前的设置是否错误?它们是否会损害服务器的性能或内存消耗?
我见过有人在同一个教程中包含 Apache worker 和 PHP FastCGI,所以我认为这两个是相辅相成的。我mod_php
现在应该配置 PHP FastCGI 来替换吗?
顺便说一下,我正在使用 Amazon EC2。
答案1
在 RHEL 衍生产品上,httpd
使用 prefork 并httpd.worker
使用 worker。
更改 sysconfig 中的行会更改服务使用的二进制文件,但是当您直接运行 prefork 二进制文件时,您将始终看到 prefork 作为实时 MPM(并且运行httpd.worker -l
将为您提供预期的结果。
因此,您的配置运行正常。
我见过有人在同一个教程中包含 Apache worker 和 PHP FastCGI,所以我认为这两个是相辅相成的。我现在应该配置 PHP FastCGI 来替换 mod_php 吗?
在 RHEL 衍生产品的默认配置中,当您切换到 worker 时,配置将自动切换到 ZTS 模块以确保线程安全。FastCGI 不是必需的,但如果这是您的首选部署,您绝对可以设置它。