我有一个运行大约2个小时的PHP脚本。这是一个cron工作。 cron工作每4个小时运行一次。
在脚本结束时,我会显示一些内存值。
The memory_get_usage() result is 881568 Bytes (0.840766906738M)
The memory_get_peak_usage() result is 1340304 Bytes (1.27821350098M)
The memory_get_usage(true) result is 1572864 Bytes (1.5M)
The memory_get_peak_usage(true) result is 1835008 Bytes (1.75M)
php.ini中的memory_limit是128M,但它不起作用。我将它提升到256M,现在它可以工作。
但是由于脚本的内存峰值小于2M ....
那么memory_limit参数如何工作?
是脚本使用的总内存吗?如果是这样,我该怎么计算呢?
是脚本的内存峰值吗?如果是的话,我计算得对吗?
我正在使用php 5.3.16。
修改
我没有任何错误消息。当限制为128M时脚本执行,但永远不会完成。
答案 0 :(得分:3)
尝试使用使用操作系统的功能来报告实际内存,例如此内容。
function unix_get_usage() {
$pid = getmypid();
exec("ps -o rss -p $pid", $output);
return $output[1] *1024;
}
function windows_get_usage(){
$output = array();
exec('tasklist /FI "PID eq '.getmypid().'" /FO LIST', $output );
return preg_replace( '/[^0-9]/', '', $output[5] ) * 1024;
}
你的脚本可能会消耗大量的内存,PHP从memory_get_usage()(它查看堆btw)返回时不会考虑这些内存。
,当memory_get_usage()被调用并返回时,堆栈分配的变量将被清除。您还应尝试在执行期间的其他位置运行此功能和其他功能,例如在大MySQL调用或文件处理之后。 memory_get_peak_usage()可能不适用于所有操作系统,特别是取决于编译选项。