【问题标题】:How to get the memory available to PHP如何获取 PHP 可用的内存
【发布时间】:2013-12-29 22:26:34
【问题描述】:

我目前正在使用memory_get_usage 函数来确定我的PHP 脚本使用了多少内存。但是,我想根据 PHP 可用的内存总量显示内存使用值。

如何获取 PHP 可用的内存总量?

【问题讨论】:

    标签: php memory-management


    【解决方案1】:

    可以使用php.ini设置memory_limit:

    ini_get('memory_limit');
    

    从技术上讲,这不是 PHP 可用的总量,而是 PHP 脚本可用的总量。

    【讨论】:

    • @ComFreek 谢谢。当您说“可用于 PHP 脚本的数量”时,我假设您的意思是如果您将限制设置为例如8MB 并且您同时收到 100 个请求,总机器内存使用量将为 800MB?对吗?
    • @Luke 引用PHP docs:“这设置了脚本允许分配的最大内存量(以字节为单位)”。如果 100 个请求理论上并行运行,并且都分配 100MB 内存(前提是memory_limit >= 100M),那么使用的总内存将是 800MB。
    • 如果memory_limit 设置为-1 意味着无限... 那么您无法使用此解决方案。
    【解决方案2】:

    存在一个问题,使用 ini_get 时,您只能从 php.ini 获取字符串(例如 500500M1G 等)。

    如果您需要以字节为单位的实际值,您可以使用这个简单的开源工具:https://github.com/BrandEmbassy/php-memory

    然后您可以这样做:$limitProvider->getLimitInBytes();,该库会自动为您转换所有有效值。

    【讨论】:

      【解决方案3】:

      也许这个问题并不完全准确。因为分配和释放不同的内存区域会导致类似拼凑的内存分配,所以问题可能不是你想问的。

      例如,您从 6 兆字节的空闲 RAM 开始,每兆字节的空闲 RAM 由 F 表示:

      FFFFFF

      并分配三次 1MB,第一次分配给$a,第二次分配给$b,第三次分配给$c,然后你就得到了这张地图:

      abcFFF

      在此之后,您可以释放分配给$b 的第二兆字节,例如,您从一个函数返回,其中$b 是一个局部变量。现在地图是这样的:

      aFcFFF

      现在你有 4 兆字节的空闲内存,你可以分配 4 倍 1 兆字节,但你只能在一个块中分配 3 兆字节。

      那么,你真正的问题是哪一个:

      1. 我可以分配的最大连续区域是多少?
      2. 我可以分配的空闲区域总和是多少?

      第一个问题的答案是 3 MB,第二个问题的答案是 4。

      【讨论】:

        猜你喜欢
        • 2014-01-08
        • 2011-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多