【发布时间】:2017-09-20 15:53:42
【问题描述】:
我们遇到了一个问题,即 Apache (2.4.10) FCGID (2.3.9) PHP 进程在 Debian 上陷入“工作”状态。
这些 PHP 进程不占用系统资源(除了它们之前处理先前请求使用的内存占用)并且处于空闲状态。 它们仍然附加到正确的逻辑父进程(处理此 vhost 上的请求的 apache2 进程)
将 strace 连接到它们显示它们处于状态: 接受(0, 我们假设监听接收下一个请求。
在我们的 PHP 处理中添加到 handle_shutdown 函数中的应用程序日志显示所有这些请求都已命中 handle_shutdown 函数(没有错误) - 正如您对任何 PHP 处理的请求所期望的那样(因为您总是点击 handle_shutdown 函数),所以据我们所知,整个请求已“成功” Apache 访问日志中记录了 200 响应。
但是,apachectl fullstatus fcgid 部分显示该进程处于“工作”状态而不是“就绪”状态
更改 Fcgid 设置上的回收因子(最大请求数、生命周期、设置的超时时间更高或更低等)似乎不会影响这些发生的规律性。
一个 apachectl graceful 成功清理了所有空闲的“工作”线程并恢复正常。
但是,当然,如果我们不看就离开,最终,每个进程迟早都会处于这种状态,直到我们最终得到一个完全空闲的服务器,其中我们所有的最大进程 (100) 都是卡在“等待”但闲置。此时内存使用是合理的,当然 CPU、网络等都可以忽略不计,因为服务器将响应的唯一请求是 fullstatus(因为它没有命中 PHP vhost 部分)
【问题讨论】:
-
(哦,我们确实尝试将 apache2.conf 的 Mutex 模式从 file: [sdfds] 更改为 sem...,因为我们发现在 debian 上提到了 apache)
-
您可能会在serverfault.com 上得到更好的回应,因为 SO 更多的是关于编程
标签: php apache zombie-process fcgid