PHP 7.2.9随机出现内存不足

时间:2018-10-16 09:28:59

标签: php out-of-memory fatal-error

我们在Windows上将Apache(32位)与PHP 7.2.9结合使用。它在大多数情况下都有效,但是经过大量刷新(每次重新启动apache都是随机的次数),我们得到此错误:致命错误:内存不足(已分配27262976)试图在[random中分配4096个字节文件,总是在x行上。]

奇怪的是,它一直给出完全相同的错误,直到我们重新启动Apache,然后它才能工作几个小时。

也很奇怪的是,我们在php.ini中将512M设置为内存限制,但它说分配了27262976,也就是26MB。我们有2GB +的可用RAM,所以这不是问题。

如果有人知道如何解决这个问题,那就太好了。

谢谢, 拉斯

1 个答案:

答案 0 :(得分:0)

很有可能只是内存碎片了。 (我以前有similar issues。)您必须在代码运行时让垃圾回收更多地工作。

一种实现方式

您必须确定整个过程中创建最大数组或对象的部分,并将其分成多个较小的步骤。我不知道您的代码做什么,但是重要的部分是 PHP在某些步骤进行垃圾回收,例如,当一个函数返回并释放自己的环境时。因此,如果您说要循环处理10000个文件,那么实施一个队列系统会很有帮助,在该系统中放入100个文件,调用一个函数来处理它们,然后继续处理队列。我知道这听起来很愚蠢,但是如果您考虑一下,这是有道理的。

另一种方式

您可以为可变长度的数据分配相同大小的结构,例如仅使用一部分的50-100k砖;这样,内存就不会像碎片一样分散。但是垃圾收集要好得多,这通常是他的工作。

不得已

当内存即将用尽时-您可以通过调用memory_get_usage(true)进行检查-序列化正在使用的大型结构,取消设置变量,然后反序列化。这样应该可以解决分配问题。

希望上面的一些帮助。