【问题标题】:Does PHP memory_limit pre-allocate memory to PHPPHP memory_limit 是否为 PHP 预先分配内存
【发布时间】:2016-05-31 13:49:46
【问题描述】:

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

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

“将内存限制转移到 256MB 实质上创建了 192M 的平均内存分配,大多数请求不会使用该内存”

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

谢谢!

【问题讨论】:

  • 你知道你的内存限制增加的确切原因吗?这似乎会给我带来危险。好问题 +1
  • 我们的内存限制并没有改变增加,老实说,我们不知道它在生产环境中设置为 128MB,直到我们收到一些投诉说某些管理功能无法正常工作。在我们要求将内存限制提高到 256MB 后,托管公司的工程师才告诉我们上述内容。

标签: php ubuntu nginx memory-limit


【解决方案1】:

发件人:http://php.net/manual/en/ini.core.php#ini.memory-limit

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

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

【讨论】:

    【解决方案2】:

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

    source

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 是堆还是栈? memory_limit 选项
      • 这是个好问题。我不知道,也找不到解释它的文档。
      【解决方案4】:

      关于 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

      【讨论】:

        猜你喜欢
        • 2015-12-05
        • 1970-01-01
        • 2012-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多