【问题标题】:PHP Memory LimitPHP 内存限制
【发布时间】:2010-08-17 09:45:41
【问题描述】:

我有一个小问题,当我们为 PHP 设置 memory_limit 时,我知道它将使用该整数作为脚本允许使用的最大内存。

这是否意味着如果我将最大值设置为 64MB,而我的脚本只需要 12MB,它会因为允许而使用完整的 64MB?

我问是因为我注意到我的一些脚本虽然使用了 12MB(使用 get_memory_usage 发现)但 httpd 进程本身正在接近 64MB 标记,尽管这是唯一运行的脚本!顺便说一句,我没有内存泄漏问题。

它产生的其他进程(即 CMD)是否也会被添加到 httpd 进程的整体内存使用量中?

感谢大家帮我解决这个问题。

【问题讨论】:

  • (旁注)要获得脚本在其生命周期内消耗的最大内存,请在脚本末尾使用memory_get_peak_usage
  • “但 httpd 进程本身正在接近 64MB” - 您在哪里看到(您使用哪个程序)以及您指的是哪个值?
  • @VolkerK - 我在 Windows 机器上,所以我在内存列下的进程选项卡上使用任务管理器。
  • @Gordon - 谢谢,我会试试的。但奇怪的是,当任何脚本运行时,它会在脚本生命周期中跳到足够接近 64,000KB,然后又回来。

标签: php memory


【解决方案1】:

PHP 的 memory_limit 只考虑由 Zend 引擎的内存管理器处理的内存(请参阅Zend/zend_alloc.c),并且该管理器不会“先发制人地”分配通过 memory_limit 设置的数量(尽管它在段中分配新内存) .并非所有“在”PHP 中的东西都由内存管理器处理,但大部分都是。由您的 php 实例生成的其他进程不会“继承”内存管理器。因此,它们的内存消耗不计入 memory_limit。

您在任务管理器中看到的(很可能)是 httpd 进程的working set包括 由 php 分配的内存(是否由内存管理器处理)如果它是作为 apache 模块安装的。但是还有当前在物理内存中的 httpd 的任何其他内容。但它不包括派生进程分配的内存量。

【讨论】:

    猜你喜欢
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2014-02-06
    • 2014-06-28
    相关资源
    最近更新 更多