我们网站上的一些页面达到了PHP内存限制,目前设置为128MB。当请求将内存限制提高到256MB时,我们的托管公司的工程师告诉我们:
在我们的服务器"平均请求需要少于64MB的RAM"
和
"将内存限制转移到256MB实质上会创建192M内存的平均分配,但在大多数请求中都不会使用#34;
这是否正确,memory_limit数量实际上是预先分配的,我们的大多数请求都会浪费192MB?
谢谢!
答案 0 :(得分:6)
来自:http://php.net/manual/en/ini.core.php#ini.memory-limit
这将设置脚本的最大内存量(以字节为单位) 允许分配。这有助于防止编写糟糕的脚本 吃掉服务器上所有可用的内存。请注意,没有 内存限制,将此指令设置为-1。
根据我的经验,许多网站需要超过128M。
答案 1 :(得分:3)
不,不。它设置允许脚本分配的最大值。它不会自行分配。使用php memory_get_usage
函数进行测试。
答案 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);