PHP memory_limit是否为PHP预分配内存

时间:2016-02-19 05:03:52

标签: php ubuntu nginx memory-limit

我们网站上的一些页面达到了PHP内存限制,目前设置为128MB。当请求将内存限制提高到256MB时,我们的托管公司的工程师告诉我们:

在我们的服务器"平均请求需要少于64MB的RAM"

"将内存限制转移到256MB实质上会创建192M内存的平均分配,但在大多数请求中都不会使用#34;

这是否正确,memory_limit数量实际上是预先分配的,我们的大多数请求都会浪费192MB?

谢谢!

4 个答案:

答案 0 :(得分:6)

来自:http://php.net/manual/en/ini.core.php#ini.memory-limit

  

这将设置脚本的最大内存量(以字节为单位)   允许分配。这有助于防止编写糟糕的脚本   吃掉服务器上所有可用的内存。请注意,没有   内存限制,将此指令设置为-1。

根据我的经验,许多网站需要超过128M。

答案 1 :(得分:3)

不,不。它设置允许脚本分配的最大值。它不会自行分配。使用php memory_get_usage函数进行测试。

source

答案 2 :(得分:2)

没有。你不能用memory_limit预先分配内存。

也可以参考此帖子作为参考:How do I pre-allocate memory for an array in PHP?

也许他的意思是通过在全球范围内将限制提高到256M,平均请求达到了192M。这意味着有很多人达到荒谬的低64M限制。

答案 3 :(得分:1)

指向PHP内存限制是“防止编写糟糕的脚本以占用服务器上的所有可用内存”,而不是“预先分配内存大小”。

例如来自PHP5.6 source它只是一个根据需要强制执行的硬帽 - 或者说“脚本可能消耗的最大内存量”。

zend_mm_safe_error(heap, "Allowed memory size of %ld bytes exhausted (tried to allocate %ld bytes)", heap->limit, size);

参考:http://jpauli.github.io/2014/07/02/php-memory.html