Apache2/mod_fcgid/PHP 进程限制未得到遵守

Apache2/mod_fcgid/PHP 进程限制未得到遵守

我最近从 nginx / php_fpm 迁移到了 Apache2 / mod_fcgid / PHP。这是我进行迁移的第二台服务器,但它的使用频率远低于第一台,而第一台运行良好。

问题在于它所生成的 PHP 进程。在查看mod_fcgid 文档,看来默认终止空闲进程的时间为 300 秒;我已将其更改为 20。目前,如果 300 秒有效,那就没问题了 - 但事实并非如此。它已经运行了将近一天,服务器状态显示有 12 个活动进程:

进程名称:php5
Pid 活动 空闲 访问 状态
19243 84879 14420 11 准备就绪

进程名称:php5
Pid 活动 空闲 访问 状态
20954 82143 149 22 准备就绪
20947 82149 149 22 准备就绪
20953 82143 149 13 准备就绪

进程名称:php5
Pid 活动 空闲 访问 状态
20589 82765 23644 72 准备就绪

进程名称:php5
Pid 活动 空闲 访问 状态
17663 86103 2034 117 准备就绪

进程名称:php5
Pid 活动 空闲 访问 状态
19862 83961 1976 91 准备就绪

进程名称:php5
Pid 活动 空闲 访问 状态
18495 85825 5164 18 准备就绪

进程名称:php5
Pid 活动 空闲 访问 状态
25463 75109 23948 24 准备就绪

进程名称:php5
Pid 活动 空闲 访问 状态
2466 60019 60016 2 就绪

进程名称:php5
Pid 活动 空闲 访问 状态
20729 82541 12592 23 准备就绪

进程名称:php5
Pid 活动 空闲 访问 状态
22135 80616 46361 6 准备就绪

此时 PHP 应用程序尚未提供服务 - Apache 返回 503。但是,它仍在为服务器状态模块提供服务,并且仍在为 mod_mono/Mono 2.10 应用程序提供服务。问题出在 PHP 上。

/etc/apache2/mods-available/fcgid.conf ...

<IfModule mod_fcgid.c>
  AddHandler    fcgid-script .fcgi
  FcgidConnectTimeout 10
  FcgidMaxRequestsPerProcess 500
  FcgidIdleTimeout 20
  FcgidFixPathinfo 1
  FcgidMaxProcesses 10
</IfModule>

(嘿 - 最大进程数也没有被尊重......)当然,fcgid.conf 在 mods-enabled 中是 smylinked。

答案1

尝试设置环境变量:

PHP_FCGI_CHILDREN=0

在你的 php 启动脚本中。

mod_fcgid 将负责生成所有需要的进程。因此实际上不需要子进程,这些子进程通常会被遗弃。

相关内容