我们遇到了一个问题,即 Apache (2.4.10) FCGID (2.3.9) PHP 进程在 Debian 上陷入“工作”状态。
这些 PHP 进程不占用系统资源(除了处理先前请求时使用的内存占用量)并且处于空闲状态。它们仍然附加到正确的逻辑父进程(处理此 vhost 上的请求的 apache2 进程)
将 strace 连接到它们表明它们处于状态:accept(0,我们假设正在侦听接收下一个请求。
在我们的 PHP 处理中添加的应用程序日志记录在 handle_shutdown 函数中显示所有这些请求都已命中 handle_shutdown 函数(没有错误) - 正如您对任何 PHP 处理的请求所期望的那样(因为您总是点击 handle_shutdown 函数),所以最好据我们所知,整个请求已“成功” Apache 访问日志中记录了 200 响应。
但是,apachectl fullstatus fcgid 部分显示该进程是“工作”而不是“就绪”
更改 Fcgid 设置上的回收因子(最大请求数、生命周期、设置的超时时间更高或更低等)似乎不会影响这些发生的规律性。
一个 apachectl graceful 成功地清理了所有空闲的“工作”线程并恢复正常。
但是,当然,如果我们不看就离开,最终,每个进程迟早都会处于这种状态,直到我们最终得到一个完全空闲的服务器,其中我们所有的最大进程(100)都卡在“等待"但闲着。此时内存使用是合理的,当然 CPU、网络等下降到可以忽略不计,因为服务器将响应的唯一请求是 fullstatus(因为它没有命中 PHP vhost 部分)