If the real_usage
参数设置为true
PHP DOCS 说它将获取从系统分配的内存的实际大小。如果它是false
它将获得报告的内存emalloc()
这 2 个选项中的哪一个返回最大值。相对于 php.ini 中的内存限制值分配的内存?
我想知道脚本距离达到该限制还有多远。
好的,让我们使用一个简单的脚本来测试一下:
ini_set('memory_limit', '1M');
$x = '';
while(true) {
echo "not real: ".(memory_get_peak_usage(false)/1024/1024)." MiB\n";
echo "real: ".(memory_get_peak_usage(true)/1024/1024)." MiB\n\n";
$x .= str_repeat(' ', 1024*25); //store 25kb more to string
}
Output:
not real: 0.73469543457031 MiB
real: 0.75 MiB
not real: 0.75910949707031 MiB
real: 1 MiB
...
not real: 0.95442199707031 MiB
real: 1 MiB
not real: 0.97883605957031 MiB
real: 1 MiB
PHP Fatal error: Allowed memory size of 1048576 bytes exhausted (tried to allocate 793601 bytes) in /home/niko/test.php on line 7
似乎真正的使用是从系统分配的内存 - 似乎分配的存储桶比脚本当前所需的存储桶更大。 (我猜是出于性能原因)。这也是 php 进程使用的内存。
The $real_usage = false
use 是您在脚本中实际使用的内存使用量,而不是 Zend 内存管理器分配的实际内存量。
Read 这个问题 https://stackoverflow.com/a/2290965/781662了解更多信息。
简而言之:要了解您距离内存限制有多近,请使用$real_usage = true
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)