我发现了PHP的memory_get_usage()
和memory_get_peak_usage()
。
问题在于,我发现这两个函数并没有提供当前脚本实际使用的内存。
我的测试脚本如下:
<?php
echo memory_get_usage();
echo '<br />';
$a = str_repeat('hello', 100000);
echo '<br />';
echo memory_get_usage();
echo '<br />';
echo memory_get_peak_usage();
?>
这将返回:
355120
5355216
5356008
你从中可以理解什么?
第一个值是在执行str_repeat()
之前,因此它必须是0
的值。
第二个值是处理后的值,如果有一个比0
大但不是那么大的值是可以接受的。
第三个值是“峰值”,它略微大于第二个值,我认为它应该是处理微秒中的最大值。
那么,您认为当前脚本的实际内存消耗值应该是这样的吗:
memory_usage = the second memory usage - the first memory usage
peak_memory_usage = the third (peak_usage) - the first memory usage
这段文字涉及到IT技术,翻译如下:
计算结果如下:
1) 5355216 - 355120 = 5000096 字节
2) 5356008 - 355120 = 5000888 字节
如果是这样的话,我认为第一个值355120
字节是Apache和其他模块使用的整个系统分配内存,因为在str_repeat()
重复次数增加或减少时,第一个值从未更改,只有进程后面的两个值会增加或减少,但永远不会比第一个值小。