PHP进程在默认128M内存下运行良好,但在内存增加到150M时失败

PHP进程在默认128M内存下运行良好,但在内存增加到150M时失败,php,memory,memory-management,Php,Memory,Memory Management,我们有一个基于类的PHP脚本,它对多个字符串进行操作,其中最长的一个字符串长度为475k。此字符串在30k个元素的数组中分解 现在,当我使用默认内存限制(PHPCLI)运行脚本时,这个过程运行得非常好,但是当我尝试将内存限制增加到150M时,它失败了,第行出现了“已分配内存耗尽”错误,将字符串分解为数组。根据错误,当脚本失败时,explode函数本身尝试再分配158M内存 我们试着在“top”下观察内存使用情况,当使用128M时,垃圾收集会触发大约120M,将内存使用率拉到94M。当内存限制更改

我们有一个基于类的PHP脚本,它对多个字符串进行操作,其中最长的一个字符串长度为475k。此字符串在30k个元素的数组中分解

现在,当我使用默认内存限制(PHPCLI)运行脚本时,这个过程运行得非常好,但是当我尝试将内存限制增加到150M时,它失败了,第行出现了“已分配内存耗尽”错误,将字符串分解为数组。根据错误,当脚本失败时,explode函数本身尝试再分配158M内存

我们试着在“top”下观察内存使用情况,当使用128M时,垃圾收集会触发大约120M,将内存使用率拉到94M。当内存限制更改为150M时,垃圾回收根本不会触发,或者至少在“top”中不可见

你知道PHP为什么会这样吗。我知道我可以使用默认限制,但知道这背后的原因会有所帮助

系统:Mac OS Sierra

PHP:7.0.14

你能试着分配256M而不是150M吗

因为150M不是边界块值,所以128M->256M->512M->等


问题还会出现吗?

暗中试探:是否您增加了“每个请求”的内存分配,超出了您的总内存分配?是的,150不是块值,但同样的过程正常工作,180M也是,不是块值。是的,非常奇怪。。。对不起,我不能再帮你了