Apache flock_lock_file_wait 已删除 PHP 会话文件

Apache flock_lock_file_wait 已删除 PHP 会话文件

我们的生产网站出现了问题,Apache 实例莫名其妙地瘫痪了。服务器从未完全崩溃,只是 Apache 资源耗尽。

回顾一下这种情况,我发现我们的一大堆 Apache 进程永远卡在 flock_lock_file_wait 模式中。一旦某个进程卡在该模式中,就再也无法退出。因此,主进程会生成另一个子进程,而这个子进程最终会再次卡在该模式中,直到我们最终用完所有可用的子进程,网站就会陷入瘫痪。

我对其中一个“卡住”进程使用 lsof 后发现,它们卡在已删除的 PHP5 会话文件上。以下是卡住进程的 lsof 输出:

apache2 32489 www-data 36u REG 8,1 195 5974866 /var/lib/php5/sess_bd5afe5ad8b05531d48a7e6f81638faa (已删除)

我进入该目录,是的,该文件不见了。因此,Apache 进程卡住了,试图从已删除的文件中写入(或读取)会话数据。

我的问题是——我现在该怎么办?这似乎是 Apache 应该知道不要挂断的事情,但我不知道如何告诉它继续运行而不重新启动 Apache,而我们现在几乎每天都要重新启动 Apache。

有什么想法我可以去哪里吗?

相关内容