我有一个永远运行的PHP程序(不是一个套接字服务器的网页)。处理超过1000个请求后,程序最终因内存不足异常而崩溃。
我不确定为什么会发生这种情况,我尝试在处理程序中的请求(onMessage)的函数中使用垃圾收集函数,但它不会导致任何更改。任何建议将不胜感激。
答案 0 :(得分:2)
投入大量精力,您可能会暂时缓解这种情况。但最终您将无法运行非终止的PHP应用程序。
结帐PHP is meant to die。本文讨论PHP的内存处理(以及其他内容),并特别关注为什么所有长时间运行的PHP进程最终都会失败。一些摘录:
有几个问题只会让PHP成为错误的工具。请记住,无论你怎么努力,PHP都会死。首先,存在内存泄漏问题。一旦它不再使用,PHP从不关心释放内存,因为一切都将在最后释放 - 通过死亡。在一个持续运行的过程中,这将慢慢地增加分配的内存(实际上是浪费的内存),直到达到PHP的 memory_limit 值并在没有警告的情况下终止你的进程。除了期望这个过程永远存在之外,你没有做错任何事。在负载下,将“慢速”部分替换为“很快”。
“不浪费记忆”的前沿有所改善。可悲的是,他们还不够。随着事情变得复杂或负载增加,它会崩溃。