我正在使用 FastCGI (fcgi)。我遇到一个问题,生成的 PHP 进程比应有的要多,这会耗尽我的 RAM。
我正在使用 WHM,因此通过 WHM Web 界面 > Apache 配置 > 包含编辑器 > Pre VirtualHost Include 设置了以下 PHP 设置:
<IfModule mod_fcgid.c>
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 500
FcgidMaxRequestsPerProcess 500
FcgidMaxProcesses 15
FcgidMinProcessesPerClass 0
FcgidMaxProcessesPerClass 8
FcgidIdleTimeout 30
FcgidIdleScanInterval 15
FcgidProcessLifeTime 60
FcgidIOTimeout 300
FcgidMaxRequestLen 268435456
</IfModule>
(通常这些设置会进入/usr/local/apache/conf/php.conf
,但是在更改各种设置时此文件会被 WHM 覆盖,所以我不得不将它们插入其他地方。上述方法是在 cPanel 论坛中推荐的,它会导致设置包含在 Apache 配置中。)
然而,尽管如此FcgidMaxProcesses 15
,我发现top
在高峰使用期间,最多有 45 个 PHP 进程同时运行(甚至更多)。例如,这是上周末拍摄的屏幕截图:
我真的希望将其限制为最多 15 个进程。(尽管看起来我有多余的 RAM,但实际上 2GB + 1GB 是突发的。一般来说,我需要将其保持在 2GB 以下。)
它是一个 Apache 服务器,运行 CentOS 6、Apache 2(Worker MPM)、PHP 5.3.20(FastCGI/fcgi)和 MySQL 5.5.28。2 GB RAM(3 GB 可扩展)、24 个 CPU。
答案1
我相信以下可能是在 cPanel 中解决此问题的正确方法: http://www.ray.45press.com/configure-mpm-apache-xcache-fcgid-in-cpanel/
具体来说,它与编辑有关,/usr/local/cpanel/cgi-sys/php5
包括以下几行:
export PHP_FCGI_CHILDREN=1
export PHP_FCGI_MAX_REQUESTS=10000
但请确保与 Apache 配置PHP_FCGI_MAX_REQUESTS
相匹配。FcgidMaxRequestsPerProcess
此外,您还需要注意文件中将其复制到适当位置(/var/cpanel/conf/apache/wrappers/php5
)的注释,以便在 apache 或 php 更新时保留它。